~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/BDCE/basic.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 -bdce -instsimplify < %s | FileCheck %s
 
2
; RUN: opt -S -instsimplify < %s | FileCheck %s -check-prefix=CHECK-IO
 
3
target datalayout = "E-m:e-i64:64-n32:64"
 
4
target triple = "powerpc64-unknown-linux-gnu"
 
5
 
 
6
; Function Attrs: nounwind readnone
 
7
define signext i32 @bar(i32 signext %x) #0 {
 
8
entry:
 
9
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
10
  %and = and i32 %call, 4
 
11
  %or = or i32 %and, %x
 
12
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
13
  %and2 = and i32 %call1, 8
 
14
  %or3 = or i32 %or, %and2
 
15
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
16
  %and5 = and i32 %call4, 16
 
17
  %or6 = or i32 %or3, %and5
 
18
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
19
  %and8 = and i32 %call7, 32
 
20
  %or9 = or i32 %or6, %and8
 
21
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
22
  %and11 = and i32 %call10, 64
 
23
  %or12 = or i32 %or9, %and11
 
24
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
25
  %and14 = and i32 %call13, 128
 
26
  %or15 = or i32 %or12, %and14
 
27
  %shr = ashr i32 %or15, 4
 
28
  ret i32 %shr
 
29
 
 
30
; CHECK-LABEL: @bar
 
31
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
32
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
33
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
34
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
35
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
36
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
37
; CHECK: ret i32
 
38
 
 
39
; Check that instsimplify is not doing this all on its own.
 
40
; CHECK-IO-LABEL: @bar
 
41
; CHECK-IO: tail call signext i32 @foo(i32 signext 5)
 
42
; CHECK-IO: tail call signext i32 @foo(i32 signext 3)
 
43
; CHECK-IO: tail call signext i32 @foo(i32 signext 2)
 
44
; CHECK-IO: tail call signext i32 @foo(i32 signext 1)
 
45
; CHECK-IO: tail call signext i32 @foo(i32 signext 0)
 
46
; CHECK-IO: tail call signext i32 @foo(i32 signext 4)
 
47
; CHECK-IO: ret i32
 
48
}
 
49
 
 
50
; Function Attrs: nounwind readnone
 
51
declare signext i32 @foo(i32 signext) #0
 
52
 
 
53
; Function Attrs: nounwind readnone
 
54
define signext i32 @far(i32 signext %x) #1 {
 
55
entry:
 
56
  %call = tail call signext i32 @goo(i32 signext 5) #1
 
57
  %and = and i32 %call, 4
 
58
  %or = or i32 %and, %x
 
59
  %call1 = tail call signext i32 @goo(i32 signext 3) #1
 
60
  %and2 = and i32 %call1, 8
 
61
  %or3 = or i32 %or, %and2
 
62
  %call4 = tail call signext i32 @goo(i32 signext 2) #1
 
63
  %and5 = and i32 %call4, 16
 
64
  %or6 = or i32 %or3, %and5
 
65
  %call7 = tail call signext i32 @goo(i32 signext 1) #1
 
66
  %and8 = and i32 %call7, 32
 
67
  %or9 = or i32 %or6, %and8
 
68
  %call10 = tail call signext i32 @goo(i32 signext 0) #1
 
69
  %and11 = and i32 %call10, 64
 
70
  %or12 = or i32 %or9, %and11
 
71
  %call13 = tail call signext i32 @goo(i32 signext 4) #1
 
72
  %and14 = and i32 %call13, 128
 
73
  %or15 = or i32 %or12, %and14
 
74
  %shr = ashr i32 %or15, 4
 
75
  ret i32 %shr
 
76
 
 
77
; CHECK-LABEL: @far
 
78
; Calls to foo(5) and foo(3) are still there, but their results are not used.
 
79
; CHECK: tail call signext i32 @goo(i32 signext 5)
 
80
; CHECK-NEXT: tail call signext i32 @goo(i32 signext 3)
 
81
; CHECK-NEXT: tail call signext i32 @goo(i32 signext 2)
 
82
; CHECK: tail call signext i32 @goo(i32 signext 1)
 
83
; CHECK: tail call signext i32 @goo(i32 signext 0)
 
84
; CHECK: tail call signext i32 @goo(i32 signext 4)
 
85
; CHECK: ret i32
 
86
 
 
87
; Check that instsimplify is not doing this all on its own.
 
88
; CHECK-IO-LABEL: @far
 
89
; CHECK-IO: tail call signext i32 @goo(i32 signext 5)
 
90
; CHECK-IO: tail call signext i32 @goo(i32 signext 3)
 
91
; CHECK-IO: tail call signext i32 @goo(i32 signext 2)
 
92
; CHECK-IO: tail call signext i32 @goo(i32 signext 1)
 
