* config/alpha/alpha.c (call_operand) [OSF]: Disallow virtual regs.
authorRichard Henderson <rth@redhat.com>
Mon, 24 Dec 2001 04:00:51 +0000 (20:00 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 24 Dec 2001 04:00:51 +0000 (20:00 -0800)
From-SVN: r48297

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 8ea8d35738edf2719cc0a57b087fe7243802666d..9082c2bac62ac0b3f4739fe27bba809dff68f329 100644 (file)
@@ -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.
index ce5b58e72f5755d4793514205e21424459f4f81f..a88f97772a328468e3b126a27545306e7efb76cf 100644 (file)
@@ -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;
     }