https://gcc.gnu.org/g:39562dd1e745c7aacc23b51b2849a7d346cbef14
commit r15-2254-g39562dd1e745c7aacc23b51b2849a7d346cbef14 Author: Kyrylo Tkachov <ktkac...@nvidia.com> Date: Wed Jul 24 17:25:43 2024 +0530 Revert "aarch64: Fuse CMP+CSEL and CMP+CSET for -mcpu=neoverse-v2" This reverts commit 4c5eb66e701bc9f3bf1298269f52559b10d63a09. Diff: --- gcc/config/aarch64/aarch64-fusion-pairs.def | 2 -- gcc/config/aarch64/aarch64.cc | 19 ------------- gcc/config/aarch64/tuning_models/neoversev2.h | 5 +--- gcc/testsuite/gcc.target/aarch64/cmp_csel_fuse.c | 34 ------------------------ gcc/testsuite/gcc.target/aarch64/cmp_cset_fuse.c | 31 --------------------- 5 files changed, 1 insertion(+), 90 deletions(-) diff --git a/gcc/config/aarch64/aarch64-fusion-pairs.def b/gcc/config/aarch64/aarch64-fusion-pairs.def index bf5e85ba8fe1..9a43b0c80657 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 db598ebf2c79..9e51236ce9fa 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 ae99fab22d80..f76e4ef358f7 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 f5e511e46737..000000000000 --- 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 04f1ce2773ba..000000000000 --- 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; -}