diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-10-06 17:06:12 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-10-06 17:06:12 +0000 |
commit | 3743074509eb2c642c077fba1dd9da326c927f33 (patch) | |
tree | f953ff122d8b829c0e015af9f0055db1bc7929f8 /gcc/mode-switching.c | |
parent | 07c3180ca00c793dc11563650cef8faad4044ba7 (diff) | |
download | gcc-3743074509eb2c642c077fba1dd9da326c927f33.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105045 138bc75d-0d04-0410-961f-82ee72b054a4
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 a781cb2d743..30ad3a83357 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)) |