]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcc: xtensa: fix PR target/108876
authorMax Filippov <jcmvbkbc@gmail.com>
Tue, 21 Feb 2023 19:49:35 +0000 (11:49 -0800)
committerMax Filippov <jcmvbkbc@gmail.com>
Tue, 21 Feb 2023 21:53:01 +0000 (13:53 -0800)
gcc/
PR target/108876
* config/xtensa/xtensa.cc (xtensa_expand_epilogue): Drop emit_use
for A0_REG.
* config/xtensa/xtensa.md (sibcall, sibcall_internal)
(sibcall_value, sibcall_value_internal): Add 'use' expression
for A0_REG.

gcc/config/xtensa/xtensa.cc
gcc/config/xtensa/xtensa.md

index d0320efe21d488912a597ac728712b7b2693b9a6..5c1c713e122d9be81c211bc5740c832769760d0d 100644 (file)
@@ -3548,8 +3548,6 @@ xtensa_expand_epilogue (bool sibcall_p)
                              gen_frame_mem (SImode, x));
            }
        }
-      if (sibcall_p)
-       emit_use (gen_rtx_REG (SImode, A0_REG));
 
       if (cfun->machine->current_frame_size > 0)
        {
index d3996b26cb5c1d1e6b6bba8e3a24ab6b8bc3b246..b8a8aaf976404a6b637b8f8902b1d589711ea92b 100644 (file)
    (set_attr "length"  "3")])
 
 (define_expand "sibcall"
-  [(call (match_operand 0 "memory_operand" "")
-        (match_operand 1 "" ""))]
+  [(parallel [
+    (call (match_operand 0 "memory_operand" "")
+         (match_operand 1 "" ""))
+    (use (reg:SI A0_REG))])]
   "!TARGET_WINDOWED_ABI"
 {
   xtensa_prepare_expand_call (0, operands);
 
 (define_insn "sibcall_internal"
   [(call (mem:SI (match_operand:SI 0 "call_insn_operand" "nic"))
-        (match_operand 1 "" "i"))]
+        (match_operand 1 "" "i"))
+   (use (reg:SI A0_REG))]
   "!TARGET_WINDOWED_ABI && SIBLING_CALL_P (insn)"
 {
   return xtensa_emit_sibcall (0, operands);
    (set_attr "length"  "3")])
 
 (define_expand "sibcall_value"
-  [(set (match_operand 0 "register_operand" "")
-       (call (match_operand 1 "memory_operand" "")
-             (match_operand 2 "" "")))]
+  [(parallel [
+    (set (match_operand 0 "register_operand" "")
+        (call (match_operand 1 "memory_operand" "")
+              (match_operand 2 "" "")))
+    (use (reg:SI A0_REG))])]
   "!TARGET_WINDOWED_ABI"
 {
   xtensa_prepare_expand_call (1, operands);
 (define_insn "sibcall_value_internal"
   [(set (match_operand 0 "register_operand" "=a")
        (call (mem:SI (match_operand:SI 1 "call_insn_operand" "nic"))
-             (match_operand 2 "" "i")))]
+             (match_operand 2 "" "i")))
+   (use (reg:SI A0_REG))]
   "!TARGET_WINDOWED_ABI && SIBLING_CALL_P (insn)"
 {
   return xtensa_emit_sibcall (1, operands);