[llvm-dev] Dependence analysis - missing loop-carried dependencies?
Shaun Steenkamp via llvm-dev
llvm-dev at lists.llvm.org
Wed Aug 9 05:33:37 PDT 2017
On 3 August 2017 at 15:57, Shaun Steenkamp <shauncs.s at gmail.com> wrote:
> I'm trying to do some (loop-carried) dependence analysis using LLVM, but
> I'm confused by the results I'm getting. For example, consider this simple
> C program:
> int main(){
> for (int i = 0; i < 10; ++i) {
> }
> return 0;
> }
> I would expect that the loop comparison depends on the loop initialisation
> and the loop update, however I only see a dependence to the loop
> initialisation.
> %3 = load i32, i32* %i, align 4 ---> store i32 0, i32* %i, align 4
> I don't see a dependence to `store i32 %8, i32* %i, align 4` as I would
> have expected. Am I misunderstanding the dependence analysis or doing
> something wrong?
For the archives (in case someone stumbles upon this via google):
I was getting confusing results because I foolishly was forgetting to
run a lot of basic/essential LLVM passes.
Running with
opt -disable-inlining -mem2reg -loop-simplify -loop-rotate
-simplifycfg -instcombine -indvars
gave good results for a loop like this:
int A[11];
for (int i = 0; i < 10; ++i) {
A[i+1] = A[i];
}
I have since found that Polly [1] is much more suitable for my needs,
so I'm now using that instead.
Shaun
[1]: https://polly.llvm.org/
More information about the llvm-dev
mailing list