https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94871
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- v2di cmpneq_pd1(v2df a, v2df b) { return ((v2di)(a==b) ^ set1_epi8(0xFF)); } Produces the correct thing on gimple level: _5 = .VCOND (a_2(D), b_3(D), { 0, 0 }, { -1, -1 }, 113); But the RTL during combine (even with -ffast-math) produces: (set (reg:V2DI 82 [ <retval> ]) (not:V2DI (eq:V2DI (reg:V2DF 89) (reg:V2DF 90))))