On Wed, 25 Nov 2015, Jakub Jelinek wrote: > On Wed, Nov 25, 2015 at 09:58:15AM +0100, Marc Glisse wrote: > > I guess it got lost in my text, but if a user writes: > > > > unsigned diff = a - b; > > if (b > a) { /* overflow */ ... } > > else { ... } > > > > Your patch will not detect it. It seems that replacing x-y>x with y>x could > > Sorry, already committed the patch (without incremental that hasn't been > tested anyway). > It is true that the patch does not detect this, but it is harder that way. > What if it is > if (b > a) ... > // Huge amount of code > r = a - b; > ? Trying to emit the subtraction above the comparison would then very > likely increase register preassure. So, I'd really prefer doing x-y>x to y>x > only for single use.
I think that's ok for now. For the above case you'd need to do sth similar to what cse sincos / divmod do, with an added "cost" check (same basic-block?). Richard.