[mips patch RFA] don't use branch-likely insns based on -mtune.

cgd@broadcom.com cgd@broadcom.com
Tue May 4 23:33:00 GMT 2004


Purpose seems fairly obvious.  If you're tuning for an arch were GCC's
typical use of branch-likely insns costs 10% performance on common
benchmarks, it seems like a good thing to *NOT USE THEM*.  8-)

Tested by building a sb1-elf compiler from current srcs (had to tweak
some other things to make that build for other reasons -- more later,
maybe), then checking to see that various arch/tune options did the
right thing.



chris

2004-05-03  Chris Demetriou  <cgd@broadcom.com>

	* config/mips/mips.c (override_options): Default to no
	generation of branch-likely operations when tuning for
	CPUs where they tend to have a negative performance impact
	(e.g., SB-1).

Index: mips.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v
retrieving revision 1.408
diff -u -p -r1.408 mips.c
--- mips.c	30 Apr 2004 16:27:27 -0000	1.408
+++ mips.c	3 May 2004 22:13:35 -0000
@@ -4681,9 +4681,10 @@ override_options (void)
 	 architecture.
 
 	 By default, we enable use of Branch Likely instructions on
-	 all architectures which support them except for MIPS32 and MIPS64
-	 (i.e., the generic MIPS32 and MIPS64 ISAs, and processors which
-	 implement them).
+	 all architectures which support them with the following
+	 exceptions: when creating MIPS32 or MIPS64 code, and when
+	 tuning for architectures where their use tends to hurt
+	 performance.
 
 	 The MIPS32 and MIPS64 architecture specifications say "Software
 	 is strongly encouraged to avoid use of Branch Likely
@@ -4691,7 +4692,9 @@ override_options (void)
 	 of the [MIPS32 and MIPS64] architecture."  Therefore, we do not
 	 issue those instructions unless instructed to do so by
 	 -mbranch-likely.  */
-      if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64))
+      if (ISA_HAS_BRANCHLIKELY
+	  && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64)
+	  && !(TUNE_SB1))
 	target_flags |= MASK_BRANCHLIKELY;
       else
 	target_flags &= ~MASK_BRANCHLIKELY;



More information about the Gcc-patches mailing list