@@ -3548,6 +3548,8 @@ 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)
{
@@ -2369,10 +2369,8 @@
(set_attr "length" "3")])
(define_expand "sibcall"
- [(parallel [
- (call (match_operand 0 "memory_operand" "")
- (match_operand 1 "" ""))
- (use (reg:SI A0_REG))])]
+ [(call (match_operand 0 "memory_operand" "")
+ (match_operand 1 "" ""))]
"!TARGET_WINDOWED_ABI"
{
xtensa_prepare_expand_call (0, operands);
@@ -2380,8 +2378,7 @@
(define_insn "sibcall_internal"
[(call (mem:SI (match_operand:SI 0 "call_insn_operand" "nic"))
- (match_operand 1 "" "i"))
- (use (reg:SI A0_REG))]
+ (match_operand 1 "" "i"))]
"!TARGET_WINDOWED_ABI && SIBLING_CALL_P (insn)"
{
return xtensa_emit_sibcall (0, operands);
@@ -2391,11 +2388,9 @@
(set_attr "length" "3")])
(define_expand "sibcall_value"
- [(parallel [
- (set (match_operand 0 "register_operand" "")
- (call (match_operand 1 "memory_operand" "")
- (match_operand 2 "" "")))
- (use (reg:SI A0_REG))])]
+ [(set (match_operand 0 "register_operand" "")
+ (call (match_operand 1 "memory_operand" "")
+ (match_operand 2 "" "")))]
"!TARGET_WINDOWED_ABI"
{
xtensa_prepare_expand_call (1, operands);
@@ -2404,8 +2399,7 @@
(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")))
- (use (reg:SI A0_REG))]
+ (match_operand 2 "" "i")))]
"!TARGET_WINDOWED_ABI && SIBLING_CALL_P (insn)"
{
return xtensa_emit_sibcall (1, operands);