From 668d07befc13d7c751f0b3266eed899766c8f709 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Tue, 7 Apr 1998 12:00:13 +0000 Subject: [PATCH] Fix loop reversal bug reported by Joern Rennecke. * loop.c (check_dbra_loop): When normalize comparison_val, add check to verify it is non-negative. From-SVN: r19030 --- gcc/ChangeLog | 5 +++++ gcc/loop.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3f87f3f66a1..58ec0effa89 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Tue Apr 7 11:58:04 1998 Jim Wilson + + * loop.c (check_dbra_loop): When normalize comparison_val, add check + to verify it is non-negative. + Tue Apr 7 02:01:47 1998 Richard Henderson * alpha.c (alpha_expand_block_move): Correctly collect block offsets. diff --git a/gcc/loop.c b/gcc/loop.c index d46ca648834..a3f7a8f59bc 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -6281,7 +6281,10 @@ check_dbra_loop (loop_end, insn_count, loop_start) && GET_CODE (initial_value) == CONST_INT) { comparison_val = comparison_val - INTVAL (bl->initial_value); - initial_value = const0_rtx; + /* Check for overflow. If comparison_val ends up as a + negative value, then we can't reverse the loop. */ + if (comparison_val >= 0) + initial_value = const0_rtx; } /* If the initial value is not zero, or if the comparison -- 2.30.2