global.c (build_insn_chain): Allow ADDR_VEC or ADDR_DIF_VEC after end of last block...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Thu, 7 Jun 2001 20:17:28 +0000 (20:17 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 7 Jun 2001 20:17:28 +0000 (16:17 -0400)
* global.c (build_insn_chain): Allow ADDR_VEC or ADDR_DIF_VEC after
end of last block if last real insn is a JUMP_INSN.

From-SVN: r42977

gcc/ChangeLog
gcc/global.c

index 1f9ef86226bff0e89a23d2d7d296e8c002665968..266904d44ee2b2a8048f4298b647d436ee537399 100644 (file)
@@ -1,3 +1,8 @@
+Thu Jun  7 16:17:40 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * global.c (build_insn_chain): Allow ADDR_VEC or ADDR_DIF_VEC after
+       end of last block if last real insn is a JUMP_INSN.
+
 2001-06-07  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * NEWS: Regenerate.
index 2f757bd9ade77394e2ca378e94af03ffe9b2e1d9..4460836c7ed1d9ee0232469a579334397596b607 100644 (file)
@@ -1851,11 +1851,17 @@ build_insn_chain (first)
         no real insns are after the end of the last basic block.
 
         We may want to reorganize the loop somewhat since this test should
-        always be the right exit test.  */
+        always be the right exit test.  Allow an ADDR_VEC or ADDR_DIF_VEC if
+        the previous real insn is a JUMP_INSN.  */
       if (b == n_basic_blocks)
        {
          for (first = NEXT_INSN (first) ; first; first = NEXT_INSN (first))
-           if (INSN_P (first) && GET_CODE (PATTERN (first)) != USE)
+           if (INSN_P (first)
+               && GET_CODE (PATTERN (first)) != USE
+               && ! ((GET_CODE (PATTERN (first)) == ADDR_VEC
+                      || GET_CODE (PATTERN (first)) == ADDR_DIFF_VEC)
+                     && prev_real_insn (first) != 0
+                     && GET_CODE (prev_real_insn (first)) == JUMP_INSN))
              abort ();
          break;
        }