aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Tkachov <ktkachov@nvidia.com>2024-07-24 17:25:43 +0530
committerKyrylo Tkachov <ktkachov@nvidia.com>2024-07-24 17:25:43 +0530
commit39562dd1e745c7aacc23b51b2849a7d346cbef14 (patch)
treefd37df6456ec2add72c52a8b08a5e0e417857eef
parent4c5eb66e701bc9f3bf1298269f52559b10d63a09 (diff)
downloadgcc-39562dd1e745c7aacc23b51b2849a7d346cbef14.zip
gcc-39562dd1e745c7aacc23b51b2849a7d346cbef14.tar.gz
gcc-39562dd1e745c7aacc23b51b2849a7d346cbef14.tar.bz2
Revert "aarch64: Fuse CMP+CSEL and CMP+CSET for -mcpu=neoverse-v2"
This reverts commit 4c5eb66e701bc9f3bf1298269f52559b10d63a09.
-rw-r--r--gcc/config/aarch64/aarch64-fusion-pairs.def2
-rw-r--r--gcc/config/aarch64/aarch64.cc19
-rw-r--r--gcc/config/aarch64/tuning_models/neoversev2.h5
-rw-r--r--gcc/testsuite/gcc.target/aarch64/cmp_csel_fuse.c34
-rw-r--r--gcc/testsuite/gcc.target/aarch64/cmp_cset_fuse.c31
5 files changed, 1 insertions, 90 deletions
diff --git a/gcc/config/aarch64/aarch64-fusion-pairs.def b/gcc/config/aarch64/aarch64-fusion-pairs.def
index bf5e85b..9a43b0c 100644
--- a/gcc/config/aarch64/aarch64-fusion-pairs.def
+++ b/gcc/config/aarch64/aarch64-fusion-pairs.def
@@ -37,7 +37,5 @@ AARCH64_FUSION_PAIR ("aes+aesmc", AES_AESMC)
AARCH64_FUSION_PAIR ("alu+branch", ALU_BRANCH)
AARCH64_FUSION_PAIR ("alu+cbz", ALU_CBZ)
AARCH64_FUSION_PAIR ("addsub_2reg_const1", ADDSUB_2REG_CONST1)
-AARCH64_FUSION_PAIR ("cmp+csel", CMP_CSEL)
-AARCH64_FUSION_PAIR ("cmp+cset", CMP_CSET)
#undef AARCH64_FUSION_PAIR
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index db598eb..9e51236 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -27348,25 +27348,6 @@ aarch_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr)
&& reg_referenced_p (SET_DEST (prev_set), PATTERN (curr)))
return true;
- /* FUSE CMP and CSEL. */
- if (aarch64_fusion_enabled_p (AARCH64_FUSE_CMP_CSEL)
- && prev_set && curr_set
- && GET_CODE (SET_SRC (prev_set)) == COMPARE
- && GET_CODE (SET_SRC (curr_set)) == IF_THEN_ELSE
- && REG_P (XEXP (SET_SRC (curr_set), 1))
- && REG_P (XEXP (SET_SRC (curr_set), 2))
- && reg_referenced_p (SET_DEST (prev_set), PATTERN (curr)))
- return true;
-
- /* Fuse CMP and CSET. */
- if (aarch64_fusion_enabled_p (AARCH64_FUSE_CMP_CSET)
- && prev_set && curr_set
- && GET_CODE (SET_SRC (prev_set)) == COMPARE
- && GET_RTX_CLASS (GET_CODE (SET_SRC (curr_set))) == RTX_COMPARE
- && REG_P (SET_DEST (curr_set))
- && reg_referenced_p (SET_DEST (prev_set), PATTERN (curr)))
- return true;
-
/* Fuse flag-setting ALU instructions and conditional branch. */
if (aarch64_fusion_enabled_p (AARCH64_FUSE_ALU_BRANCH)
&& any_condjump_p (curr))
diff --git a/gcc/config/aarch64/tuning_models/neoversev2.h b/gcc/config/aarch64/tuning_models/neoversev2.h
index ae99fab..f76e4ef 100644
--- a/gcc/config/aarch64/tuning_models/neoversev2.h
+++ b/gcc/config/aarch64/tuning_models/neoversev2.h
@@ -221,10 +221,7 @@ static const struct tune_params neoversev2_tunings =
2 /* store_pred. */
}, /* memmov_cost. */
5, /* issue_rate */
- (AARCH64_FUSE_AES_AESMC
- | AARCH64_FUSE_CMP_BRANCH
- | AARCH64_FUSE_CMP_CSEL
- | AARCH64_FUSE_CMP_CSET), /* fusible_ops */
+ (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_CMP_BRANCH), /* fusible_ops */
"32:16", /* function_align. */
"4", /* jump_align. */
"32:16", /* loop_align. */
diff --git a/gcc/testsuite/gcc.target/aarch64/cmp_csel_fuse.c b/gcc/testsuite/gcc.target/aarch64/cmp_csel_fuse.c
deleted file mode 100644
index f5e511e..0000000
--- a/gcc/testsuite/gcc.target/aarch64/cmp_csel_fuse.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O2 -mcpu=neoverse-v2" } */
-/* { dg-final { check-function-bodies "**" "" } } */
-
-/*
-** f1:
-** ...
-** cmp w[0-9]+, w[0-9]+
-** csel w[0-9]+, w[0-9]+, w[0-9]+, le
-** ret
-*/
-int f1 (int a, int b, int c)
-{
- int cmp = a > b;
- int add1 = c + 3;
- int add2 = c + 8;
- return cmp ? add1 : add2;
-}
-
-/*
-** f2:
-** ...
-** cmp x[0-9]+, x[0-9]+
-** csel x[0-9]+, x[0-9]+, x[0-9]+, le
-** ret
-*/
-long long f2 (long long a, long long b, long long c)
-{
- long long cmp = a > b;
- long long add1 = c + 3;
- long long add2 = c + 8;
- return cmp ? add1 : add2;
-}
-
diff --git a/gcc/testsuite/gcc.target/aarch64/cmp_cset_fuse.c b/gcc/testsuite/gcc.target/aarch64/cmp_cset_fuse.c
deleted file mode 100644
index 04f1ce2..0000000
--- a/gcc/testsuite/gcc.target/aarch64/cmp_cset_fuse.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O2 -mcpu=neoverse-v2" } */
-/* { dg-final { check-function-bodies "**" "" } } */
-
-/*
-** f1:
-** cmp w[0-9]+, w[0-9]+
-** cset w[0-9]+, gt
-** ...
-*/
-int g;
-int f1 (int a, int b)
-{
- int cmp = a > b;
- g = cmp + 1;
- return cmp;
-}
-
-/*
-** f2:
-** cmp x[0-9]+, x[0-9]+
-** cset x[0-9]+, gt
-** ...
-*/
-long long h;
-long long f2 (long long a, long long b)
-{
- long long cmp = a > b;
- h = cmp + 1;
- return cmp;
-}