diff options
author | Richard Sandiford <richard@codesourcery.com> | 2007-07-23 12:49:45 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2007-07-23 12:49:45 +0000 |
commit | a05bea767716117ac703c1adfcdf660906183b65 (patch) | |
tree | 261fdc61422012cf1e8354c83eca63bf14ce9391 /gcc | |
parent | fae4095f015e9cf79b4b2bd2a243cf825ca624e0 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 5 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 2 | ||||
-rw-r--r-- | gcc/config/mips/mips.opt | 4 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/mips/branch-cost-1.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/mips/branch-cost-2.c | 8 |
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" } } */ |