On May 13, 2012, at 21:17, amyl...@spamcop.net wrote: > The expectation is wrap-around. Note that loop strenght reduction can > cause assumed wrap-around semantics in RTL for strictly conforming C input > where no such wrap-around is in evidence.
Really, we should define signed integer arithmetic in RTL to always be wrap-around. While there may (*) be some benefit in "taking advantage" of undefined semantics of integer overflow in early tree optimizers (computing number of loop iterations etc.), at the same time it also reduces optimization opportunities. Transformations cannot introduce overflows where none existed before, so integer addition and subtraction are not associative. In the end, the hardware is deterministic and does have wrap-around semantics. So, it really doesn't make sense to pretend in RTL that it doesn't. -Geert -- (*) At the end of the day, I think everybody would win by unambiguously defining signed integer arithmetic as using wrap-around semantics everywhere. Software is hard enough with defined semantics.