Problem with LoopDependenceAnalysis


I am using LLVM for implementing LoopFission pass.
I am using LoopPass.
I know that for checking circular dependency in loop I have to use LoopDependenceAnalysis

This is what i want to do.
for(int i = 0; i< n ; i++){

s1 :                 a[i] = a[i] + x[i];
s2 :                 x[i] = x[i+1] + i*2 ;

/**there is no dependence from s2 to s1/
so after distribution(it should be) :

        for(int i = 0; i< n ; i++)
s1:                a[i] = a[i] + x[i];

        for(int i = 0; i< n ; i++)
s2:                x[i] = x[i+1] + i*2 ;

but in llvm i couldn't able to find there is no dependency from s2 to s1.
LoopDependenceAnalyis always gives there is a dependency from every load instructions to every store instructions.

is there any other alternative to LoopDependencyAnalysis ?
thank you

Shanmukha Rao
Compilers lab,
Indian Institute of Science, Bangalore.

Hi, did you do this on optimized IR? These kind of analyses only do a decent
job if at least a basic set of optimizations has been applied.

Ciao, Duncan.

thank you all for ur replies…

I looked at the sanjoys patch for SIV Test. And i figured out that this is exactly what i need.
as the comments said, check if subscript A can possibly have the same value as B in analyseSIV(A,B)
but i didn’t get How to use this information ?

lets just say in the above program
When i use depends function it shows the dependency from load of x to store in x. similarily for array a.
but how can i be sure that there is no dependence from store of x to load of x in the next iteration ?