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 ...