aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOleg Endo <olegendo@gcc.gnu.org>2012-07-26 00:19:58 +0000
committerOleg Endo <olegendo@gcc.gnu.org>2012-07-26 00:19:58 +0000
commitf34ee0b290fe3e188bcda2985c071b031381a67b (patch)
treebad46d3b39d836f1907345d5b96a602cd0993faa /gcc
parent3b29b58c1b1cf300383506e269d6596050105b53 (diff)
downloadgcc-f34ee0b290fe3e188bcda2985c071b031381a67b.zip
gcc-f34ee0b290fe3e188bcda2985c071b031381a67b.tar.gz
gcc-f34ee0b290fe3e188bcda2985c071b031381a67b.tar.bz2
re PR target/51244 ([SH] Inefficient conditional branch and code around T bit)
PR target/51244 * config/sh/sh.opt (mzdcbranch): New option. * doc/invoke.texi: Document it. * config/sh/sh.md (negsi_cond): Use TARGET_ZDCBRANCH as condition instead of TARGET_HARD_SH4. * config/sh/sh.c (sh_option_override): Set TARGET_ZDCBRANCH as default for TARGET_HARD_SH4. From-SVN: r189877
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/sh/sh.c4
-rw-r--r--gcc/config/sh/sh.md4
-rw-r--r--gcc/config/sh/sh.opt4
-rw-r--r--gcc/doc/invoke.texi15
5 files changed, 33 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5a5028e..c0550c5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2012-07-26 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/51244
+ * config/sh/sh.opt (mzdcbranch): New option.
+ * doc/invoke.texi: Document it.
+ * config/sh/sh.md (negsi_cond): Use TARGET_ZDCBRANCH as condition
+ instead of TARGET_HARD_SH4.
+ * config/sh/sh.c (sh_option_override): Set TARGET_ZDCBRANCH as default
+ for TARGET_HARD_SH4.
+
2012-07-25 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54089
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index b0ef972..477d59c 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -741,6 +741,10 @@ sh_option_override (void)
sh_branch_cost = 2;
}
+ /* Set -mzdcbranch for SH4 / SH4A if not otherwise specified by the user. */
+ if (! global_options_set.x_TARGET_ZDCBRANCH && TARGET_HARD_SH4)
+ TARGET_ZDCBRANCH = 1;
+
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (! VALID_REGISTER_P (regno))
sh_register_names[regno][0] = '\0';
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 2224fa4..d8be111 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -4378,11 +4378,11 @@ label:
(match_operand:SI 3 "const_int_operand" "M,N"))
(match_operand:SI 1 "arith_reg_operand" "0,0")
(neg:SI (match_operand:SI 2 "arith_reg_operand" "r,r"))))]
- "TARGET_HARD_SH4"
+ "TARGET_SH1 && TARGET_ZDCBRANCH"
"@
bt\\t0f\;neg\\t%2,%0\\n0:
bf\\t0f\;neg\\t%2,%0\\n0:"
- "!TARGET_HARD_SH4"
+ "TARGET_SH1 && ! TARGET_ZDCBRANCH"
[(const_int 0)]
{
rtx skip_neg_label = gen_label_rtx ();
diff --git a/gcc/config/sh/sh.opt b/gcc/config/sh/sh.opt
index fabf9b5..70b7e09 100644
--- a/gcc/config/sh/sh.opt
+++ b/gcc/config/sh/sh.opt
@@ -225,6 +225,10 @@ mbranch-cost=
Target RejectNegative Joined UInteger Var(sh_branch_cost) Init(-1)
Cost to assume for a branch insn
+mzdcbranch
+Target Var(TARGET_ZDCBRANCH)
+Assume that zero displacement conditional branches are fast
+
mcbranchdi
Target Var(TARGET_CBRANCHDI4)
Enable cbranchdi4 pattern
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index cba685d..429fdc8 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -889,8 +889,9 @@ See RS/6000 and PowerPC Options.
-mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
-mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
-maccumulate-outgoing-args -minvalid-symbols -msoft-atomic -mhard-atomic @gol
--mbranch-cost=@var{num} -mcbranchdi -mcmpeqdi -mfused-madd -mno-fused-madd @gol
--mfsca -mno-fsca -mfsrra -mno-fsrra -mpretend-cmove -menable-tas}
+-mbranch-cost=@var{num} -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi @gol
+-mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra @gol
+-mpretend-cmove -menable-tas}
@emph{Solaris 2 Options}
@gccoptlist{-mimpure-text -mno-impure-text @gol
@@ -18366,6 +18367,16 @@ make the compiler try to generate more branch-free code if possible.
If not specified the value is selected depending on the processor type that
is being compiled for.
+@item -mzdcbranch
+@itemx -mno-zdcbranch
+@opindex mzdcbranch
+@opindex mno-zdcbranch
+Assume (do not assume) that zero displacement conditional branch instructions
+@code{bt} and @code{bf} are fast. If @option{-mzdcbranch} is specified, the
+compiler will try to prefer zero displacement branch code sequences. This is
+enabled by default when generating code for SH4 and SH4A. It can be explicitly
+disabled by specifying @option{-mno-zdcbranch}.
+
@item -mcbranchdi
@opindex mcbranchdi
Enable the @code{cbranchdi4} instruction pattern.