* regmove.c (kill_value): Handle subregs.
authorJan Hubicka <jh@suse.cz>
Wed, 13 Feb 2002 22:44:12 +0000 (23:44 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 13 Feb 2002 22:44:12 +0000 (22:44 +0000)
From-SVN: r49748

gcc/ChangeLog
gcc/regrename.c

index 16340b695e05d4bd725b769bc04d42e786f3e64e..ce1b0ce6c23e153c7976e62d42dbcea575626208 100644 (file)
@@ -1,3 +1,7 @@
+Wed Feb 13 23:41:15 CET 2002  Jan Hubicka  <jh@suse.cz>
+
+       * regmove.c (kill_value): Handle subregs.
+
 Wed Feb 13 23:34:30 CET 2002  Jan Hubicka  <jh@suse.cz>
 
        * i386.md (mul patterns): Allow memory operand to be first;
index 135eaefd0e131110fd00a2199455fe115dfeec2e..3ae6f7f6b45e098737fa1362d5e4cdcec1a01f61 100644 (file)
@@ -1095,6 +1095,14 @@ kill_value (x, vd)
      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. */
+
+  if (GET_CODE (x) == SUBREG)
+    x = simplify_subreg (GET_MODE (x), SUBREG_REG (x),
+                        GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
   if (REG_P (x))
     {
       unsigned int regno = REGNO (x);