OSDN Git Service

Prevent aborts taking a vector mode subreg of a constant integer
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Apr 2002 11:29:19 +0000 (11:29 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Apr 2002 11:29:19 +0000 (11:29 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52467 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c

index 9d19693..799f4c8 100644 (file)
@@ -4,6 +4,10 @@
        (handle_vector_size_attribute): Use it to avoid generating a
        new type node each time we are called.
 
+       * combine.c (subst): Avoid trying to make a vector mode subreg of
+       an integer constant.
+       (gen_lowpart_for_combine): Likewise.
+                       
 2002-04-18  Roger Sayle  <roger@eyesopen.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index e051c61..67f6290 100644 (file)
@@ -3538,6 +3538,9 @@ subst (x, from, to, in_dest, unique_copy)
 
              if (GET_CODE (new) == CONST_INT && GET_CODE (x) == SUBREG)
                {
+                 if (VECTOR_MODE_P (GET_MODE (x)))
+                   return gen_rtx_CLOBBER (VOIDmode, const0_rtx);
+
                  x = simplify_subreg (GET_MODE (x), new,
                                       GET_MODE (SUBREG_REG (x)),
                                       SUBREG_BYTE (x));
@@ -9800,6 +9803,12 @@ gen_lowpart_for_combine (mode, x)
            || GET_MODE_SIZE (GET_MODE (x)) == GET_MODE_SIZE (mode)))
     return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx);
 
+  /* simplify_gen_subreg does not know how to handle the case where we try
+     to convert an integer constant to a vector.
+     ??? We could try to teach it to generate CONST_VECTORs.  */
+  if (GET_MODE (x) == VOIDmode && VECTOR_MODE_P (mode))
+    return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx);
+
   /* X might be a paradoxical (subreg (mem)).  In that case, gen_lowpart
      won't know what to do.  So we will strip off the SUBREG here and
      process normally.  */