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
  • [Bug target/96892] [ARM]Wron... dongjianqiang2 at huawei dot com via Gcc-bugs

Reply via email to