blob: 36ac15336d6a2c6d58c9be5e3a7b56bce0d4c972 [file] [log] [blame]
Dan Gohman8a977e22010-01-26 19:25:59 +00001; RUN: opt < %s -analyze -lda | FileCheck %s
Andreas Bolka0dcde102009-07-23 15:56:53 +00002
3@x = common global [256 x i32] zeroinitializer, align 4
4@y = common global [256 x i32] zeroinitializer, align 4
5
Andreas Bolka7b43f5c2009-07-28 23:40:40 +00006;; for (i = 0; i < 256; i++)
7;; x[i] = x[i] + y[i]
Andreas Bolka0dcde102009-07-23 15:56:53 +00008
9define void @f1(...) nounwind {
10entry:
11 br label %for.body
12
13for.body:
14 %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
15 %y.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
16 %x.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
17 %x = load i32* %x.addr ; 0
18 %y = load i32* %y.addr ; 1
19 %r = add i32 %y, %x
20 store i32 %r, i32* %x.addr ; 2
21; CHECK: 0,2: dep
22; CHECK: 1,2: ind
23 %i.next = add i64 %i, 1
24 %exitcond = icmp eq i64 %i.next, 256
25 br i1 %exitcond, label %for.end, label %for.body
26
27for.end:
28 ret void
29}
30
Andreas Bolka7b43f5c2009-07-28 23:40:40 +000031;; for (i = 0; i < 256; i++)
32;; x[i+1] = x[i] + y[i]
Andreas Bolka0dcde102009-07-23 15:56:53 +000033
34define void @f2(...) nounwind {
35entry:
36 br label %for.body
37
38for.body:
39 %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
40 %y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
41 %x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
42 %i.next = add i64 %i, 1
43 %x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.next
44 %x = load i32* %x.ld.addr ; 0
45 %y = load i32* %y.ld.addr ; 1
46 %r = add i32 %y, %x
47 store i32 %r, i32* %x.st.addr ; 2
48; CHECK: 0,2: dep
49; CHECK: 1,2: ind
50 %exitcond = icmp eq i64 %i.next, 256
51 br i1 %exitcond, label %for.end, label %for.body
52
53for.end:
54 ret void
55}
56
Andreas Bolka7b43f5c2009-07-28 23:40:40 +000057;; for (i = 0; i < 10; i++)
58;; x[i+20] = x[i] + y[i]
Andreas Bolka0dcde102009-07-23 15:56:53 +000059
60define void @f3(...) nounwind {
61entry:
62 br label %for.body
63
64for.body:
65 %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
66 %y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
67 %x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
68 %i.20 = add i64 %i, 20
69 %x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.20
70 %x = load i32* %x.ld.addr ; 0
71 %y = load i32* %y.ld.addr ; 1
72 %r = add i32 %y, %x
73 store i32 %r, i32* %x.st.addr ; 2
74; CHECK: 0,2: dep
75; CHECK: 1,2: ind
76 %i.next = add i64 %i, 1
Andreas Bolkabdab0e92009-08-07 15:42:32 +000077 %exitcond = icmp eq i64 %i.next, 10
Andreas Bolka0dcde102009-07-23 15:56:53 +000078 br i1 %exitcond, label %for.end, label %for.body
79
80for.end:
81 ret void
82}
Andreas Bolkae2652f22009-08-08 00:21:49 +000083
84;; for (i = 0; i < 10; i++)
85;; x[10*i+1] = x[10*i] + y[i]
86
87define void @f4(...) nounwind {
88entry:
89 br label %for.body
90
91for.body:
92 %i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
93 %i.10 = mul i64 %i, 10
94 %y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i.10
95 %x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.10
96 %i.10.1 = add i64 %i.10, 1
97 %x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.10.1
98 %x = load i32* %x.ld.addr ; 0
99 %y = load i32* %y.ld.addr ; 1
100 %r = add i32 %y, %x
101 store i32 %r, i32* %x.st.addr ; 2
102; CHECK: 0,2: dep
103; CHECK: 1,2: ind
104 %i.next = add i64 %i, 1
105 %exitcond = icmp eq i64 %i.next, 10
106 br i1 %exitcond, label %for.end, label %for.body
107
108for.end:
109 ret void
110}