93
; CHECK-IO: tail call signext i32 @goo(i32 signext 0)
 
94
; CHECK-IO: tail call signext i32 @goo(i32 signext 4)
 
95
; CHECK-IO: ret i32
 
96
}
 
97
 
 
98
declare signext i32 @goo(i32 signext) #1
 
99
 
 
100
; Function Attrs: nounwind readnone
 
101
define signext i32 @tar1(i32 signext %x) #0 {
 
102
entry:
 
103
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
104
  %and = and i32 %call, 33554432
 
105
  %or = or i32 %and, %x
 
106
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
107
  %and2 = and i32 %call1, 67108864
 
108
  %or3 = or i32 %or, %and2
 
109
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
110
  %and5 = and i32 %call4, 16
 
111
  %or6 = or i32 %or3, %and5
 
112
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
113
  %and8 = and i32 %call7, 32
 
114
  %or9 = or i32 %or6, %and8
 
115
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
116
  %and11 = and i32 %call10, 64
 
117
  %or12 = or i32 %or9, %and11
 
118
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
119
  %and14 = and i32 %call13, 128
 
120
  %or15 = or i32 %or12, %and14
 
121
  %bs = tail call i32 @llvm.bswap.i32(i32 %or15) #0
 
122
  %shr = ashr i32 %bs, 4
 
123
  ret i32 %shr
 
124
 
 
125
; CHECK-LABEL: @tar1
 
126
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
127
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
128
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
129
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
130
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
131
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
132
; CHECK: ret i32
 
133
}
 
134
 
 
135
; Function Attrs: nounwind readnone
 
136
declare i32 @llvm.bswap.i32(i32) #0
 
137
 
 
138
; Function Attrs: nounwind readnone
 
139
define signext i32 @tar2(i32 signext %x) #0 {
 
140
entry:
 
141
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
142
  %and = and i32 %call, 33554432
 
143
  %or = or i32 %and, %x
 
144
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
145
  %and2 = and i32 %call1, 67108864
 
146
  %or3 = or i32 %or, %and2
 
147
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
148
  %and5 = and i32 %call4, 16
 
149
  %or6 = or i32 %or3, %and5
 
150
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
151
  %and8 = and i32 %call7, 32
 
152
  %or9 = or i32 %or6, %and8
 
153
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
154
  %and11 = and i32 %call10, 64
 
155
  %or12 = or i32 %or9, %and11
 
156
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
157
  %and14 = and i32 %call13, 128
 
158
  %or15 = or i32 %or12, %and14
 
159
  %shl = shl i32 %or15, 10
 
160
  ret i32 %shl
 
161
 
 
162
; CHECK-LABEL: @tar2
 
163
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
164
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
165
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
166
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
167
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
168
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
169
; CHECK: ret i32
 
170
}
 
171
 
 
172
; Function Attrs: nounwind readnone
 
173
define signext i32 @tar3(i32 signext %x) #0 {
 
174
entry:
 
175
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
176
  %and = and i32 %call, 33554432
 
177
  %or = or i32 %and, %x
 
178
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
179
  %and2 = and i32 %call1, 67108864
 
180
  %or3 = or i32 %or, %and2
 
181
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
182
  %and5 = and i32 %call4, 16
 
183
  %or6 = or i32 %or3, %and5
 
184
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
185
  %and8 = and i32 %call7, 32
 
186
  %or9 = or i32 %or6, %and8
 
187
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
188
  %and11 = and i32 %call10, 64
 
189
  %or12 = or i32 %or9, %and11
 
190
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
191
  %and14 = and i32 %call13, 128
 
192
  %or15 = or i32 %or12, %and14
 
193
  %add = add i32 %or15, 5
 
194
  %shl = shl i32 %add, 10
 
195
  ret i32 %shl
 
196
 
 
197
; CHECK-LABEL: @tar3
 
198
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
199
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
200
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
201
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
202
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
203
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
204
; CHECK: ret i32
 
205
}
 
206
 
 
207
; Function Attrs: nounwind readnone
 
208
define signext i32 @tar4(i32 signext %x) #0 {
 
209
entry:
 
210
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
211
  %and = and i32 %call, 33554432
 
212
  %or = or i32 %and, %x
 
213
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
214
  %and2 = and i32 %call1, 67108864
 
215
  %or3 = or i32 %or, %and2
 
216
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
217
  %and5 = and i32 %call4, 16
 
218
  %or6 = or i32 %or3, %and5
 
219
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
220
  %and8 = and i32 %call7, 32
 
221
  %or9 = or i32 %or6, %and8
 
222
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
223
  %and11 = and i32 %call10, 64
 
224
  %or12 = or i32 %or9, %and11
 
225
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
226
  %and14 = and i32 %call13, 128
 
227
  %or15 = or i32 %or12, %and14
 
