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