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. --- gcc/config/arm/arm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 9754a761faf..fbe154a9873 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -893,7 +893,7 @@ (define_insn "*addsi3_carryin_alt2_<optab>" [(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