This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] rs6000: Clean up the cmp* insns


No change in behaviour; bootstrapped and tested as usual.  Is this okay
for trunk?

Now the output modifier "%b" is unused; what do we do with that?
Leave it in place in case anything uses it in inline asm?  It never
was documented.  We could use some freed modifiers, almost everything
is used now (there are only 52 possible ones).


Segher


2015-06-16  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/rs6000.md (*cmp<mode>_internal1): Rename to...
	(*cmp<mode>_signed): ... this.
	(*cmpsi_internal2, *cmpdi_internal2): Merge, rename to...
	(*cmp<mode>_unsigned): ... this.  Remove %b.

---
 gcc/config/rs6000/rs6000.md | 26 +++++++++-----------------
 1 file changed, 9 insertions(+), 17 deletions(-)

diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 5d3e04b..6a14ee8 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -10714,7 +10714,7 @@ (define_insn "stack_protect_testdi"
 
 
 ;; Here are the actual compare insns.
-(define_insn "*cmp<mode>_internal1"
+(define_insn "*cmp<mode>_signed"
   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
 	(compare:CC (match_operand:GPR 1 "gpc_reg_operand" "r")
 		    (match_operand:GPR 2 "reg_or_short_operand" "rI")))]
@@ -10722,6 +10722,14 @@ (define_insn "*cmp<mode>_internal1"
   "cmp<wd>%I2 %0,%1,%2"
   [(set_attr "type" "cmp")])
 
+(define_insn "*cmp<mode>_unsigned"
+  [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
+	(compare:CCUNS (match_operand:GPR 1 "gpc_reg_operand" "r")
+		       (match_operand:GPR 2 "reg_or_u_short_operand" "rK")))]
+  ""
+  "cmpl<wd>%I2 %0,%1,%2"
+  [(set_attr "type" "cmp")])
+
 ;; If we are comparing a register for equality with a large constant,
 ;; we can do this with an XOR followed by a compare.  But this is profitable
 ;; only if the large constant is only used for the comparison (and in this
@@ -10766,22 +10774,6 @@ (define_peephole2
   operands[10] = GEN_INT (sextc);
 })
 
-(define_insn "*cmpsi_internal2"
-  [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
-	(compare:CCUNS (match_operand:SI 1 "gpc_reg_operand" "r")
-		       (match_operand:SI 2 "reg_or_u_short_operand" "rK")))]
-  ""
-  "cmplw%I2 %0,%1,%b2"
-  [(set_attr "type" "cmp")])
-
-(define_insn "*cmpdi_internal2"
-  [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
-	(compare:CCUNS (match_operand:DI 1 "gpc_reg_operand" "r")
-		       (match_operand:DI 2 "reg_or_u_short_operand" "rK")))]
-  ""
-  "cmpld%I2 %0,%1,%b2"
-  [(set_attr "type" "cmp")])
-
 ;; The following two insns don't exist as single insns, but if we provide
 ;; them, we can swap an add and compare, which will enable us to overlap more
 ;; of the required delay between a compare and branch.  We generate code for
-- 
1.8.1.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]