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

seurer at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |powerpc64*-linux-gnu
                 CC|                            |rsandifo at gcc dot gnu.org
               Host|                            |powerpc64*-linux-gnu
              Build|                            |powerpc64*-linux-gnu

--- Comment #1 from seurer at gcc dot gnu.org ---
Breaking revision info:

------------------------------------------------------------------------
r278411 | rsandifo | 2019-11-18 09:29:03 -0600 (Mon, 18 Nov 2019) | 42 lines

Two RTL CC tweaks for SVE pmore/plast conditions

SVE has two composite conditions:

  pmore == at least one bit set && last bit clear
  plast == no bits set || last bit set

So in general we generate them from:

  A: CC = test bits
  B: reg1 = first condition
  C: CC = test bits
  D: reg2 = second condition
  E: result = (reg1 op reg2)   where op is || or &&

To fold all this into a single test, we need to be able to remove
the redundant C (the cse.c patch) and then fold B, D and E down to
a single condition (the simplify-rtx.c patch).

The underlying conditions are unsigned, so the simplify-rtx.c part needs
to support both unsigned comparisons and AND.  However, to avoid opening
the can of worms that is ANDing FP comparisons for unordered inputs,
I've restricted the new AND handling to cases in which NaNs can be
ignored.  I think this is still a strict extension of what we have now,
it just doesn't go as far as it could.  Going further would need an
entirely different set of testcases so I think would make more sense
as separate work.

2019-11-18  Richard Sandiford  <richard.sandif...@arm.com>

gcc/
        * cse.c (cse_insn): Delete no-op register moves too.
        * simplify-rtx.c (comparison_to_mask): Handle unsigned comparisons.
        Take a second comparison to control the value for NE.
        (mask_to_comparison): Handle unsigned comparisons.
        (simplify_logical_relational_operation): Likewise.  Update call
        to comparison_to_mask.  Handle AND if !HONOR_NANs.
        (simplify_binary_operation_1): Call the above for AND too.

gcc/testsuite/
        * gcc.target/aarch64/sve/acle/asm/ptest_pmore.c: New test.

Reply via email to