summaryrefslogtreecommitdiff
path: root/meta-xilinx/meta-microblaze/recipes-devtools/gcc/gcc-10/0046-Patch-Microblaze-We-will-check-the-possibility-of-pe.patch
blob: eebf6ee72fcbdcd31a430cc90553e921a4dc3ed2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
From 444a09859149f8d21777a1c859ef2305ff86b211 Mon Sep 17 00:00:00 2001
From: Mahesh Bodapati <mbodapat@xilinx.com>
Date: Fri, 29 Mar 2019 12:08:39 +0530
Subject: [PATCH 46/54] [Patch,Microblaze] : We will check the possibility of
 peephole2 optimization,if we can then we will fix the compiler issue.

---
 gcc/config/microblaze/microblaze.md | 63 +++++++++++++++++------------
 1 file changed, 38 insertions(+), 25 deletions(-)

diff --git a/gcc/config/microblaze/microblaze.md b/gcc/config/microblaze/microblaze.md
index 207d2bf1b55..9b88666c0a6 100644
--- a/gcc/config/microblaze/microblaze.md
+++ b/gcc/config/microblaze/microblaze.md
@@ -882,31 +882,44 @@
   (set_attr "mode"	"SI")
   (set_attr "length"	"4")])
 
-(define_peephole2
-  [(set (match_operand:SI 0 "register_operand")
-        (fix:SI (match_operand:SF 1 "register_operand")))
-   (set (pc)
-        (if_then_else (match_operator 2 "ordered_comparison_operator"
-                       [(match_operand:SI 3 "register_operand")
-                        (match_operand:SI 4 "arith_operand")])
-                      (label_ref (match_operand 5))
-                      (pc)))]
-   "TARGET_HARD_FLOAT && !TARGET_MB_64"
-   [(set (match_dup 1) (match_dup 3))]
-
-  {
-    rtx condition;
-    rtx cmp_op0 = operands[3];
-    rtx cmp_op1 = operands[4];
-    rtx comp_reg =  gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
-
-    emit_insn (gen_cstoresf4 (comp_reg, operands[2],
-                              gen_rtx_REG (SFmode, REGNO (cmp_op0)),
-                              gen_rtx_REG (SFmode, REGNO (cmp_op1))));
-    condition = gen_rtx_NE (SImode, comp_reg, const0_rtx);
-    emit_jump_insn (gen_condjump (condition, operands[5]));
-  }
-)
+;; peephole2 optimization will be done only if fint and if-then-else
+;; are dependent.added condition for the same.
+;; if they are dependent then gcc is giving "flow control insn inside a basic block" 
+;; testcase:
+;;        volatile float vec = 1.0;
+;;        volatile int ci = 2;
+;;        register int cj = (int)(vec);
+;;//        ci=cj;
+;;//      if (ci <0) {
+;;        if (cj < 0) {
+;;                ci = 0;
+;;        }
+;; commenting for now.we will check the possibility of this optimization later
+
+;;(define_peephole2
+;;  [(set (match_operand:SI 0 "register_operand")
+;;        (fix:SI (match_operand:SF 1 "register_operand")))
+;;   (set (pc)
+;;        (if_then_else (match_operator 2 "ordered_comparison_operator"
+;;                       [(match_operand:SI 3 "register_operand")
+;;                        (match_operand:SI 4 "arith_operand")])
+;;                      (label_ref (match_operand 5))
+;;                      (pc)))]
+;;   "TARGET_HARD_FLOAT && !TARGET_MB_64 && ((REGNO (operands[0])) == (REGNO (operands[3])))"
+;;  [(set (match_dup 1) (match_dup 3))]
+;;  {
+;;    rtx condition;
+;;    rtx cmp_op0 = operands[3];
+;;    rtx cmp_op1 = operands[4];
+;;    rtx comp_reg =  gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
+;;
+;;    emit_insn (gen_cstoresf4 (comp_reg, operands[2],
+;;                              gen_rtx_REG (SFmode, REGNO (cmp_op0)),
+;;                              gen_rtx_REG (SFmode, REGNO (cmp_op1))));
+;;    condition = gen_rtx_NE (SImode, comp_reg, const0_rtx);
+;;    emit_jump_insn (gen_condjump (condition, operands[5]));
+;;  }
+;;)
 
 ;;----------------------------------------------------------------
 ;; Negation and one's complement
-- 
2.17.1