Home | History | Annotate | Download | only in LoopDependenceAnalysis
      1 ; RUN: opt < %s -analyze -basicaa -lda | FileCheck %s
      2 
      3 ;; x[5] = x[6] // with x being a pointer passed as argument
      4 
      5 define void @f1(i32* nocapture %xptr) nounwind {
      6 entry:
      7   %x.ld.addr = getelementptr i32* %xptr, i64 6
      8   %x.st.addr = getelementptr i32* %xptr, i64 5
      9   br label %for.body
     10 
     11 for.body:
     12   %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
     13   %x = load i32* %x.ld.addr
     14   store i32 %x, i32* %x.st.addr
     15 ; CHECK: 0,1: dep
     16   %i.next = add i64 %i, 1
     17   %exitcond = icmp eq i64 %i.next, 256
     18   br i1 %exitcond, label %for.end, label %for.body
     19 
     20 for.end:
     21   ret void
     22 }
     23 
     24 ;; x[5] = x[6] // with x being an array on the stack
     25 
     26 define void @foo(...) nounwind {
     27 entry:
     28   %xptr = alloca [256 x i32], align 4
     29   %x.ld.addr = getelementptr [256 x i32]* %xptr, i64 0, i64 6
     30   %x.st.addr = getelementptr [256 x i32]* %xptr, i64 0, i64 5
     31   br label %for.body
     32 
     33 for.body:
     34   %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
     35   %x = load i32* %x.ld.addr
     36   store i32 %x, i32* %x.st.addr
     37 ; CHECK: 0,1: ind
     38   %i.next = add i64 %i, 1
     39   %exitcond = icmp eq i64 %i.next, 256
     40   br i1 %exitcond, label %for.end, label %for.body
     41 
     42 for.end:
     43   ret void
     44 }
     45