On Tue, Feb 16, 2016 at 09:58:37AM +0100, Richard Biener wrote: > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > Hmm, most places calling type_conversion_p already check for the > pattern case and only accept a very specific or fail. > > Only widen_mul/sum don't do that. > > I believe type_conversion_p should simply look at the detected pattern, > thus > > Index: tree-vect-patterns.c > =================================================================== > --- tree-vect-patterns.c (revision 233418) > +++ tree-vect-patterns.c (working copy) > @@ -171,6 +171,13 @@ type_conversion_p (tree name, gimple *us > if (!*def_stmt) > return false; > > + if (dt == vect_internal_def) > + { > + stmt_vec_info def_vinfo = vinfo_for_stmt (*def_stmt); > + if (STMT_VINFO_IN_PATTERN_P (def_vinfo)) > + *def_stmt = STMT_VINFO_RELATED_STMT (def_vinfo); > + } > + > if (!is_gimple_assign (*def_stmt)) > return false; > > does that fix it?
This doesn't work. pr69820.c: In function ‘foo’: pr69820.c:6:1: internal compiler error: in vect_get_vec_def_for_operand, at tree-vect-stmts.c:1424 foo (void) ^~~ 0x106f8c6 vect_get_vec_def_for_operand(tree_node*, gimple*, tree_node*) ../../gcc/tree-vect-stmts.c:1424 0x1078daf vectorizable_conversion ../../gcc/tree-vect-stmts.c:4087 0x1085da5 vect_transform_stmt(gimple*, gimple_stmt_iterator*, bool*, _slp_tree*, _slp_instance*) ../../gcc/tree-vect-stmts.c:8191 ... I think the vectorizer is not prepared to see one pattern seq referencing SSA_NAME set by a different pattern seq. Jakub