[llvm-dev] Regarding ScalarEvolution's loop backedge computation
Chawla, Pankaj via llvm-dev
llvm-dev at lists.llvm.org
Wed Jun 29 15:48:12 PDT 2016
Hi,
It looks like ScalarEvolution bails out of loop backedge computation if it cannot prove the IV stride as either positive or negative (based on loop control condition). I think this logic can be refined for signed IVs.
Consider this simple loop-
void foo(int *A, int n, int s) {
int i;
for(i=0; i<n; i += s) {
A[i]++;
}
}
The IV of this loop has this SCEV form-
{0,+,%s}<nsw><%for.body>
Can someone please clarify why it is not ok to deduce the stride to be positive based on the assumption that the IV cannot have a signed underflow due to the presence of the NSW flag otherwise the program has undefined behavior?
Thanks,
Pankaj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160629/10545176/attachment.html>
More information about the llvm-dev
mailing list