https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96814
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- So before the revision we generated: _1 = { 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; _2 = VEC_COND_EXPR <_1, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }>; _3 = VIEW_CONVERT_EXPR<V>(_2); x = _3; but now we have: <bb 2> : _1 = { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; _24 = VIEW_CONVERT_EXPR<unsigned short>(_1); _25 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; _26 = BIT_FIELD_REF <_25, 1, 0>; _27 = _26; _28 = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; _29 = BIT_FIELD_REF <_28, 1, 0>; _30 = _29; _31 = _24 & 1; _32 = _31 != 0 ? _27 : _30; ... _151 = _24 & 32768; _152 = _151 != 0 ? _147 : _150; _2 = {_32, _40, _48, _56, _64, _72, _80, _88, _96, _104, _112, _120, _128, _136, _144, _152}; _3 = .VCOND_MASK (_2, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); _4 = VIEW_CONVERT_EXPR<V>(_3); x = _4; i_15 = 0; goto <bb 4>; [INV] It's because veclower sees: _1 = { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; _2 = VEC_COND_EXPR <_1, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }>; _3 = VEC_COND_EXPR <_2, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }>; _4 = VIEW_CONVERT_EXPR<V>(_3); and if I see correctly the creation of the mask _2 is broken in RTL (probably one can't build one from a vector costructor)? Anyway SSA_NAMEs like _128 don't have any use. @Richi: Can you please help me with that? I'm looking into it for quite some time :/