On Mon, Feb 26, 2024 at 03:15:02PM +0100, Richard Biener wrote:
> When folding a multiply CHRECs are handled like {a, +, b} * c
> is {a*c, +, b*c} but that isn't generally correct when overflow
> invokes undefined behavior. The following uses unsigned arithmetic
> unless either a is zero or a and b have the same sign.
>
> I've used simple early outs for INTEGER_CSTs and otherwise use
> a range-query since we lack a tree_expr_nonpositive_p.
What about testing
(get_range_pos_neg (CHREC_LEFT (op0))
| get_range_pos_neg (CHREC_RIGHT (op0))) != 3
?
Jakub