De-pessimize ScalarEvolution's handling of nsw/nuw?
Sanjoy Das
sanjoy at playingwithpointers.com
Mon Dec 15 21:41:34 PST 2014
Re-reading what I just sent, a clarification: I think "another
non-control-equivalent instruction *with* nsw/nuw can be mapped to the
same expression" is irrelevant; and the rationale really is about
scev's not remembering control dependence information.
On Mon, Dec 15, 2014 at 9:25 PM, Sanjoy Das
<sanjoy at playingwithpointers.com> wrote:
>> The comments in the source code say that ScalarEvolution does not
>> apply an instruction's nsw/nuw flags to the corresponding SCEV
>> expression because another non-control-equivalent instruction without
>> nsw/nuw can be mapped to the same expression.
>
> I think the problem is that another non-control-equivalent instruction
> *with* nsw/nuw can be mapped to the same expression and you may end up
> introducing nsw / nuw operations in paths that didn't have any to
> begin with. IOW since you "forget" the control dependence when
> translating a value to a scev, you cannot rematerialize or reason
> about the scev in arbitrary points in your program if the scev has
> potential to introduce UB.
>
> Having said that, I don't fully understand poison and LLVM's
> overflowing semantics; and it may be that it is possible to justify
> mapping nsw binary ops to nsw scevs under certain conditions or
> maybe even always. But it is not something that is obviously true.
>
> -- Sanjoy
More information about the llvm-commits
mailing list