From: Richard Earnshaw Date: Thu, 6 Oct 2005 12:43:17 +0000 (+0000) Subject: re PR target/23783 (gcc.c-torture/compile/calls.c triggers an ICE) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c40cb38da99301e146582374b22c6caf49dc5314;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30d4affd013..702ad28f7b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-10-06 Richard Earnshaw + + 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 PR 24049 diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index b60ccb75d8f..76eb12b5fad 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -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); }" )