blob: 0c865224796290e240c5dfad99f19c2ed0e90bd7 [file] [log] [blame]
Andrew Geissler10fa1492020-12-11 16:25:29 -06001From 386b8dcef2d774e9138515814be0fd579ade5af5 Mon Sep 17 00:00:00 2001
Brad Bishop26bdd442019-08-16 17:08:17 -04002From: Mahesh Bodapati <mbodapat@xilinx.com>
3Date: Tue, 17 Jan 2017 17:04:37 +0530
Andrew Geissler10fa1492020-12-11 16:25:29 -06004Subject: [PATCH 16/54] [Patch, microblaze]: Add cbranchsi4_reg This patch
5 optimizes the generation of pcmpne/pcmpeq instruction if the compare
6 instruction has no immediate values.For the immediate values the xor
7 instruction is generated
Brad Bishop26bdd442019-08-16 17:08:17 -04008
9Signed-off-by: Nagaraju Mekala <nmekala@xilix.com>
10Signed-off-by: Ajit Agarwal <ajitkum@xilinx.com>
11
12ChangeLog:
132015-01-13 Nagaraju Mekala <nmekala@xilix.com>
14 Ajit Agarwal <ajitkum@xilinx.com>
15
16 *microblaze.md (cbranchsi4_reg): New
17 *microblaze.c (microblaze_expand_conditional_branch_reg): New
18
19Conflicts:
20
21 gcc/config/microblaze/microblaze-protos.h
22---
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050023 gcc/config/microblaze/microblaze-protos.h | 2 +-
24 gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c | 2 +-
25 gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c | 2 +-
26 gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c | 2 +-
27 gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c | 2 +-
28 gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c | 14 +++++++-------
29 gcc/testsuite/gcc.target/microblaze/isa/vanilla.c | 12 ++++++------
30 7 files changed, 18 insertions(+), 18 deletions(-)
Brad Bishop26bdd442019-08-16 17:08:17 -040031
32diff --git a/gcc/config/microblaze/microblaze-protos.h b/gcc/config/microblaze/microblaze-protos.h
Andrew Geissler10fa1492020-12-11 16:25:29 -060033index 982b2abd2d4..c2f88813a8d 100644
Brad Bishop26bdd442019-08-16 17:08:17 -040034--- a/gcc/config/microblaze/microblaze-protos.h
35+++ b/gcc/config/microblaze/microblaze-protos.h
Andrew Geissler84ad7c52020-06-27 00:00:16 -050036@@ -33,7 +33,7 @@ extern int microblaze_expand_shift (rtx *);
Brad Bishop26bdd442019-08-16 17:08:17 -040037 extern bool microblaze_expand_move (machine_mode, rtx *);
38 extern bool microblaze_expand_block_move (rtx, rtx, rtx, rtx);
39 extern void microblaze_expand_divide (rtx *);
40-extern void microblaze_expand_conditional_branch (machine_mode, rtx *);
41+extern void microblaze_expand_conditional_branch (enum machine_mode, rtx *);
42 extern void microblaze_expand_conditional_branch_reg (machine_mode, rtx *);
43 extern void microblaze_expand_conditional_branch_sf (rtx *);
44 extern int microblaze_can_use_return_insn (void);
45diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c b/gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050046index 4041a241391..ccc6a461cd9 100644
Brad Bishop26bdd442019-08-16 17:08:17 -040047--- a/gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c
48+++ b/gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c
49@@ -6,5 +6,5 @@ void float_func ()
50 {
51 /* { dg-final { scan-assembler "fcmp\.(le|gt)\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
52 if (f2 <= f3)
53- print ("le");
54+ f2 = f3;
55 }
56diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c b/gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050057index 3902b839db9..1dd5fe6c539 100644
Brad Bishop26bdd442019-08-16 17:08:17 -040058--- a/gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c
59+++ b/gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c
60@@ -6,5 +6,5 @@ void float_func ()
61 {
62 /* { dg-final { scan-assembler "fcmp\.(lt|ge)\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
63 if (f2 < f3)
64- print ("lt");
65+ f2 = f3;
66 }
67diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c b/gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050068index 8555974dda5..d6f80fb0ec3 100644
Brad Bishop26bdd442019-08-16 17:08:17 -040069--- a/gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c
70+++ b/gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c
71@@ -6,5 +6,5 @@ void float_func ()
72 {
73 /* { dg-final { scan-assembler "fcmp\.(eq|ne)\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
74 if (f2 == f3)
75- print ("eq");
76+ f1 = f2 + f3;
77 }
78diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c b/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050079index 79cc5f9dd8e..d1177249552 100644
Brad Bishop26bdd442019-08-16 17:08:17 -040080--- a/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
81+++ b/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
82@@ -5,5 +5,5 @@ void float_func(float f1, float f2, float f3)
83 /* { dg-final { scan-assembler "fcmp\.eq\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
84 /* { dg-final { scan-assembler "fcmp\.le\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
85 if(f1==f2 && f1<=f3)
86- print ("f1 eq f2 && f1 le f3");
87+ f2 = f3;
88 }
89diff --git a/gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c b/gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050090index ebfb170ecee..75822977ef8 100644
Brad Bishop26bdd442019-08-16 17:08:17 -040091--- a/gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c
92+++ b/gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c
93@@ -5,17 +5,17 @@ volatile float f1, f2, f3;
94 void float_func ()
95 {
96 /* { dg-final { scan-assembler-not "fcmp" } } */
97- if (f2 <= f3)
98- print ("le");
99+ if (f2 <= f3)
100+ f1 = f3;
101 else if (f2 == f3)
102- print ("eq");
103+ f1 = f3;
104 else if (f2 < f3)
105- print ("lt");
106+ f1 = f3;
107 else if (f2 > f3)
108- print ("gt");
109+ f1 = f3;
110 else if (f2 >= f3)
111- print ("ge");
112+ f1 = f3;
113 else if (f2 != f3)
114- print ("ne");
115+ f1 = f3;
116
117 }
118diff --git a/gcc/testsuite/gcc.target/microblaze/isa/vanilla.c b/gcc/testsuite/gcc.target/microblaze/isa/vanilla.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -0500119index 1d6ba807b12..532c035adfd 100644
Brad Bishop26bdd442019-08-16 17:08:17 -0400120--- a/gcc/testsuite/gcc.target/microblaze/isa/vanilla.c
121+++ b/gcc/testsuite/gcc.target/microblaze/isa/vanilla.c
122@@ -74,16 +74,16 @@ void float_cmp_func ()
123 {
124 /* { dg-final { scan-assembler-not "fcmp" } } */
125 if (f2 <= f3)
126- print ("le");
127+ f1 = f3;
128 else if (f2 == f3)
129- print ("eq");
130+ f1 = f3;
131 else if (f2 < f3)
132- print ("lt");
133+ f1 = f3;
134 else if (f2 > f3)
135- print ("gt");
136+ f1 = f3;
137 else if (f2 >= f3)
138- print ("ge");
139+ f1 = f3;
140 else if (f2 != f3)
141- print ("ne");
142+ f1 = f3;
143
144 }
Brad Bishop26bdd442019-08-16 17:08:17 -0400145--
Andrew Geisslera9ff2b32020-10-16 10:11:54 -05001462.17.1
Brad Bishop26bdd442019-08-16 17:08:17 -0400147