tree-vect-generic.c (vector_element): Look at previous generated results.
authorRichard Guenther <rguenther@suse.de>
Thu, 6 Oct 2011 14:28:47 +0000 (14:28 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 6 Oct 2011 14:28:47 +0000 (14:28 +0000)
2011-10-06  Richard Guenther  <rguenther@suse.de>

* tree-vect-generic.c (vector_element): Look at previous
generated results.

From-SVN: r179613

gcc/ChangeLog
gcc/tree-vect-generic.c

index 96fce899fd2098aedbd277bf92e085deda6506ef..74b1139225c6675119272e417fd30c5a79858f0c 100644 (file)
@@ -1,3 +1,8 @@
+2011-10-06  Richard Guenther  <rguenther@suse.de>
+
+       * tree-vect-generic.c (vector_element): Look at previous
+       generated results.
+
 2011-10-06  David Edelsohn  <dje.gcc@gmail.com>
 
        PR target/39950
index ef03b355f78288897473c2163914232805a31afa..8f9f2a836d830d2dbd5879f806e92e89a83d66f2 100644 (file)
@@ -536,6 +536,17 @@ vector_element (gimple_stmt_iterator *gsi, tree vect, tree idx, tree *ptmpvec)
          idx = build_int_cst (TREE_TYPE (idx), index);
        }
 
+      /* When lowering a vector statement sequence do some easy
+         simplification by looking through intermediate vector results.  */
+      if (TREE_CODE (vect) == SSA_NAME)
+       {
+         gimple def_stmt = SSA_NAME_DEF_STMT (vect);
+         if (is_gimple_assign (def_stmt)
+             && (gimple_assign_rhs_code (def_stmt) == VECTOR_CST
+                 || gimple_assign_rhs_code (def_stmt) == CONSTRUCTOR))
+           vect = gimple_assign_rhs1 (def_stmt);
+       }
+
       if (TREE_CODE (vect) == VECTOR_CST)
         {
          unsigned i;