https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90323
--- Comment #7 from Segher Boessenkool <segher at gcc dot gnu.org> --- From the combine dump of without_sel: Trying 8, 9 -> 10: 8: r127:V4SI=r124:V4SI^r131:V4SI REG_DEAD r131:V4SI 9: r122:V4SI=r127:V4SI&r130:V4SI REG_DEAD r130:V4SI REG_DEAD r127:V4SI 10: r128:V4SI=r124:V4SI^r122:V4SI REG_DEAD r124:V4SI REG_DEAD r122:V4SI Failed to match this instruction: (set (reg:V4SI 128 [ l ]) (xor:V4SI (and:V4SI (xor:V4SI (reg/v:V4SI 124 [ l ]) (reg:V4SI 131)) (reg:V4SI 130)) (reg/v:V4SI 124 [ l ]))) That's not canonical form on RTL, and it's not a useful form either.