diff options
author | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-07-06 12:49:26 +0000 |
---|---|---|
committer | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-07-06 12:49:26 +0000 |
commit | b127ad66d1c53f6713f72a4978db0d1bfa411f4d (patch) | |
tree | 4a316b9f3f6f5f38dcbdccbbd48a5c0dfad706f6 | |
parent | 9a56363e14dfb9c83b950c5d1f6fe04bf227624b (diff) |
Fix assert caused by bad cfg manipulation in bfin.
PR target/66620
* config/bfin/bfin.c (hwloop_optimize): Create new bb between jump and
loop start when inserting LSETUP.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@225453 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/bfin/bfin.c | 13 |
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2319b0dca4c..e2b9974a9c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-07-06 Bernd Schmidt <bernds@codesourcery.com> + + PR target/66620 + * config/bfin/bfin.c (hwloop_optimize): Create new bb between jump and + loop start when inserting LSETUP. + 2015-07-06 H.J. Lu <hongjiu.lu@intel.com> PR target/53383 diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index 8c1e18a2731..2c6f1958f52 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -3796,8 +3796,19 @@ hwloop_optimize (hwloop_info loop) { gcc_assert (JUMP_P (prev)); prev = PREV_INSN (prev); + emit_insn_after (seq, prev); + } + else + { + emit_insn_after (seq, prev); + BB_END (loop->incoming_src) = prev; + basic_block new_bb = create_basic_block (seq, seq_end, + loop->head->prev_bb); + edge e = loop->incoming->last (); + gcc_assert (e->flags & EDGE_FALLTHRU); + redirect_edge_succ (e, new_bb); + make_edge (new_bb, loop->head, 0); } - emit_insn_after (seq, prev); } else { |