https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118151

Spencer Abson <Spencer.Abson at arm dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |Spencer.Abson at arm dot com

--- Comment #3 from Spencer Abson <Spencer.Abson at arm dot com> ---
Looks like we'd need patterns for any/none that allow the mode of the predicate
produced by the flag-setting operation to differ from that which governs the
PTEST.

For example, our existing combiner patterns will also not match:

#include <arm_sve.h>

int
foo (svbool_t pg, svint32_t x, svint32_t y)
{
  return svptest_any(pg, svcmpeq(pg, x, y));
}

which currently generates:

        cmpeq   p3.s, p0/z, z0.s, z1.s
        ptest   p0, p3.b
        cset    w0, any
        ret

where a test on a VNx4BI is governed by a VNx16BI.  It would be incorrect to
fold here for first/not-first/last/not-last but, as above, would be fine for
any/none given that CMPEQ will zero any bits that VNx4BI disregards.

I can investigate more later on, open to more discussion here too.

Reply via email to