re PR target/23783 (gcc.c-torture/compile/calls.c triggers an ICE)

PR target/23783
	* arm.md (call): If the address isn't a SYMBOL_REF or a register,
	then force it into a register.
	(call_value): Likewise.

From-SVN: r105032
This commit is contained in:
Richard Earnshaw 2005-10-06 12:43:17 +00:00 committed by Richard Earnshaw
parent 5872662b0b
commit c40cb38da9
2 changed files with 15 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2005-10-06 Richard Earnshaw <richard.earnshaw@arm.com>
PR target/23783
* arm.md (call): If the address isn't a SYMBOL_REF or a register,
then force it into a register.
(call_value): Likewise.
2005-10-06 Richard Henderson <rth@redhat.com>
PR 24049

View File

@ -7455,8 +7455,10 @@
invoked it. */
callee = XEXP (operands[0], 0);
if (GET_CODE (callee) != REG
&& arm_is_longcall_p (operands[0], INTVAL (operands[2]), 0))
if ((GET_CODE (callee) == SYMBOL_REF
&& arm_is_longcall_p (operands[0], INTVAL (operands[2]), 0))
|| (GET_CODE (callee) != SYMBOL_REF
&& GET_CODE (callee) != REG))
XEXP (operands[0], 0) = force_reg (Pmode, callee);
}"
)
@ -7545,8 +7547,10 @@
operands[3] = const0_rtx;
/* See the comment in define_expand \"call\". */
if (GET_CODE (callee) != REG
&& arm_is_longcall_p (operands[1], INTVAL (operands[3]), 0))
if ((GET_CODE (callee) == SYMBOL_REF
&& arm_is_longcall_p (operands[1], INTVAL (operands[3]), 0))
|| (GET_CODE (callee) != SYMBOL_REF
&& GET_CODE (callee) != REG))
XEXP (operands[1], 0) = force_reg (Pmode, callee);
}"
)