dependence analysis
[oota-llvm.git] / test / Analysis / DependenceAnalysis / ZIV.ll
1 ; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3 ; ModuleID = 'ZIV.bc'
4 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
5 target triple = "x86_64-apple-macosx10.6.0"
6
7
8 ;;  A[n + 1] = ...
9 ;;  ... = A[1 + n];
10
11 define void @z0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
12 entry:
13   %add = add i64 %n, 1
14   %arrayidx = getelementptr inbounds i32* %A, i64 %add
15   store i32 0, i32* %arrayidx, align 4
16   %add1 = add i64 %n, 1
17   %arrayidx2 = getelementptr inbounds i32* %A, i64 %add1
18   %0 = load i32* %arrayidx2, align 4
19 ; CHECK: da analyze - consistent flow!
20   store i32 %0, i32* %B, align 4
21   ret void
22 }
23
24
25 ;;  A[n] = ...
26 ;;  ... = A[n + 1];
27
28 define void @z1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
29 entry:
30   %arrayidx = getelementptr inbounds i32* %A, i64 %n
31   store i32 0, i32* %arrayidx, align 4
32   %add = add i64 %n, 1
33   %arrayidx1 = getelementptr inbounds i32* %A, i64 %add
34   %0 = load i32* %arrayidx1, align 4
35 ; CHECK: da analyze - none!
36   store i32 %0, i32* %B, align 4
37   ret void
38 }
39
40
41 ;;  A[n] = ...
42 ;;  ... = A[m];
43
44 define void @z2(i32* %A, i32* %B, i64 %n, i64 %m) nounwind uwtable ssp {
45 entry:
46   %arrayidx = getelementptr inbounds i32* %A, i64 %n
47   store i32 0, i32* %arrayidx, align 4
48   %arrayidx1 = getelementptr inbounds i32* %A, i64 %m
49   %0 = load i32* %arrayidx1, align 4
50 ; CHECK: da analyze - flow!
51   store i32 %0, i32* %B, align 4
52   ret void
53 }