https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118150
Spencer Abson <sabson at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |sabson at gcc dot gnu.org
--- Comment #2 from Spencer Abson <sabson at gcc dot gnu.org> ---
Confirmed.
It looks like we also miss AND+PTEST because the existing combine matches the
(and (<logical> ((a) (b)) (c)) canonicalisation of predicated ior and xor,
where c is all-true.
AND can also use:
>;; Predicate AND. We can reuse one of the inputs as the GP.
>;; Doubling the second operand is the preferred implementation
>;; of the MOV alias, so we use that instead of %1/z, %1, %2.
(aarch64-sve.md)
Which is the form we end up with from ACLE code if it's predicate is all-true,
and from auto-vectorized code (though I will need to confirm the latter).