This makes us lookup previous intermediate vector results when
decomposing a operation.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2011-10-06  Richard Guenther  <rguent...@suse.de>

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

Index: gcc/tree-vect-generic.c
===================================================================
*** gcc/tree-vect-generic.c     (revision 179598)
--- gcc/tree-vect-generic.c     (working copy)
*************** vector_element (gimple_stmt_iterator *gs
*** 536,541 ****
--- 536,552 ----
          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;

Reply via email to