https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95356
--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> --- OK, so vectorizable_shift doing else if (dt[1] == vect_constant_def) { /* Convert the scalar constant shift amounts in-place. */ slp_tree shift = SLP_TREE_CHILDREN (slp_node)[1]; gcc_assert (SLP_TREE_DEF_TYPE (shift) == vect_constant_def); for (unsigned i = 0; i < SLP_TREE_SCALAR_OPS (shift).length (); ++i) { SLP_TREE_SCALAR_OPS (shift)[i] = fold_convert (TREE_TYPE (vectype), SLP_TREE_SCALAR_OPS (shift)[i]); gcc_assert ((TREE_CODE (SLP_TREE_SCALAR_OPS (shift)[i]) == INTEGER_CST)); } no longer works because we already tried code-generating it. The above would need to happen at analysis time (ensuring the node is not shared - which would be a problem for the above code as well).