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;