aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-12-23 20:00:51 -0800
committerRichard Henderson <rth@gcc.gnu.org>2001-12-23 20:00:51 -0800
commit99407cf2f159e6b4a86135b0cb48e76a9cfaee05 (patch)
tree5cf83b6a99fa1dd1a67e4f678cb00231510430c5
parent8aad1777878d187d2b1607efc8f96139f9a4613c (diff)
downloadgcc-99407cf2f159e6b4a86135b0cb48e76a9cfaee05.zip
gcc-99407cf2f159e6b4a86135b0cb48e76a9cfaee05.tar.gz
gcc-99407cf2f159e6b4a86135b0cb48e76a9cfaee05.tar.bz2
* config/alpha/alpha.c (call_operand) [OSF]: Disallow virtual regs.
From-SVN: r48297
-rw-r--r--gcc/ChangeLog2
-rw-r--r--gcc/config/alpha/alpha.c7
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8ea8d35..9082c2b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,7 @@
2001-12-23 Richard Henderson <rth@redhat.com>
+ * config/alpha/alpha.c (call_operand) [OSF]: Disallow virtual regs.
+
* config/alpha/alpha.md (UNSPEC_SIBCALL): New.
(sibcall, sibcall_value, sibcall_osf_1_er, sibcall_osf_1): Use it.
(sibcall_value_osf_1_er, sibcall_value_osf_1): Likewise.
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index ce5b58e..a88f977 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1008,7 +1008,12 @@ call_operand (op, mode)
if (GET_CODE (op) == REG)
{
if (TARGET_ABI_OSF)
- return (REGNO (op) == 27 || REGNO (op) >= FIRST_PSEUDO_REGISTER);
+ {
+ /* Disallow virtual registers to cope with pathalogical test cases
+ such as compile/930117-1.c in which the virtual reg decomposes
+ to the frame pointer. Which is a hard reg that is not $27. */
+ return (REGNO (op) == 27 || REGNO (op) > LAST_VIRTUAL_REGISTER);
+ }
else
return 1;
}