From 7a1fee99d00421892caea4d6f0e621ec7527cde7 Mon Sep 17 00:00:00 2001
From: rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 18 Jul 2003 21:33:36 +0000
Subject: [PATCH]         * cfgrtl.c (force_nonfallthru_and_redirect): Use
 tablejump_p         to skip the addr_vec.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69569 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog |  5 +++++
 gcc/cfgrtl.c  | 17 +++++++----------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 644da7bf3238..0b711da0476b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2003-07-18  Richard Henderson  <rth@redhat.com>
+
+	* cfgrtl.c (force_nonfallthru_and_redirect): Use tablejump_p
+	to skip the addr_vec.
+
 Fri Jul 18 15:22:28 2003  Alexandre Oliva  <aoliva@redhat.com>
 
 	* combine.c (combinable_i3pat): Don't forbid occurrences of
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index d197b79380a1..903f57eac3fd 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -1036,19 +1036,16 @@ force_nonfallthru_and_redirect (edge e, basic_block target)
     {
       /* Create the new structures.  */
 
+      /* If the old block ended with a tablejump, skip its table
+	 by searching forward from there.  Otherwise start searching
+	 forward from the last instruction of the old block.  */
+      if (!tablejump_p (e->src->end, NULL, &note))
+	note = e->src->end;
+
       /* Position the new block correctly relative to loop notes.  */
-      note = last_loop_beg_note (e->src->end);
+      note = last_loop_beg_note (note);
       note = NEXT_INSN (note);
 
-      /* ... and ADDR_VECs.  */
-      if (note != NULL
-	  && GET_CODE (note) == CODE_LABEL
-	  && NEXT_INSN (note)
-	  && GET_CODE (NEXT_INSN (note)) == JUMP_INSN
-	  && (GET_CODE (PATTERN (NEXT_INSN (note))) == ADDR_DIFF_VEC
-	      || GET_CODE (PATTERN (NEXT_INSN (note))) == ADDR_VEC))
-	note = NEXT_INSN (NEXT_INSN (note));
-
       jump_block = create_basic_block (note, NULL, e->src);
       jump_block->count = e->count;
       jump_block->frequency = EDGE_FREQUENCY (e);
-- 
GitLab