aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1993-12-24 12:36:04 -0700
committerJeff Law <law@gcc.gnu.org>1993-12-24 12:36:04 -0700
commit443332237923d52fde2cea17df1d57594c1577c2 (patch)
treefd251ab87fdea9dd87f6686e4d12e22008459dc6
parent18bd1bd9bb69c3845491d690954a0e0f57a7da1e (diff)
downloadgcc-443332237923d52fde2cea17df1d57594c1577c2.zip
gcc-443332237923d52fde2cea17df1d57594c1577c2.tar.gz
gcc-443332237923d52fde2cea17df1d57594c1577c2.tar.bz2
cse.c (cse_insn): Set "cse_jumps_altered" when collapsing a switch statement into an...
* cse.c (cse_insn): Set "cse_jumps_altered" when collapsing a switch statement into an unconditional jump. * toplev.c (rest_of_compilation): Rerun jump_optimize before the second CSE pass. From-SVN: r6305
-rw-r--r--gcc/cse.c1
-rw-r--r--gcc/toplev.c4
2 files changed, 5 insertions, 0 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 507cef6..2d326ce 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -6447,6 +6447,7 @@ cse_insn (insn, in_libcall_block)
trial = gen_rtx (LABEL_REF, Pmode, get_label_after (trial));
SET_SRC (sets[i].rtl) = trial;
+ cse_jumps_altered = 1;
break;
}
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 10d4f89..9031fee 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -2559,7 +2559,11 @@ rest_of_compilation (decl)
if (optimize > 0 && flag_rerun_cse_after_loop)
{
+ /* Running another jump optimization pass before the second
+ cse pass sometimes simplifies the RTL enough to allow
+ the second CSE pass to do a better job. */
TIMEVAR (cse2_time, reg_scan (insns, max_reg_num (), 0));
+ TIMEVAR (jump_time, jump_optimize (insns, 0, 0, 1));
TIMEVAR (cse2_time, tem = cse_main (insns, max_reg_num (),
1, cse2_dump_file));