228
  %sub = sub i32 %or15, 5
 
229
  %shl = shl i32 %sub, 10
 
230
  ret i32 %shl
 
231
 
 
232
; CHECK-LABEL: @tar4
 
233
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
234
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
235
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
236
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
237
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
238
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
239
; CHECK: ret i32
 
240
}
 
241
 
 
242
; Function Attrs: nounwind readnone
 
243
define signext i32 @tar5(i32 signext %x) #0 {
 
244
entry:
 
245
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
246
  %and = and i32 %call, 33554432
 
247
  %or = or i32 %and, %x
 
248
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
249
  %and2 = and i32 %call1, 67108864
 
250
  %or3 = or i32 %or, %and2
 
251
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
252
  %and5 = and i32 %call4, 16
 
253
  %or6 = or i32 %or3, %and5
 
254
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
255
  %and8 = and i32 %call7, 32
 
256
  %or9 = or i32 %or6, %and8
 
257
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
258
  %and11 = and i32 %call10, 64
 
259
  %or12 = or i32 %or9, %and11
 
260
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
261
  %and14 = and i32 %call13, 128
 
262
  %or15 = or i32 %or12, %and14
 
263
  %xor = xor i32 %or15, 5
 
264
  %shl = shl i32 %xor, 10
 
265
  ret i32 %shl
 
266
 
 
267
; CHECK-LABEL: @tar5
 
268
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
269
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
270
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
271
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
272
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
273
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
274
; CHECK: ret i32
 
275
}
 
276
 
 
277
; Function Attrs: nounwind readnone
 
278
define signext i32 @tar7(i32 signext %x, i1 %b) #0 {
 
279
entry:
 
280
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
281
  %and = and i32 %call, 33554432
 
282
  %or = or i32 %and, %x
 
283
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
284
  %and2 = and i32 %call1, 67108864
 
285
  %or3 = or i32 %or, %and2
 
286
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
287
  %and5 = and i32 %call4, 16
 
288
  %or6 = or i32 %or3, %and5
 
289
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
290
  %and8 = and i32 %call7, 32
 
291
  %or9 = or i32 %or6, %and8
 
292
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
293
  %and11 = and i32 %call10, 64
 
294
  %or12 = or i32 %or9, %and11
 
295
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
296
  %and14 = and i32 %call13, 128
 
297
  %or15 = or i32 %or12, %and14
 
298
  %v = select i1 %b, i32 %or15, i32 5
 
299
  %shl = shl i32 %v, 10
 
300
  ret i32 %shl
 
301
 
 
302
; CHECK-LABEL: @tar7
 
303
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
304
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
305
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
306
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
307
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
308
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
309
; CHECK: ret i32
 
310
}
 
311
 
 
312
; Function Attrs: nounwind readnone
 
313
define signext i16 @tar8(i32 signext %x) #0 {
 
314
entry:
 
315
  %call = tail call signext i32 @foo(i32 signext 5) #0
 
316
  %and = and i32 %call, 33554432
 
317
  %or = or i32 %and, %x
 
318
  %call1 = tail call signext i32 @foo(i32 signext 3) #0
 
319
  %and2 = and i32 %call1, 67108864
 
320
  %or3 = or i32 %or, %and2
 
321
  %call4 = tail call signext i32 @foo(i32 signext 2) #0
 
322
  %and5 = and i32 %call4, 16
 
323
  %or6 = or i32 %or3, %and5
 
324
  %call7 = tail call signext i32 @foo(i32 signext 1) #0
 
325
  %and8 = and i32 %call7, 32
 
326
  %or9 = or i32 %or6, %and8
 
327
  %call10 = tail call signext i32 @foo(i32 signext 0) #0
 
328
  %and11 = and i32 %call10, 64
 
329
  %or12 = or i32 %or9, %and11
 
330
  %call13 = tail call signext i32 @foo(i32 signext 4) #0
 
331
  %and14 = and i32 %call13, 128
 
332
  %or15 = or i32 %or12, %and14
 
333
  %tr = trunc i32 %or15 to i16
 
334
  ret i16 %tr
 
335
 
 
336
; CHECK-LABEL: @tar8
 
337
; CHECK-NOT: tail call signext i32 @foo(i32 signext 5)
 
338
; CHECK-NOT: tail call signext i32 @foo(i32 signext 3)
 
339
; CHECK: tail call signext i32 @foo(i32 signext 2)
 
340
; CHECK: tail call signext i32 @foo(i32 signext 1)
 
341
; CHECK: tail call signext i32 @foo(i32 signext 0)
 
342
; CHECK: tail call signext i32 @foo(i32 signext 4)
 
343
; CHECK: ret i16
 
344
}
 
345
 
 
346
attributes #0 = { nounwind readnone }
 
347
attributes #1 = { nounwind }
 
348