https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93172
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- This isn't a regression, so I don't think we can handle it for GCC 10. Anyway, with the simpler ~k instead of _knot_mask16(k) we don't optimize that in combine either: (set (reg:V16SF 88) (vec_merge:V16SF (const_vector:V16SF [ (const_double:SF 0.0 [0x0.0p+0]) repeated x16 ]) (reg:V16SF 95) (not:HI (subreg:HI (reg:SI 96) 0)))) There is no way we'd subst all the thousands of patterns to also support not on the mask operand, but perhaps simplify-rtx.c could canonicalize VEC_MERGE ... with NOT on the last operand as one without the NOT and with swapped first and second operand, though maybe it should be limited to the case where the two operands are RTL objects and not something more complicated (it would be bad to pessimize all the instructions that perform arithmetics etc. in the first operand). For _knot_mask16 there is the additional complication that it uses UNSPEC_MASKOP, I'm afraid I'm out of ideas there, except perhaps targetm. specific simplifier or something similar.