re PR target/51244 ([SH] Inefficient conditional branch and code around T bit)
authorOleg Endo <olegendo@gcc.gnu.org>
Thu, 26 Jul 2012 00:19:58 +0000 (00:19 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Thu, 26 Jul 2012 00:19:58 +0000 (00:19 +0000)
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

gcc/ChangeLog
gcc/config/sh/sh.c
gcc/config/sh/sh.md
gcc/config/sh/sh.opt
gcc/doc/invoke.texi

index 5a5028e238eac8977a7cdd20718af4cfeefa39bf..c0550c5b6e7a23571e339c03f5548938e6dec1ee 100644 (file)
@@ -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
index b0ef972dcc22aa1950746110c0965d308531b5bc..477d59c8de1fc90c95673a5c7dc04d9ad33f1629 100644 (file)
@@ -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';
index 2224fa4c8f371bdbb548ddf7d769895cd2ce8524..d8be11164d38df3aab405cbf2c1dd079d08790c4 100644 (file)
@@ -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 ();
index fabf9b5b93268de234afa1f7ee5364cf2c3cc4b7..70b7e09721fa16b6fabcaea1413cf5a1568ea3b5 100644 (file)
@@ -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
index cba685dcfc1d6aa2dacba6a0dcbced13d9b6a737..429fdc8ba05ba93b1e453f54ff08558974d2284d 100644 (file)
@@ -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.