From: Graham Stott Date: Mon, 11 Nov 2002 03:36:01 +0000 (+0000) Subject: re PR middle-end/8502 (wrong code generated for switch statement) X-Git-Tag: releases/gcc-3.2.1~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e85f1e87fb029297c0311d83fb2a656819abd20;p=thirdparty%2Fgcc.git re PR middle-end/8502 (wrong code generated for switch statement) PR 8502 * cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed jumps post reload. Co-Authored-By: Jan Hubicka From-SVN: r59003 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 40983df71fae..0b5f968587f5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2002-11-11 Graham Stott + Jan Hubicka + + PR 8502 + * cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed + jumps post reload. + 2002-11-08 H.J. Lu Fix c/5351 and optimization/7591. diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index bbcdfbb1bfc5..e2cb773379a1 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -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))