Scalar Evolution Analysis


I have the following code as an example:
int j=-1;
for (int i = 0; i < 100; ++i)
if (c[i] > 0.) {
e[j] = d[i];
} }

How can I use LLVM’s existing SCEV module to infer that e[j] could be consecutive if consecutive iterations’ conditions are true?



Maybe llvm::PredicatedScalarEvolution is the one you’re looking for.
IIRC, it was created for loop versioning, so it might insert some runtime checks.


I don’t believe we have any good way to model a conditionally incremented induction variable when the condition is loop varying and data dependent. This is not exactly a common or interesting case.

Just out of curiosity, what do you expect to be able to do with this loop optimization wise? We could maybe vectorize if we had bounds information on ‘c’, but that’s about all I see here.