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 <seg...@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