diff options
author | Richard Henderson <rth@redhat.com> | 2005-10-06 10:06:12 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-10-06 10:06:12 -0700 |
commit | 24c2fde2afab0a8108c03bb40bdd0543ca417155 (patch) | |
tree | f953ff122d8b829c0e015af9f0055db1bc7929f8 /gcc/mode-switching.c | |
parent | 27f0fe7f6eff528edc9c34025a96ff21fa1f0d35 (diff) | |
download | gcc-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.c | 12 |
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)) |