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).