]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Revert "aarch64: Fuse CMP+CSEL and CMP+CSET for -mcpu=neoverse-v2"
authorKyrylo Tkachov <ktkachov@nvidia.com>
Wed, 24 Jul 2024 11:55:43 +0000 (17:25 +0530)
committerKyrylo Tkachov <ktkachov@nvidia.com>
Wed, 24 Jul 2024 11:55:43 +0000 (17:25 +0530)
This reverts commit 4c5eb66e701bc9f3bf1298269f52559b10d63a09.

gcc/config/aarch64/aarch64-fusion-pairs.def
gcc/config/aarch64/aarch64.cc
gcc/config/aarch64/tuning_models/neoversev2.h
gcc/testsuite/gcc.target/aarch64/cmp_csel_fuse.c [deleted file]
gcc/testsuite/gcc.target/aarch64/cmp_cset_fuse.c [deleted file]

index bf5e85ba8fe128721521505bd6b73b38c25d9f65..9a43b0c806573c47b28bd0c625f87deca7d4b5c9 100644 (file)
@@ -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
index db598ebf2c7971d75423374e041ba573c751be40..9e51236ce9fa059ccc6e4fe24335b5fb36692ef8 100644 (file)
@@ -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))
index ae99fab22d8077b05e82b42efab22a8ac9d68ed1..f76e4ef358f7dfb9c7d7b470ea7240eaa2120f8e 100644 (file)
@@ -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 (file)
index f5e511e..0000000
+++ /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 (file)
index 04f1ce2..0000000
+++ /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;
-}