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.

Reply via email to