summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Endo <olegendo@gcc.gnu.org>2013-12-08 22:15:59 +0000
committerOleg Endo <olegendo@gcc.gnu.org>2013-12-08 22:15:59 +0000
commit7337ddf4bfe0544121c8735624f90b6bc6bc33c3 (patch)
treed1175879cba07a0ec229fb6fe29a736690803357
parente1775b33f51ecff1824554750d249bedf380dd27 (diff)
downloadgcc-7337ddf4bfe0544121c8735624f90b6bc6bc33c3.tar.gz
re PR target/52898 (SH Target: Inefficient DImode comparisons)
PR target/52898 PR target/51697 * common/config/sh/sh-common.c (sh_option_optimization_table): Remove OPT_mcbranchdi entry. * config/sh/sh.opt (mcbranchdi, mcmpeqdi): Mark as undocumented and emit a warning. * config/sh/sh.c (sh_option_override): Initialize TARGET_CBRANCHDI4 and TARGET_CMPEQDI_T variables. * doc/invoke.texi (SH options): Undocument -mcbranchdi and -mcmpeqdi. PR target/52898 PR target/51697 * gcc.target/sh/pr51697.c: New. From-SVN: r205794
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/common/config/sh/sh-common.c1
-rw-r--r--gcc/config/sh/sh.c5
-rw-r--r--gcc/config/sh/sh.opt4
-rw-r--r--gcc/doc/invoke.texi11
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/sh/pr51697.c21
7 files changed, 47 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0c026c233cb..18537e8ead0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2013-12-08 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/52898
+ PR target/51697
+ * common/config/sh/sh-common.c (sh_option_optimization_table): Remove
+ OPT_mcbranchdi entry.
+ * config/sh/sh.opt (mcbranchdi, mcmpeqdi): Mark as undocumented and
+ emit a warning.
+ * config/sh/sh.c (sh_option_override): Initialize TARGET_CBRANCHDI4
+ and TARGET_CMPEQDI_T variables.
+ * doc/invoke.texi (SH options): Undocument -mcbranchdi and -mcmpeqdi.
+
2013-12-07 Maxim Kuvyrkov <maxim@kugelworks.com>
* config/linux.h: Fix typo in a comment.
diff --git a/gcc/common/config/sh/sh-common.c b/gcc/common/config/sh/sh-common.c
index f7fb9f5641c..cd4295a1138 100644
--- a/gcc/common/config/sh/sh-common.c
+++ b/gcc/common/config/sh/sh-common.c
@@ -34,7 +34,6 @@ static const struct default_options sh_option_optimization_table[] =
{ OPT_LEVELS_1_PLUS_SPEED_ONLY, OPT_mdiv_, "inv:minlat", 1 },
{ OPT_LEVELS_SIZE, OPT_mdiv_, SH_DIV_STR_FOR_SIZE, 1 },
{ OPT_LEVELS_0_ONLY, OPT_mdiv_, "", 1 },
- { OPT_LEVELS_SIZE, OPT_mcbranchdi, NULL, 0 },
/* We can't meaningfully test TARGET_SHMEDIA here, because -m
options haven't been parsed yet, hence we'd read only the
default. sh_target_reg_class will return NO_REGS if this is
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 3e907b24a9d..519892e1855 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -771,6 +771,11 @@ sh_option_override (void)
SUBTARGET_OVERRIDE_OPTIONS;
if (optimize > 1 && !optimize_size)
target_flags |= MASK_SAVE_ALL_TARGET_REGS;
+
+ /* Set default values of TARGET_CBRANCHDI4 and TARGET_CMPEQDI_T. */
+ TARGET_CBRANCHDI4 = 1;
+ TARGET_CMPEQDI_T = 0;
+
sh_cpu = PROCESSOR_SH1;
assembler_dialect = 0;
if (TARGET_SH2)
diff --git a/gcc/config/sh/sh.opt b/gcc/config/sh/sh.opt
index 8a6788eb3d1..2a782c0e596 100644
--- a/gcc/config/sh/sh.opt
+++ b/gcc/config/sh/sh.opt
@@ -233,11 +233,11 @@ Target Var(TARGET_ZDCBRANCH)
Assume that zero displacement conditional branches are fast
mcbranchdi
-Target Var(TARGET_CBRANCHDI4)
+Target Undocumented Var(TARGET_CBRANCHDI4) Warn(%qs is deprecated and has no effect)
Enable cbranchdi4 pattern
mcmpeqdi
-Target Var(TARGET_CMPEQDI_T)
+Target Undocumented Var(TARGET_CMPEQDI_T) Warn(%qs is deprecated and has no effect)
Emit cmpeqdi_t pattern even when -mcbranchdi is in effect.
mcut2-workaround
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 76149a3b8ff..bda4c198806 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -959,7 +959,7 @@ See RS/6000 and PowerPC Options.
-mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
-maccumulate-outgoing-args -minvalid-symbols @gol
-matomic-model=@var{atomic-model} @gol
--mbranch-cost=@var{num} -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi @gol
+-mbranch-cost=@var{num} -mzdcbranch -mno-zdcbranch @gol
-mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra @gol
-mpretend-cmove -mtas}
@@ -20252,15 +20252,6 @@ 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.
-
-@item -mcmpeqdi
-@opindex mcmpeqdi
-Emit the @code{cmpeqdi_t} instruction pattern even when @option{-mcbranchdi}
-is in effect.
-
@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a67489420b1..9acf500147b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2013-12-08 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/52898
+ PR target/51697
+ * gcc.target/sh/pr51697.c: New.
+
2013-12-08 Uros Bizjak <ubizjak@gmail.com>
* gcc.dg/macro-fusion-1.c: Cleanup sched2 rtl dump.
diff --git a/gcc/testsuite/gcc.target/sh/pr51697.c b/gcc/testsuite/gcc.target/sh/pr51697.c
new file mode 100644
index 00000000000..d63e329bff9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr51697.c
@@ -0,0 +1,21 @@
+/* Check that DImode comparisons are optimized as expected when compiling
+ with -Os. */
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } } */
+/* { dg-final { scan-assembler-times "tst" 2 } } */
+/* { dg-final { scan-assembler-not "cmp" } } */
+
+int
+test_00 (long long* x)
+{
+ /* 1x tst, no cmp/* insns. */
+ return *x & 0xFFFFFFFF ? -20 : -40;
+}
+
+int
+test_01 (unsigned long long x)
+{
+ /* 1x tst, no cmp/* insns. */
+ return x >= 0x100000000LL ? -20 : -40;
+}