re PR middle-end/50609 (FAIL: gcc.c-torture/execute/pr23135.c compilation, -O2 ...
authorRichard Guenther <rguenther@suse.de>
Wed, 5 Oct 2011 09:31:40 +0000 (09:31 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 5 Oct 2011 09:31:40 +0000 (09:31 +0000)
2011-10-05  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/50609
* gimple-fold.c (fold_array_ctor_reference): Also handle
vector typed constructors.
(fold_ctor_reference): Dispatch to fold_array_ctor_reference
for vector typed constructors.

From-SVN: r179540

gcc/ChangeLog
gcc/gimple-fold.c

index 9147e87c1888ea592e41b009a2e604a5bd95a1fb..21910f23a675a02f80c8cc80db417687f9cd7f32 100644 (file)
@@ -1,3 +1,11 @@
+2011-10-05  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/50609
+       * gimple-fold.c (fold_array_ctor_reference): Also handle
+       vector typed constructors.
+       (fold_ctor_reference): Dispatch to fold_array_ctor_reference
+       for vector typed constructors.
+
 2011-10-05  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.c (ix86_emit_binop): New static function.
index f8e5035e29702fba3e858632a5da1efc1ec10aa0..179535ef56677711e2432e3fd2172cc78604ab36 100644 (file)
@@ -2747,10 +2747,12 @@ fold_array_ctor_reference (tree type, tree ctor,
   double_int low_bound, elt_size;
   double_int index, max_index;
   double_int access_index;
-  tree domain_type = TYPE_DOMAIN (TREE_TYPE (ctor));
+  tree domain_type = NULL_TREE;
   HOST_WIDE_INT inner_offset;
 
   /* Compute low bound and elt size.  */
+  if (TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE)
+    domain_type = TYPE_DOMAIN (TREE_TYPE (ctor));
   if (domain_type && TYPE_MIN_VALUE (domain_type))
     {
       /* Static constructors for variably sized objects makes no sense.  */
@@ -2917,7 +2919,8 @@ fold_ctor_reference (tree type, tree ctor, unsigned HOST_WIDE_INT offset,
   if (TREE_CODE (ctor) == CONSTRUCTOR)
     {
 
-      if (TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE)
+      if (TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE
+         || TREE_CODE (TREE_TYPE (ctor)) == VECTOR_TYPE)
        return fold_array_ctor_reference (type, ctor, offset, size);
       else
        return fold_nonarray_ctor_reference (type, ctor, offset, size);