Thu Aug 27 20:10:46 1998 Jeffrey A Law (law@cygnus.com)
+ * loop.c (check_dbra_loop): The loop ending comparison value
+ must be an invariant or we can not reverse the loop.
+
* loop.c (scan_loop): Count down from max_reg_num - 1 to
FIRST_PSEUDO_REGISTER to avoid calling max_reg_num each iteration
of the loop.
comparison_sign_mask
= (unsigned HOST_WIDE_INT)1 << (comparison_const_width - 1);
+ /* If the comparison value is not a loop invariant, then we
+ can not reverse this loop.
+
+ ??? If the insns which initialize the comparison value as
+ a whole compute an invariant result, then we could move
+ them out of the loop and proceed with loop reversal. */
+ if (!invariant_p (comparison_val))
+ return 0;
+
if (GET_CODE (comparison_value) == CONST_INT)
comparison_val = INTVAL (comparison_value);
initial_value = bl->initial_value;