[gcc/devel/gccgo] [AArch64] Enable compare branch fusion

Ian Lance Taylor ian@gcc.gnu.org
Thu Jan 23 00:27:00 GMT 2020


https://gcc.gnu.org/g:6ed8c923325c9b2fcb30996fa14582ac136d9329

commit 6ed8c923325c9b2fcb30996fa14582ac136d9329
Author: Wilco Dijkstra <wdijkstr@arm.com>
Date:   Fri Jan 17 14:27:14 2020 +0000

    [AArch64] Enable compare branch fusion
    
    Enable the most basic form of compare-branch fusion since various CPUs
    support it. This has no measurable effect on cores which don't support
    branch fusion, but increases fusion opportunities on cores which do.
    
    gcc/
    	* config/aarch64/aarch64.c (generic_tunings): Add branch fusion.
    	(neoversen1_tunings): Likewise.

Diff:
---
 gcc/ChangeLog                | 5 +++++
 gcc/config/aarch64/aarch64.c | 4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 06bcb81..debd4d7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
 2020-01-17  Wilco Dijkstra  <wdijkstr@arm.com>
 
+	* config/aarch64/aarch64.c (generic_tunings): Add branch fusion.
+	(neoversen1_tunings): Likewise.
+
+2020-01-17  Wilco Dijkstra  <wdijkstr@arm.com>
+
 	PR target/92692
 	* config/aarch64/aarch64.c (aarch64_split_compare_and_swap)
 	Add assert to ensure prolog has been emitted.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index ea9d6a1..fb2e102 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -726,7 +726,7 @@ static const struct tune_params generic_tunings =
   SVE_NOT_IMPLEMENTED, /* sve_width  */
   4, /* memmov_cost  */
   2, /* issue_rate  */
-  (AARCH64_FUSE_AES_AESMC), /* fusible_ops  */
+  (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_CMP_BRANCH), /* fusible_ops  */
   "16:12",	/* function_align.  */
   "4",	/* jump_align.  */
   "8",	/* loop_align.  */
@@ -1130,7 +1130,7 @@ static const struct tune_params neoversen1_tunings =
   SVE_NOT_IMPLEMENTED, /* sve_width  */
   4, /* memmov_cost  */
   3, /* issue_rate  */
-  AARCH64_FUSE_AES_AESMC, /* fusible_ops  */
+  (AARCH64_FUSE_AES_AESMC | AARCH64_FUSE_CMP_BRANCH), /* fusible_ops  */
   "32:16",	/* function_align.  */
   "32:16",	/* jump_align.  */
   "32:16",	/* loop_align.  */



More information about the Gcc-cvs mailing list