]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/8502 (wrong code generated for switch statement)
authorGraham Stott <graham.stott@btinternet.com>
Mon, 11 Nov 2002 03:36:01 +0000 (03:36 +0000)
committerGraham Stott <grahams@gcc.gnu.org>
Mon, 11 Nov 2002 03:36:01 +0000 (03:36 +0000)
        PR 8502
        * cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed
        jumps post reload.

Co-Authored-By: Jan Hubicka <jh@suse.cz>
From-SVN: r59003

gcc/ChangeLog
gcc/cfgrtl.c

index 40983df71faeef46c09beaee3039471801d99727..0b5f968587f543ac01343b755b8c27b13faaf735 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-11  Graham Stott  <graham.stott@btinternet.com>
+           Jan Hubicka  <jh@suse.cz>
+
+       PR 8502
+       * cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed
+       jumps post reload.
+
 2002-11-08  H.J. Lu <hjl@gnu.org>
 
        Fix c/5351 and optimization/7591.
index bbcdfbb1bfc5c9262183125b52f161cc85aefac5..e2cb773379a1c9c9b5e14cc4f6b40ee7b236b455 100644 (file)
@@ -665,6 +665,7 @@ try_redirect_by_replacing_jump (e, target)
   edge tmp;
   rtx set;
   int fallthru = 0;
+  rtx table;
 
   /* Verify that all targets will be TARGET.  */
   for (tmp = src->succ; tmp; tmp = tmp->succ_next)
@@ -674,6 +675,13 @@ try_redirect_by_replacing_jump (e, target)
   if (tmp || !onlyjump_p (insn))
     return false;
 
+  if (reload_completed && JUMP_LABEL (insn)
+      && (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX
+      && GET_CODE (table) == JUMP_INSN
+      && (GET_CODE (PATTERN (table)) == ADDR_VEC
+         || GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
+    return false;
+
   /* Avoid removing branch with side effects.  */
   set = single_set (insn);
   if (!set || side_effects_p (set))