aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2007-07-23 12:49:45 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2007-07-23 12:49:45 +0000
commita05bea767716117ac703c1adfcdf660906183b65 (patch)
tree261fdc61422012cf1e8354c83eca63bf14ce9391 /gcc
parentfae4095f015e9cf79b4b2bd2a243cf825ca624e0 (diff)
downloadgcc-a05bea767716117ac703c1adfcdf660906183b65.zip
gcc-a05bea767716117ac703c1adfcdf660906183b65.tar.gz
gcc-a05bea767716117ac703c1adfcdf660906183b65.tar.bz2
mips.c (override_options): Use mips_costs to derive the default branch cost.
gcc/ * config/mips/mips.c (override_options): Use mips_costs to derive the default branch cost. * config/mips/mips.h (BRANCH_COST): Use mips_branch_cost rather than mips_costs. * config/mips/mips.opt (mbranch-cost=): New option. * doc/invoke.texi (-mbrach-cost): Document new MIPS option. gcc/testsuite/ * gcc.target/mips/branch-cost-1.c: New test. * gcc.target/mips/branch-cost-2.c: Likewise. From-SVN: r126846
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/mips/mips.c5
-rw-r--r--gcc/config/mips/mips.h2
-rw-r--r--gcc/config/mips/mips.opt4
-rw-r--r--gcc/doc/invoke.texi9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/mips/branch-cost-1.c8
-rw-r--r--gcc/testsuite/gcc.target/mips/branch-cost-2.c8
8 files changed, 48 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3c85d67..ad37fca 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2007-07-23 Richard Sandiford <richard@codesourcery.com>
+ * config/mips/mips.c (override_options): Use mips_costs to derive
+ the default branch cost.
+ * config/mips/mips.h (BRANCH_COST): Use mips_branch_cost rather
+ than mips_costs.
+ * config/mips/mips.opt (mbranch-cost=): New option.
+ * doc/invoke.texi (-mbrach-cost): Document new MIPS option.
+
+2007-07-23 Richard Sandiford <richard@codesourcery.com>
+
* config/mips/mips.h (GR_REG_CLASS_P, COP_REG_CLASS_P): Delete.
(SECONDARY_MEMORY_NEEDED): Delete commented-out definition.
* config/mips/mips.c (mips_register_move_cost): Use reg_class_subset_p
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index a7adf17..f42fe77 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -5047,6 +5047,11 @@ override_options (void)
else
mips_cost = &mips_rtx_cost_data[mips_tune];
+ /* If the user hasn't specified a branch cost, use the processor's
+ default. */
+ if (mips_branch_cost == 0)
+ mips_branch_cost = mips_cost->branch_cost;
+
if ((target_flags_explicit & MASK_64BIT) != 0)
{
/* The user specified the size of the integer registers. Make sure
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index dbc947d..2496986 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -2326,7 +2326,7 @@ typedef struct mips_args {
/* A C expression for the cost of a branch instruction. A value of
1 is the default; other values are interpreted relative to that. */
-#define BRANCH_COST mips_cost->branch_cost
+#define BRANCH_COST mips_branch_cost
#define LOGICAL_OP_NON_SHORT_CIRCUIT 0
/* If defined, modifies the length assigned to instruction INSN as a
diff --git a/gcc/config/mips/mips.opt b/gcc/config/mips/mips.opt
index f7e751f..7e6dd37 100644
--- a/gcc/config/mips/mips.opt
+++ b/gcc/config/mips/mips.opt
@@ -35,6 +35,10 @@ march=
Target RejectNegative Joined Var(mips_arch_string)
-march=ISA Generate code for the given ISA
+mbranch-cost=
+Target RejectNegative Joined UInteger Var(mips_branch_cost)
+-mbranch-cost=COST Set the cost of branches to roughly COST instructions
+
mbranch-likely
Target Report Mask(BRANCHLIKELY)
Use Branch Likely instructions, overriding the architecture default
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index c954b9f..116513e 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -638,7 +638,7 @@ Objective-C and Objective-C++ Dialects}.
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 @gol
-mfix-sb1 -mno-fix-sb1 @gol
-mflush-func=@var{func} -mno-flush-func @gol
--mbranch-likely -mno-branch-likely @gol
+-mbranch-cost=@var{num} -mbranch-likely -mno-branch-likely @gol
-mfp-exceptions -mno-fp-exceptions @gol
-mvr4130-align -mno-vr4130-align}
@@ -11915,6 +11915,13 @@ memory range, and the number 3 (to flush both caches). The default
depends on the target GCC was configured for, but commonly is either
@samp{_flush_func} or @samp{__cpu_flush}.
+@item mbranch-cost=@var{num}
+@opindex mbranch-cost
+Set the cost of branches to roughly @var{num} ``simple'' instructions.
+This cost is only a heuristic and is not guaranteed to produce
+consistent results across releases. A zero cost redundantly selects
+the default, which is based on the @option{-mtune} setting.
+
@item -mbranch-likely
@itemx -mno-branch-likely
@opindex mbranch-likely
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5f21f1b..bc46a5d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-23 Richard Sandiford <richard@codesourcery.com>
+
+ * gcc.target/mips/branch-cost-1.c: New test.
+ * gcc.target/mips/branch-cost-2.c: Likewise.
+
2007-07-23 Christopher D. Rickett <crickett@lanl.gov>
PR fortran/32732
diff --git a/gcc/testsuite/gcc.target/mips/branch-cost-1.c b/gcc/testsuite/gcc.target/mips/branch-cost-1.c
new file mode 100644
index 0000000..3b2c80d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/branch-cost-1.c
@@ -0,0 +1,8 @@
+/* { dg-mips-options "-mbranch-cost=1 -mips64 -O2" } */
+int
+foo (int x, int y, int z, int k)
+{
+ return x == k ? x + y : z - x;
+}
+/* { dg-final { scan-assembler-not "\t(movz|movn)\t" } } */
+/* { dg-final { scan-assembler "\t(bne|beq)\t" } } */
diff --git a/gcc/testsuite/gcc.target/mips/branch-cost-2.c b/gcc/testsuite/gcc.target/mips/branch-cost-2.c
new file mode 100644
index 0000000..356def2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/branch-cost-2.c
@@ -0,0 +1,8 @@
+/* { dg-mips-options "-mbranch-cost=10 -mips64 -O2" } */
+int
+foo (int x, int y, int z, int k)
+{
+ return x == k ? x + y : z - x;
+}
+/* { dg-final { scan-assembler "\t(movz|movn)\t" } } */
+/* { dg-final { scan-assembler-not "\t(bne|beq)\t" } } */