aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2013-08-01 15:02:19 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2013-08-01 15:02:19 +0000
commitce852f9c3afff56097da5c352aba32e6191cdd3e (patch)
treebd69c6200fe4d7ee6636f784009cad9e74c0651e
parentc743b246435838c846861d22430fea543a4eed7d (diff)
downloadgcc-ce852f9c3afff56097da5c352aba32e6191cdd3e.zip
gcc-ce852f9c3afff56097da5c352aba32e6191cdd3e.tar.gz
gcc-ce852f9c3afff56097da5c352aba32e6191cdd3e.tar.bz2
arm.md (minmax_arithsi_non_canon): Emit canonical RTL form when subtracting a constant.
2013-08-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/arm/arm.md (minmax_arithsi_non_canon): Emit canonical RTL form when subtracting a constant. From-SVN: r201412
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/arm.md7
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5480545..d60161e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2013-08-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+ * config/arm/arm.md (minmax_arithsi_non_canon): Emit canonical RTL form
+ when subtracting a constant.
+
+2013-08-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
* config/arm/arm.md (peepholes for eq (reg1) (reg2/imm)):
Generate canonical plus rtx with negated immediate instead of minus
where appropriate.
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 322aa20..45e9ada 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -3717,8 +3717,7 @@
(match_dup 2))))
(cond_exec (match_op_dup 5 [(reg:CC CC_REGNUM) (const_int 0)])
(set (match_dup 0)
- (minus:SI (match_dup 1)
- (match_dup 3))))]
+ (match_dup 6)))]
{
enum machine_mode mode = SELECT_CC_MODE (GET_CODE (operands[1]),
operands[2], operands[3]);
@@ -3731,6 +3730,10 @@
else
rc = reverse_condition (rc);
operands[5] = gen_rtx_fmt_ee (rc, SImode, operands[2], operands[3]);
+ if (CONST_INT_P (operands[3]))
+ operands[6] = plus_constant (SImode, operands[1], -INTVAL (operands[3]));
+ else
+ operands[6] = gen_rtx_MINUS (SImode, operands[1], operands[3]);
}
[(set_attr "conds" "clob")
(set (attr "length")