aboutsummaryrefslogtreecommitdiff
path: root/gcc/mode-switching.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-10-06 17:06:12 +0000
committerRichard Henderson <rth@redhat.com>2005-10-06 17:06:12 +0000
commit5a7b64c65b183cd2fef8e2a42272161c2a01ef35 (patch)
treef953ff122d8b829c0e015af9f0055db1bc7929f8 /gcc/mode-switching.c
parentd7a4efcc886a21aad5547000eefb2ea3771174b4 (diff)
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: https://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.c12
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))