From: Kyrylo Tkachov <[email protected]>

These tests exist to check that the compare and the csel stay adjacent so
that the Neoverse V2 CMP+CSEL fusion can fire.  The condition code itself
is incidental: for a > b ? d : e either polarity is correct, costs the
same three instructions, and keeps the pair adjacent, and
aarch_macro_fusion_pair_p does not look at the condition.

fuse_cmp_csel-1.c was added by r17-1507-gc43fed44d9ac ("phiopt: Allow
factoring out of more than just single operand operations") with a gt
expectation, and the same commit switched the existing fuse_cmp_csel.c
directives from le to gt.  Eight days later r17-1571-ga05a055bb2fb
("phiopt: reorganize factoring/cselim-limited for phiopt") made
pass_phiopt return TODO_cleanup_cfg when it factors, since factoring does
leave empty blocks behind.  The diamond is now cleaned up one pass
earlier, crited1 re-splits the newly critical edge and the following
cleanup_cfg removes the other forwarder, leaving the mirror image of the
old CFG.  Expand emits the inverted conditional jump and if-conversion
produces

  cmp  w0, w1
  csel w3, w4, w3, le

so the gt expectation was stale almost as soon as it landed.

Rather than swap one hard-coded condition for another, accept both.  That
keeps the tests pinned to what they are actually testing and stops them
breaking again the next time a middle-end change flips the CFG shape.

gcc/testsuite/ChangeLog:

        * gcc.target/aarch64/fuse_cmp_csel-1.c: Accept csel with either
        le or gt.
        * gcc.target/aarch64/fuse_cmp_csel.c: Likewise.

Signed-off-by: Kyrylo Tkachov <[email protected]>
---
 gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel-1.c | 4 ++--
 gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel.c   | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel-1.c 
b/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel-1.c
index 9fcca5043ec..5735fb6a1e9 100644
--- a/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel-1.c
+++ b/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel-1.c
@@ -6,7 +6,7 @@
 ** f1:
 **     ...
 **     cmp     w[0-9]+, w[0-9]+
-**     csel    w[0-9]+, w[0-9]+, w[0-9]+, gt
+**     csel    w[0-9]+, w[0-9]+, w[0-9]+, (le|gt)
 **     add     w[0-9]+, w[0-9]+, w[0-9]+
 **     ret
 */
@@ -22,7 +22,7 @@ int f1 (int a, int b, int c, int d, int e)
 ** f2:
 **     ...
 **     cmp     x[0-9]+, x[0-9]+
-**     csel    x[0-9]+, x[0-9]+, x[0-9]+, gt
+**     csel    x[0-9]+, x[0-9]+, x[0-9]+, (le|gt)
 **     add     x[0-9]+, x[0-9]+, x[0-9]+
 **     ret
 */
diff --git a/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel.c 
b/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel.c
index be0fb8f935d..f6b36932a77 100644
--- a/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel.c
+++ b/gcc/testsuite/gcc.target/aarch64/fuse_cmp_csel.c
@@ -10,7 +10,7 @@
 ** f1: { xfail *-*-* }
 **     ...
 **     cmp     w[0-9]+, w[0-9]+
-**     csel    w[0-9]+, w[0-9]+, w[0-9]+, gt
+**     csel    w[0-9]+, w[0-9]+, w[0-9]+, (le|gt)
 **     add     w[0-9]+, w[0-9]+, w[0-9]+
 **     ret
 */
@@ -26,7 +26,7 @@ int f1 (int a, int b, int c)
 ** f2: { xfail *-*-* }
 **     ...
 **     cmp     x[0-9]+, x[0-9]+
-**     csel    x[0-9]+, x[0-9]+, x[0-9]+, gt
+**     csel    x[0-9]+, x[0-9]+, x[0-9]+, (le|gt)
 **     add     x[0-9]+, x[0-9]+, x[0-9]+
 **     ret
 */
-- 
2.50.1 (Apple Git-155)

Reply via email to