aboutsummaryrefslogtreecommitdiff
path: root/gcc/mode-switching.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-10-06 10:06:12 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-10-06 10:06:12 -0700
commit24c2fde2afab0a8108c03bb40bdd0543ca417155 (patch)
treef953ff122d8b829c0e015af9f0055db1bc7929f8 /gcc/mode-switching.c
parent27f0fe7f6eff528edc9c34025a96ff21fa1f0d35 (diff)
downloadgcc-24c2fde2afab0a8108c03bb40bdd0543ca417155.zip
gcc-24c2fde2afab0a8108c03bb40bdd0543ca417155.tar.gz
gcc-24c2fde2afab0a8108c03bb40bdd0543ca417155.tar.bz2
re PR target/23706 (ICE in rtl_verify_flow_info_1)
PR 23706 * mode-switching.c (optimize_mode_switching): Clear transp bit for block with incomming abnormal edges. * config/sh/sh.c (fpscr_values, emit_fpu_switch): New. (fpscr_set_from_mem): Use them. * config/sh/sh.md (fpu_switch0, fpu_switch1): Remove. (fpscr postinc splitters): Rewrite as peephole2+split. From-SVN: r105045
Diffstat (limited to 'gcc/mode-switching.c')
-rw-r--r--gcc/mode-switching.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/mode-switching.c b/gcc/mode-switching.c
index a781cb2..30ad3a8 100644
--- a/gcc/mode-switching.c
+++ b/gcc/mode-switching.c
@@ -456,6 +456,18 @@ optimize_mode_switching (FILE *file)
REG_SET_TO_HARD_REG_SET (live_now,
bb->il.rtl->global_live_at_start);
+
+ /* Pretend the mode is clobbered across abnormal edges. */
+ {
+ edge_iterator ei;
+ edge e;
+ FOR_EACH_EDGE (e, ei, bb->preds)
+ if (e->flags & EDGE_COMPLEX)
+ break;
+ if (e)
+ RESET_BIT (transp[bb->index], j);
+ }
+
for (insn = BB_HEAD (bb);
insn != NULL && insn != NEXT_INSN (BB_END (bb));
insn = NEXT_INSN (insn))