https://gcc.gnu.org/g:31216a506dc6563dffc0c964800bf68c98ce38c1

commit r17-2726-g31216a506dc6563dffc0c964800bf68c98ce38c1
Author: Kyrylo Tkachov <[email protected]>
Date:   Sun Jul 26 05:39:37 2026 -0700

    testsuite/aarch64: accept either csel polarity in fuse_cmp_csel tests
    
    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]>

Diff:
---
 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 9fcca5043ece..5735fb6a1e95 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 be0fb8f935de..f6b36932a77f 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
 */

Reply via email to