aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2005-10-06 12:43:17 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2005-10-06 12:43:17 +0000
commitc40cb38da99301e146582374b22c6caf49dc5314 (patch)
treef50a15d21faa6dfda2ba4518c4cf04734b475613 /gcc
parent5872662b0b0cc334e777f97950c422d906925abc (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/arm/arm.md12
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);
}"
)