diff options
author | Tamar Christina <tamar.christina@arm.com> | 2024-12-13 11:17:55 +0000 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2024-12-13 11:17:55 +0000 |
commit | 4a9427f75b9f5dfbd9edd0ec8e0a07f868754b65 (patch) | |
tree | cc5969dff02f9a2aaaa28e8b9f093c5ed96d3211 /gcc | |
parent | 99b9dfaff66ca6edd534bcf0e7b943a6f816c9bf (diff) | |
download | gcc-4a9427f75b9f5dfbd9edd0ec8e0a07f868754b65.zip gcc-4a9427f75b9f5dfbd9edd0ec8e0a07f868754b65.tar.gz gcc-4a9427f75b9f5dfbd9edd0ec8e0a07f868754b65.tar.bz2 |
AArch64: Add CMP+CSEL and CMP+CSET for cores that support it
GCC 15 added two new fusions CMP+CSEL and CMP+CSET.
This patch enables them for cores that support based on their Software
Optimization Guides and generically on Armv9-A. Even if a core does not
support it there's no negative performance impact.
gcc/ChangeLog:
* config/aarch64/aarch64-fusion-pairs.def (AARCH64_FUSE_NEOVERSE_BASE):
New.
* config/aarch64/tuning_models/neoverse512tvb.h: Use it.
* config/aarch64/tuning_models/neoversen2.h: Use it.
* config/aarch64/tuning_models/neoversen3.h: Use it.
* config/aarch64/tuning_models/neoversev1.h: Use it.
* config/aarch64/tuning_models/neoversev2.h: Use it.
* config/aarch64/tuning_models/neoversev3.h: Use it.
* config/aarch64/tuning_models/neoversev3ae.h: Use it.
* config/aarch64/tuning_models/cortexx925.h: Add fusions.
* config/aarch64/tuning_models/generic_armv9_a.h: Add fusions.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/aarch64/aarch64-fusion-pairs.def | 4 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/cortexx925.h | 4 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/generic_armv9_a.h | 4 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/neoverse512tvb.h | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/neoversen2.h | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/neoversen3.h | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/neoversev1.h | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/neoversev2.h | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/neoversev3.h | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/tuning_models/neoversev3ae.h | 2 |
10 files changed, 17 insertions, 9 deletions
diff --git a/gcc/config/aarch64/aarch64-fusion-pairs.def b/gcc/config/aarch64/aarch64-fusion-pairs.def index f8413ab..0123430 100644 --- a/gcc/config/aarch64/aarch64-fusion-pairs.def +++ b/gcc/config/aarch64/aarch64-fusion-pairs.def @@ -45,4 +45,8 @@ AARCH64_FUSION_PAIR ("cmp+cset", CMP_CSET) /* Baseline fusion settings suitable for all cores. */ #define AARCH64_FUSE_BASE (AARCH64_FUSE_CMP_BRANCH | AARCH64_FUSE_AES_AESMC) +/* Baseline fusion settings suitable for all Neoverse cores. */ +#define AARCH64_FUSE_NEOVERSE_BASE (AARCH64_FUSE_BASE | AARCH64_FUSE_CMP_CSEL \ + | AARCH64_FUSE_CMP_CSET) + #define AARCH64_FUSE_MOVK (AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_MOVK_MOVK) diff --git a/gcc/config/aarch64/tuning_models/cortexx925.h b/gcc/config/aarch64/tuning_models/cortexx925.h index b2ff716..ef4c7d1 100644 --- a/gcc/config/aarch64/tuning_models/cortexx925.h +++ b/gcc/config/aarch64/tuning_models/cortexx925.h @@ -205,7 +205,9 @@ static const struct tune_params cortexx925_tunings = 2 /* store_pred. */ }, /* memmov_cost. */ 10, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + (AARCH64_FUSE_BASE + | AARCH64_FUSE_CMP_CSEL + | AARCH64_FUSE_CMP_CSET), /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/generic_armv9_a.h b/gcc/config/aarch64/tuning_models/generic_armv9_a.h index a05a9ab..785e009 100644 --- a/gcc/config/aarch64/tuning_models/generic_armv9_a.h +++ b/gcc/config/aarch64/tuning_models/generic_armv9_a.h @@ -236,7 +236,9 @@ static const struct tune_params generic_armv9_a_tunings = 1 /* store_pred. */ }, /* memmov_cost. */ 3, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + (AARCH64_FUSE_BASE + | AARCH64_FUSE_CMP_CSEL + | AARCH64_FUSE_CMP_CSET), /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/neoverse512tvb.h b/gcc/config/aarch64/tuning_models/neoverse512tvb.h index c407b89..f725059 100644 --- a/gcc/config/aarch64/tuning_models/neoverse512tvb.h +++ b/gcc/config/aarch64/tuning_models/neoverse512tvb.h @@ -143,7 +143,7 @@ static const struct tune_params neoverse512tvb_tunings = 1 /* store_pred. */ }, /* memmov_cost. */ 3, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + AARCH64_FUSE_NEOVERSE_BASE, /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/neoversen2.h b/gcc/config/aarch64/tuning_models/neoversen2.h index fd5f8f3..141c994 100644 --- a/gcc/config/aarch64/tuning_models/neoversen2.h +++ b/gcc/config/aarch64/tuning_models/neoversen2.h @@ -205,7 +205,7 @@ static const struct tune_params neoversen2_tunings = 1 /* store_pred. */ }, /* memmov_cost. */ 5, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + AARCH64_FUSE_NEOVERSE_BASE, /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/neoversen3.h b/gcc/config/aarch64/tuning_models/neoversen3.h index 8b156c2..b3e3188 100644 --- a/gcc/config/aarch64/tuning_models/neoversen3.h +++ b/gcc/config/aarch64/tuning_models/neoversen3.h @@ -205,7 +205,7 @@ static const struct tune_params neoversen3_tunings = 2 /* store_pred. */ }, /* memmov_cost. */ 5, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + AARCH64_FUSE_NEOVERSE_BASE, /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/neoversev1.h b/gcc/config/aarch64/tuning_models/neoversev1.h index 23c121d..b3d27eb 100644 --- a/gcc/config/aarch64/tuning_models/neoversev1.h +++ b/gcc/config/aarch64/tuning_models/neoversev1.h @@ -214,7 +214,7 @@ static const struct tune_params neoversev1_tunings = 1 /* store_pred. */ }, /* memmov_cost. */ 3, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + AARCH64_FUSE_NEOVERSE_BASE, /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/neoversev2.h b/gcc/config/aarch64/tuning_models/neoversev2.h index 40af5f4..ea91bbb 100644 --- a/gcc/config/aarch64/tuning_models/neoversev2.h +++ b/gcc/config/aarch64/tuning_models/neoversev2.h @@ -218,7 +218,7 @@ static const struct tune_params neoversev2_tunings = 2 /* store_pred. */ }, /* memmov_cost. */ 5, /* issue_rate */ - (AARCH64_FUSE_BASE | AARCH64_FUSE_CMP_CSEL | AARCH64_FUSE_CMP_CSET), /* fusible_ops */ + AARCH64_FUSE_NEOVERSE_BASE, /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/neoversev3.h b/gcc/config/aarch64/tuning_models/neoversev3.h index d65d74b..3f5ba4bf 100644 --- a/gcc/config/aarch64/tuning_models/neoversev3.h +++ b/gcc/config/aarch64/tuning_models/neoversev3.h @@ -205,7 +205,7 @@ static const struct tune_params neoversev3_tunings = 2 /* store_pred. */ }, /* memmov_cost. */ 10, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + AARCH64_FUSE_NEOVERSE_BASE, /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ diff --git a/gcc/config/aarch64/tuning_models/neoversev3ae.h b/gcc/config/aarch64/tuning_models/neoversev3ae.h index 7b7fa0b..4d9c62f 100644 --- a/gcc/config/aarch64/tuning_models/neoversev3ae.h +++ b/gcc/config/aarch64/tuning_models/neoversev3ae.h @@ -205,7 +205,7 @@ static const struct tune_params neoversev3ae_tunings = 2 /* store_pred. */ }, /* memmov_cost. */ 10, /* issue_rate */ - AARCH64_FUSE_BASE, /* fusible_ops */ + AARCH64_FUSE_NEOVERSE_BASE, /* fusible_ops */ "32:16", /* function_align. */ "4", /* jump_align. */ "32:16", /* loop_align. */ |