Robert Kennedy wrote:
> 2007-01-04 Robert Kennedy <jimbob@google.com>
> * fold-const.c (fold_comparison): Fold comparisons like (x *
> 1000 < 0) to (x < 0).
> * fold-compare-2.c: New test case for fold_comparison.
> + /* Transform comparisons of the form X * C1 CMP 0 to X CMP 0 in the
> + signed arithmetic case. That form is created by the compiler
> + often enough for folding it to be of value. One example is in
> + computing loop trip counts after Operator Strength Reduction. */
> + if (!(flag_wrapv || flag_trapv)
> + && !TYPE_UNSIGNED (TREE_TYPE (arg0))
> + && TREE_CODE (arg0) == MULT_EXPR
> + && (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
> + && !TREE_OVERFLOW (TREE_OPERAND (arg0, 1)))
> + && integer_zerop (arg1))
> + {
> + tree const1 = TREE_OPERAND (arg0, 1);
Would you please add:
gcc_assert (!integer_zerop (const1))
?
I'm assuming that you know at this point const1 can never be zero,
because of something somewhere else in this function or in the compiler,
as otherwise the optimization would of course be invalid.