[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