~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Analysis/DependenceAnalysis/WeakZeroDstSIV.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
 
2
 
 
3
; ModuleID = 'WeakZeroDstSIV.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
;;  for (long unsigned i = 0; i < 30; i++) {
 
9
;;    A[2*i + 10] = i;
 
10
;;    *B++ = A[10];
 
11
 
 
12
define void @weakzerodst0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
 
13
entry:
 
14
  br label %for.body
 
15
 
 
16
; CHECK: da analyze - none!
 
17
; CHECK: da analyze - flow [p<=|<]!
 
18
; CHECK: da analyze - confused!
 
19
; CHECK: da analyze - consistent input [S]!
 
20
; CHECK: da analyze - confused!
 
21
; CHECK: da analyze - none!
 
22
 
 
23
for.body:                                         ; preds = %entry, %for.body
 
24
  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
 
25
  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
 
26
  %conv = trunc i64 %i.02 to i32
 
27
  %mul = shl i64 %i.02, 1
 
28
  %add = add i64 %mul, 10
 
29
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
 
30
  store i32 %conv, i32* %arrayidx, align 4
 
31
  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
 
32
  %0 = load i32, i32* %arrayidx1, align 4
 
33
  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
 
34
  store i32 %0, i32* %B.addr.01, align 4
 
35
  %inc = add i64 %i.02, 1
 
36
  %exitcond = icmp ne i64 %inc, 30
 
37
  br i1 %exitcond, label %for.body, label %for.end
 
38
 
 
39
for.end:                                          ; preds = %for.body
 
40
  ret void
 
41
}
 
42
 
 
43
 
 
44
;;  for (long unsigned i = 0; i < n; i++) {
 
45
;;    A[n*i + 10] = i;
 
46
;;    *B++ = A[10];
 
47
 
 
48
define void @weakzerodst1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
 
49
entry:
 
50
  %cmp1 = icmp eq i64 %n, 0
 
51
  br i1 %cmp1, label %for.end, label %for.body.preheader
 
52
 
 
53
; CHECK: da analyze - none!
 
54
; CHECK: da analyze - flow [p<=|<]!
 
55
; CHECK: da analyze - confused!
 
56
; CHECK: da analyze - consistent input [S]!
 
57
; CHECK: da analyze - confused!
 
58
; CHECK: da analyze - none!
 
59
 
 
60
for.body.preheader:                               ; preds = %entry
 
61
  br label %for.body
 
62
 
 
63
for.body:                                         ; preds = %for.body.preheader, %for.body
 
64
  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
 
65
  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
 
66
  %conv = trunc i64 %i.03 to i32
 
67
  %mul = mul i64 %i.03, %n
 
68
  %add = add i64 %mul, 10
 
69
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
 
70
  store i32 %conv, i32* %arrayidx, align 4
 
71
  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
 
72
  %0 = load i32, i32* %arrayidx1, align 4
 
73
  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
 
74
  store i32 %0, i32* %B.addr.02, align 4
 
75
  %inc = add i64 %i.03, 1
 
76
  %exitcond = icmp ne i64 %inc, %n
 
77
  br i1 %exitcond, label %for.body, label %for.end.loopexit
 
78
 
 
79
for.end.loopexit:                                 ; preds = %for.body
 
80
  br label %for.end
 
81
 
 
82
for.end:                                          ; preds = %for.end.loopexit, %entry
 
83
  ret void
 
84
}
 
85
 
 
86
 
 
87
;;  for (long unsigned i = 0; i < 5; i++) {
 
88
;;    A[2*i] = i;
 
89
;;    *B++ = A[10];
 
90
 
 
91
define void @weakzerodst2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
 
92
entry:
 
93
  br label %for.body
 
94
 
 
95
; CHECK: da analyze - none!
 
96
; CHECK: da analyze - none!
 
97
; CHECK: da analyze - confused!
 
98
; CHECK: da analyze - consistent input [S]!
 
99
; CHECK: da analyze - confused!
 
100
; CHECK: da analyze - none!
 
101
 
 
102
for.body:                                         ; preds = %entry, %for.body
 
103
  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
 
104
  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
 
105
  %conv = trunc i64 %i.02 to i32
 
106
  %mul = shl i64 %i.02, 1
 
107
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
 
108
  store i32 %conv, i32* %arrayidx, align 4
 
109
  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
 
110
  %0 = load i32, i32* %arrayidx1, align 4
 
111
  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
 
112
  store i32 %0, i32* %B.addr.01, align 4
 
113
  %inc = add i64 %i.02, 1
 
114
  %exitcond = icmp ne i64 %inc, 5
 
115
  br i1 %exitcond, label %for.body, label %for.end
 
116
 
 
117
for.end:                                          ; preds = %for.body
 
118
  ret void
 
119
}
 
