https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117192
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|tree-optimization |target --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So in .optimize we have: _24 = c.0_1 == 0; // 1 because c is 0 _27 = (unsigned int) _24; patt_36 = -_27; // -1 _68 = {patt_36, patt_36}; // {-1, -1} mask_patt_42.26_69 = _68 != { 0, 0 }; // {-1,-1} _22 = VIEW_CONVERT_EXPR<vector(2) int>(mask_patt_42.26_69); vect_patt_43.30_74 = .BIT_ANDN (vect__ifc__49.29_73, _22); // _79 = BIT_FIELD_REF <vect_patt_43.30_74, 32, 32>; // 0 cmpl $1, %eax pxor %xmm2, %xmm2 // 0 movl $6, b(%rip) sbbl %eax, %eax // 0 movd %eax, %xmm0 // 0 pshufd $0xe0, %xmm0, %xmm0 // {0,0} pcmpeqd %xmm2, %xmm0 // xmm0 = {-1,-1} pcmpeqd %xmm2, %xmm0 // xmm0 = {0,0} pandn %xmm0, %xmm1 // xmm1 = xmm0 & ~xmm1 -> 0 & ??? -> 0 pshufd $0xe5, %xmm1, %xmm3 //extract 0 movd %xmm3, %eax movd %xmm3, a(%rip) But we are getting -1 ...