For bfin looping optimization, after lsetup optimization, it can have
the correct lsetup related insns which causes gcc_assert for jump_insn.

The related bug is Bug 66620.

2015-06-28  Chen Gang  <gang.chen.5...@gmail.com>

        * config/bfin/bfin.c (hwloop_optimize): Use return false instead
        of gcc_assert for checking jump_insn.
---
 gcc/config/bfin/bfin.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index 3b4b54e..91866dd 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -3520,7 +3520,13 @@ hwloop_optimize (hwloop_info loop)
       if (vec_safe_length (loop->incoming) > 1
          || !(loop->incoming->last ()->flags & EDGE_FALLTHRU))
        {
-         gcc_assert (JUMP_P (insn));
+         if (!JUMP_P (insn))
+           {
+             if (dump_file)
+               fprintf (dump_file, ";; loop %d lsetup may already inserted\n",
+                        loop->loop_no);
+             return false;
+           }
          insn = PREV_INSN (insn);
        }
 
-- 
1.9.3

Reply via email to