120
 
 
121
 
 
122
;;  for (long unsigned i = 0; i < 6; i++) {
 
123
;;    A[2*i] = i;
 
124
;;    *B++ = A[10];
 
125
 
 
126
define void @weakzerodst3(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
 
127
entry:
 
128
  br label %for.body
 
129
 
 
130
; CHECK: da analyze - none!
 
131
; CHECK: da analyze - flow [=>p|<]!
 
132
; CHECK: da analyze - confused!
 
133
; CHECK: da analyze - consistent input [S]!
 
134
; CHECK: da analyze - confused!
 
135
; CHECK: da analyze - none!
 
136
 
 
137
for.body:                                         ; preds = %entry, %for.body
 
138
  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
 
139
  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
 
140
  %conv = trunc i64 %i.02 to i32
 
141
  %mul = shl i64 %i.02, 1
 
142
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
 
143
  store i32 %conv, i32* %arrayidx, align 4
 
144
  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
 
145
  %0 = load i32, i32* %arrayidx1, align 4
 
146
  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
 
147
  store i32 %0, i32* %B.addr.01, align 4
 
148
  %inc = add i64 %i.02, 1
 
149
  %exitcond = icmp ne i64 %inc, 6
 
150
  br i1 %exitcond, label %for.body, label %for.end
 
151
 
 
152
for.end:                                          ; preds = %for.body
 
153
  ret void
 
154
}
 
155
 
 
156
 
 
157
;;  for (long unsigned i = 0; i < 7; i++) {
 
158
;;    A[2*i] = i;
 
159
;;    *B++ = A[10];
 
160
 
 
161
define void @weakzerodst4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
 
162
entry:
 
163
  br label %for.body
 
164
 
 
165
; CHECK: da analyze - none!
 
166
; CHECK: da analyze - flow [*|<]!
 
167
; CHECK: da analyze - confused!
 
168
; CHECK: da analyze - consistent input [S]!
 
169
; CHECK: da analyze - confused!
 
170
; CHECK: da analyze - none!
 
171
 
 
172
for.body:                                         ; preds = %entry, %for.body
 
173
  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
 
174
  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
 
175
  %conv = trunc i64 %i.02 to i32
 
176
  %mul = shl i64 %i.02, 1
 
177
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
 
178
  store i32 %conv, i32* %arrayidx, align 4
 
179
  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
 
180
  %0 = load i32, i32* %arrayidx1, align 4
 
181
  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
 
182
  store i32 %0, i32* %B.addr.01, align 4
 
183
  %inc = add i64 %i.02, 1
 
184
  %exitcond = icmp ne i64 %inc, 7
 
185
  br i1 %exitcond, label %for.body, label %for.end
 
186
 
 
187
for.end:                                          ; preds = %for.body
 
188
  ret void
 
189
}
 
190
 
 
191
 
 
192
;;  for (long unsigned i = 0; i < 7; i++) {
 
193
;;    A[2*i] = i;
 
194
;;    *B++ = A[-10];
 
195
 
 
196
define void @weakzerodst5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
 
197
entry:
 
198
  br label %for.body
 
199
 
 
200
; CHECK: da analyze - none!
 
201
; CHECK: da analyze - none!
 
202
; CHECK: da analyze - confused!
 
203
; CHECK: da analyze - consistent input [S]!
 
204
; CHECK: da analyze - confused!
 
205
; CHECK: da analyze - none!
 
206
 
 
207
for.body:                                         ; preds = %entry, %for.body
 
208
  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
 
209
  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
 
210
  %conv = trunc i64 %i.02 to i32
 
211
  %mul = shl i64 %i.02, 1
 
212
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
 
213
  store i32 %conv, i32* %arrayidx, align 4
 
214
  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 -10
 
215
  %0 = load i32, i32* %arrayidx1, align 4
 
216
  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
 
217
  store i32 %0, i32* %B.addr.01, align 4
 
218
  %inc = add i64 %i.02, 1
 
219
  %exitcond = icmp ne i64 %inc, 7
 
220
  br i1 %exitcond, label %for.body, label %for.end
 
221
 
 
222
for.end:                                          ; preds = %for.body
 
223
  ret void
 
224
}
 
225
 
 
226
 
 
227
;;  for (long unsigned i = 0; i < n; i++) {
 
228
;;    A[3*i] = i;
 
229
;;    *B++ = A[10];
 
230
 
 
231
define void @weakzerodst6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
 
232
entry:
 
233
  %cmp1 = icmp eq i64 %n, 0
 
234
  br i1 %cmp1, label %for.end, label %for.body.preheader
 
235
 
 
236
; CHECK: da analyze - none!
 
237
; CHECK: da analyze - none!
 
238
; CHECK: da analyze - confused!
 
239
; CHECK: da analyze - consistent input [S]!
 
240
; CHECK: da analyze - confused!
 
241
; CHECK: da analyze - none!
 
242
 
 
243
for.body.preheader:                               ; preds = %entry
 
244
  br label %for.body
 
245
 
 
246
for.body:                                         ; preds = %for.body.preheader, %for.body
 
247
  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
 
248
  %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
 
249
  %conv = trunc i64 %i.03 to i32
 
250
  %mul = mul i64 %i.03, 3
 
251
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
 
252
  store i32 %conv, i32* %arrayidx, align 4
 
253
  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 10
 
254
  %0 = load i32, i32* %arrayidx1, align 4
 
255
  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
 
256
  store i32 %0, i32* %B.addr.02, align 4
 
257
  %inc = add i64 %i.03, 1
 
258
  %exitcond = icmp ne i64 %inc, %n
 
259
  br i1 %exitcond, label %for.body, label %for.end.loopexit
 
260
 
 
261
for.end.loopexit:                                 ; preds = %for.body
 
262
  br label %for.end
 
263
 
 
264
for.end:                                          ; preds = %for.end.loopexit, %entry
 
265
  ret void
 
266
}