From: Bernd Schmidt Date: Thu, 30 Nov 2000 13:32:39 +0000 (+0000) Subject: Backport a change to the 2.95 branch X-Git-Tag: prereleases/gcc-2.95.3-test1~43 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0b745e4261ef22f879685df4633be6964645c7a7;p=thirdparty%2Fgcc.git Backport a change to the 2.95 branch From-SVN: r37890 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8082886f7670..1456bc36b982 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2000-11-30 Bernd Schmidt + Sun Oct 10 13:28:48 1999 Bernd Schmidt + * loop.c (find_and_verify_loops): When looking for a BARRIER, don't + use one before a jump table. + Fri Jul 9 10:48:28 1999 Bernd Schmidt * loop.c (check_dbra_loop): When reversing a loop, delete all REG_EQUAL notes referencing the reversed biv except those which are diff --git a/gcc/loop.c b/gcc/loop.c index 1f6841d5d8d1..0b121cb918c5 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -2829,16 +2829,30 @@ find_and_verify_loops (f) rtx target = JUMP_LABEL (insn) ? JUMP_LABEL (insn) : get_last_insn (); int target_loop_num = uid_loop_num[INSN_UID (target)]; - rtx loc; + rtx loc, loc2; for (loc = target; loc; loc = PREV_INSN (loc)) if (GET_CODE (loc) == BARRIER + /* Don't move things inside a tablejump. */ + && ((loc2 = next_nonnote_insn (loc)) == 0 + || GET_CODE (loc2) != CODE_LABEL + || (loc2 = next_nonnote_insn (loc2)) == 0 + || GET_CODE (loc2) != JUMP_INSN + || (GET_CODE (PATTERN (loc2)) != ADDR_VEC + && GET_CODE (PATTERN (loc2)) != ADDR_DIFF_VEC)) && uid_loop_num[INSN_UID (loc)] == target_loop_num) break; if (loc == 0) for (loc = target; loc; loc = NEXT_INSN (loc)) if (GET_CODE (loc) == BARRIER + /* Don't move things inside a tablejump. */ + && ((loc2 = next_nonnote_insn (loc)) == 0 + || GET_CODE (loc2) != CODE_LABEL + || (loc2 = next_nonnote_insn (loc2)) == 0 + || GET_CODE (loc2) != JUMP_INSN + || (GET_CODE (PATTERN (loc2)) != ADDR_VEC + && GET_CODE (PATTERN (loc2)) != ADDR_DIFF_VEC)) && uid_loop_num[INSN_UID (loc)] == target_loop_num) break;