OSDN Git Service

* regrename.c (kill_value): Handle subreg's that won't simplify.
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Jan 2005 21:56:01 +0000 (21:56 +0000)
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Jan 2005 21:56:01 +0000 (21:56 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93200 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/regrename.c

index d57a3b0..1ce0395 100644 (file)
@@ -1,3 +1,7 @@
+2005-01-11  Aldy Hernandez  <aldyh@redhat.com>
+
+       * regrename.c (kill_value): Handle subreg's that won't simplify.
+
 2005-01-11  Richard Henderson  <rth@redhat.com>
 
        PR target/13366
index 35f17a4..4b3860c 100644 (file)
@@ -1104,14 +1104,15 @@ kill_value_regno (unsigned int regno, unsigned int nregs,
 static void
 kill_value (rtx x, struct value_data *vd)
 {
-  /* SUBREGS are supposed to have been eliminated by now.  But some
-     ports, e.g. i386 sse, use them to smuggle vector type information
-     through to instruction selection.  Each such SUBREG should simplify,
-     so if we get a NULL  we've done something wrong elsewhere.  */
+  rtx orig_rtx = x;
 
   if (GET_CODE (x) == SUBREG)
-    x = simplify_subreg (GET_MODE (x), SUBREG_REG (x),
-                        GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
+    {
+      x = simplify_subreg (GET_MODE (x), SUBREG_REG (x),
+                          GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
+      if (x == NULL_RTX)
+       x = SUBREG_REG (orig_rtx);
+    }
   if (REG_P (x))
     {
       unsigned int regno = REGNO (x);