Home | History | Annotate | Download | only in LoopDependenceAnalysis
      1 ; RUN: opt < %s -analyze -basicaa -lda | FileCheck %s
      2 
      3 @x = common global [256 x i32] zeroinitializer, align 4
      4 
      5 ;; x[5] = x[6]
      6 
      7 define void @f1(...) nounwind {
      8 entry:
      9   br label %for.body
     10 
     11 for.body:
     12   %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
     13   %x = load i32* getelementptr ([256 x i32]* @x, i32 0, i64 6)
     14   store i32 %x, i32* getelementptr ([256 x i32]* @x, i32 0, i64 5)
     15 ; CHECK: 0,1: ind
     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[c] = x[c+1] // with c being a loop-invariant constant
     25 
     26 define void @f2(i64 %c0) nounwind {
     27 entry:
     28   %c1 = add i64 %c0, 1
     29   %x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %c0
     30   %x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %c1
     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 
     46 ;; x[6] = x[6]
     47 
     48 define void @f3(...) nounwind {
     49 entry:
     50   br label %for.body
     51 
     52 for.body:
     53   %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
     54   %x = load i32* getelementptr ([256 x i32]* @x, i32 0, i64 6)
     55   store i32 %x, i32* getelementptr ([256 x i32]* @x, i32 0, i64 6)
     56 ; CHECK: 0,1: dep
     57   %i.next = add i64 %i, 1
     58   %exitcond = icmp eq i64 %i.next, 256
     59   br i1 %exitcond, label %for.end, label %for.body
     60 
     61 for.end:
     62   ret void
     63 }
     64