diff options
author | Richard Earnshaw <rearnsha@arm.com> | 2005-10-06 12:43:17 +0000 |
---|---|---|
committer | Richard Earnshaw <rearnsha@gcc.gnu.org> | 2005-10-06 12:43:17 +0000 |
commit | c40cb38da99301e146582374b22c6caf49dc5314 (patch) | |
tree | f50a15d21faa6dfda2ba4518c4cf04734b475613 /gcc | |
parent | 5872662b0b0cc334e777f97950c422d906925abc (diff) | |
download | gcc-c40cb38da99301e146582374b22c6caf49dc5314.zip gcc-c40cb38da99301e146582374b22c6caf49dc5314.tar.gz gcc-c40cb38da99301e146582374b22c6caf49dc5314.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 12 |
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30d4aff..702ad28 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index b60ccb7..76eb12b 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); }" ) |