aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2019-10-18 19:02:12 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2019-10-18 19:02:12 +0000
commit494c4921c7c7970562ab3ee3838809e8e7f0623a (patch)
treeaf3dd36ee4b7c0d91e7b8cf7f0d499b29954255e
parent717e1281604655ef608931fff028f02d462e78b6 (diff)
downloadgcc-494c4921c7c7970562ab3ee3838809e8e7f0623a.zip
gcc-494c4921c7c7970562ab3ee3838809e8e7f0623a.tar.gz
gcc-494c4921c7c7970562ab3ee3838809e8e7f0623a.tar.bz2
[arm] fix constraints on addsi3_carryin_alt2
addsi3_carryin_alt2 has a more strict constraint than the predicate when adding a constant. This leads to sub-optimal code in some circumstances. * config/arm/arm.md (addsi3_carryin_alt2): Use arm_not_operand for operand 2. From-SVN: r277168
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/arm.md2
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cb2abfe..1c96b17 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2019-10-18 Richard Earnshaw <rearnsha@arm.com>
+ * config/arm/arm.md (addsi3_carryin_alt2): Use arm_not_operand for
+ operand 2.
+
+2019-10-18 Richard Earnshaw <rearnsha@arm.com>
+
* config/arm/arm.md (addsi3_carryin_shift_<optab>): Reorder operands
to match canonical form.
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 9754a76..fbe154a 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -893,7 +893,7 @@
[(set (match_operand:SI 0 "s_register_operand" "=l,r,r")
(plus:SI (plus:SI (LTUGEU:SI (reg:<cnb> CC_REGNUM) (const_int 0))
(match_operand:SI 1 "s_register_operand" "%l,r,r"))
- (match_operand:SI 2 "arm_rhs_operand" "l,rI,K")))]
+ (match_operand:SI 2 "arm_not_operand" "l,rI,K")))]
"TARGET_32BIT"
"@
adc%?\\t%0, %1, %2