From ce852f9c3afff56097da5c352aba32e6191cdd3e Mon Sep 17 00:00:00 2001 From: Kyrylo Tkachov Date: Thu, 1 Aug 2013 15:02:19 +0000 Subject: [PATCH] arm.md (minmax_arithsi_non_canon): Emit canonical RTL form when subtracting a constant. 2013-08-01 Kyrylo Tkachov * config/arm/arm.md (minmax_arithsi_non_canon): Emit canonical RTL form when subtracting a constant. From-SVN: r201412 --- gcc/ChangeLog | 5 +++++ gcc/config/arm/arm.md | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5480545f933..d60161e2f39 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-08-01 Kyrylo Tkachov + + * config/arm/arm.md (minmax_arithsi_non_canon): Emit canonical RTL form + when subtracting a constant. + 2013-08-01 Kyrylo Tkachov * config/arm/arm.md (peepholes for eq (reg1) (reg2/imm)): diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 322aa204054..45e9ada3d8e 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") -- 2.30.2