From: Jeffrey A Law Date: Mon, 15 Feb 1999 10:36:05 +0000 (+0000) Subject: loop.c (mark_loop_jump): Handle LO_SUM. X-Git-Tag: prereleases/egcs-1.1.2-prerelease-1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e461cdbbde2882d4ee24367684213e737937198a;p=thirdparty%2Fgcc.git loop.c (mark_loop_jump): Handle LO_SUM. * loop.c (mark_loop_jump): Handle LO_SUM. If we encounter something we do not understand, mark the loop and containing loops as invalid. From-SVN: r25213 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4ae0e9938413..61fbb22ed187 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Feb 15 11:33:51 1999 Jeffrey A Law (law@cygnus.com) + + * loop.c (mark_loop_jump): Handle LO_SUM. If we encounter something + we do not understand, mark the loop and containing loops as invalid. + Sun Feb 14 23:05:34 1999 Jeffrey A Law (law@cygnus.com) Tue Feb 9 21:14:03 1999 J"orn Rennecke diff --git a/gcc/loop.c b/gcc/loop.c index cfa3f60ef20c..04c808372847 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -2701,6 +2701,11 @@ mark_loop_jump (x, loop_num) mark_loop_jump (XEXP (x, 1), loop_num); return; + case LO_SUM: + /* This may refer to a LABEL_REF or SYMBOL_REF. */ + mark_loop_jump (XEXP (x, 1), loop_num); + return; + case SIGN_EXTEND: case ZERO_EXTEND: mark_loop_jump (XEXP (x, 0), loop_num); @@ -2788,21 +2793,21 @@ mark_loop_jump (x, loop_num) return; default: - /* Treat anything else (such as a symbol_ref) - as a branch out of this loop, but not into any loop. */ - + /* Strictly speaking this is not a jump into the loop, only a possible + jump out of the loop. However, we have no way to link the destination + of this jump onto the list of exit labels. To be safe we mark this + loop and any containing loops as invalid. */ if (loop_num != -1) { -#ifdef HAIFA - LABEL_OUTSIDE_LOOP_P (x) = 1; - LABEL_NEXTREF (x) = loop_number_exit_labels[loop_num]; -#endif /* HAIFA */ - - loop_number_exit_labels[loop_num] = x; - for (outer_loop = loop_num; outer_loop != -1; outer_loop = loop_outer_loop[outer_loop]) - loop_number_exit_count[outer_loop]++; + { + if (loop_dump_stream && ! loop_invalid[outer_loop]) + fprintf (loop_dump_stream, + "\nLoop at %d ignored due to unknown exit jump.\n", + INSN_UID (loop_number_loop_starts[outer_loop])); + loop_invalid[outer_loop] = 1; + } } return; }