Simplification of relational expressions

Andrew Haley aph@redhat.com
Wed Jun 4 11:55:00 GMT 2008


John Fine wrote:
> Andrew Haley wrote:
>> Chris Thiel wrote
>>> Is there a reason that the equality and inequality expressions (and only
>>> those expressions) are simplified?  I understand that signed integer
>>> overflow is undefined.

>> I'm more than a little mystified by this question.  Unless the target is
>> using something truly weird like saturating arithmetic we can always
>> guarantee that a+1 != a, but we cannot guarantee that a+1 > a.

> The optimizer is always allowed to know the behaviors that result in
> THIS compiler from undefined behavior.  If the optimizer can predict the
> run time answer with complete certainty, it can use that answer.

Yes.

> You could create a compiler with saturating arithmetic, so the most
> positive integer plus one is still the most positive integer.  Then the
> optimizer of THAT compiler could safely assume a+1 >= a but couldn't
> assume a+1>a nor a+1!=a.

Yes.

> But for THIS compiler the most positive integer plus one is the most
> negative integer.   The compiler knows that even though the standard
> doesn't know it and a well written program shouldn't know it.  So THIS
> compiler can assume a+1!=a.

Which it is doing.  What, then, is your point?

Andrew.



More information about the Gcc-help mailing list