From c4ae272555de2b9872514f6f73e63ba6c51765eb Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Mon, 15 Feb 1999 03:37:22 -0700 Subject: [PATCH] loop.c (mark_loop_jump): Handle LO_SUM. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit � * 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: r25215 --- gcc/loop.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/gcc/loop.c b/gcc/loop.c index 3c8e890e5c2..3ea975164f0 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -2981,6 +2981,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); @@ -3068,21 +3073,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 HAVE_decrement_and_branch_on_count - LABEL_OUTSIDE_LOOP_P (x) = 1; - LABEL_NEXTREF (x) = loop_number_exit_labels[loop_num]; -#endif /* HAVE_decrement_and_branch_on_count */ - - 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; } -- 2.30.2