On Tue, Apr 28, 2015 at 1:29 AM, Richard Biener <rguent...@suse.de> wrote: > > The following fixes a missed optimization in basic-block vectorization. > Currently we require the SLP chain to end up in a sequence of loads > we support. But of course we can in theory end the SLP chain at > any point and simply construct the vector operand of the uses by > pieces. This is what the patch does to handle the case where > "external" defs are not really external. As the patch is somewhat > more generic it also handles more cases and relies on the cost model > to reject the outright non-profitable ones (like the bb-slp-14.c > case which is run with -fno-vect-cost-model though). > > Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk. > > Richard. > > 2015-04-28 Richard Biener <rguent...@suse.de> > > PR tree-optimization/62283 > * tree-vect-slp.c (vect_build_slp_tree): When the SLP build > fails fatally and we are vectorizing a basic-block simply > cause the child to be constructed piecewise. > (vect_analyze_slp_cost_1): Adjust. > (vect_detect_hybrid_slp_stmts): Likewise. > (vect_bb_slp_scalar_cost): Likewise. > (vect_get_constant_vectors): For piecewise constructed > constants place them after the last def. > (vect_get_slp_defs): Adjust. > * tree-vect-stmts.c (vect_is_simple_use): Detect in-BB > externals for basic-block vectorization. >
This caused: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65935 -- H.J.