https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96892
--- Comment #4 from John Dong <dongjianqiang2 at huawei dot com> --- diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 1a8e498ba4c..97c2f6a1174 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -9301,6 +9301,7 @@ (define_insn_and_split "*stack_protect_combined_test_insn" emit_move_insn (operands[3], mem); } } + emit_move_insn (operands[3], gen_rtx_MEM(SImode, operands[3])); if (TARGET_32BIT) { emit_insn (gen_arm_stack_protect_test_insn (operands[4], operands[0], @@ -9333,8 +9334,8 @@ (define_insn "arm_stack_protect_test_insn" (clobber (match_operand:SI 0 "register_operand" "=&l,&r")) (clobber (match_dup 2))] "TARGET_32BIT" - "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0\;mov\t%2, #0" - [(set_attr "length" "12,16") + "ldr\t%0, [%2]\;ldr\t%2, %1\;ldr\t%2, [%2]\;eors\t%0, %2, %0\;mov\t%2, #0" + [(set_attr "length" "16,20") (set_attr "conds" "set") (set_attr "type" "multiple") (set_attr "arch" "t,32")] diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md index 56705c9f1eb..31466405fae 100644 --- a/gcc/config/arm/thumb1.md +++ b/gcc/config/arm/thumb1.md @@ -2035,8 +2035,8 @@ (define_insn "thumb1_stack_protect_test_insn" UNSPEC_SP_TEST)) (clobber (match_dup 2))] "TARGET_THUMB1" - "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0\;movs\t%2, #0" - [(set_attr "length" "10") + "ldr\t%0, [%2]\;ldr\t%2, %1\;ldr\t%2, [%2]\;eors\t%0, %2, %0\;movs\t%2, #0" + [(set_attr "length" "12") (set_attr "conds" "clob") (set_attr "type" "multiple")] ) a simple patch as suggested by Thomas