1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1
2
; RUN: llc -verify-machineinstrs < %s | FileCheck %s
2
3
target datalayout = "E-m:e-p:32:32-i128:64-n32"
3
4
target triple = "powerpc-ellcc-linux"
4
5
5
6
; Function Attrs: nounwind
6
7
define void @foo1 (ptr %a , ptr readonly %b , ptr readonly %c ) #0 {
8
+ ; CHECK-LABEL: foo1:
9
+ ; CHECK: # %bb.0: # %entry
10
+ ; CHECK-NEXT: stwu 1, -48(1)
11
+ ; CHECK-NEXT: li 6, 2048
12
+ ; CHECK-NEXT: li 7, 0
13
+ ; CHECK-NEXT: stw 24, 16(1) # 4-byte Folded Spill
14
+ ; CHECK-NEXT: stw 25, 20(1) # 4-byte Folded Spill
15
+ ; CHECK-NEXT: stw 26, 24(1) # 4-byte Folded Spill
16
+ ; CHECK-NEXT: stw 27, 28(1) # 4-byte Folded Spill
17
+ ; CHECK-NEXT: stw 28, 32(1) # 4-byte Folded Spill
18
+ ; CHECK-NEXT: stw 29, 36(1) # 4-byte Folded Spill
19
+ ; CHECK-NEXT: stw 30, 40(1) # 4-byte Folded Spill
20
+ ; CHECK-NEXT: .LBB0_1: # %for.body
21
+ ; CHECK-NEXT: #
22
+ ; CHECK-NEXT: lwz 10, 12(5)
23
+ ; CHECK-NEXT: addi 6, 6, -1
24
+ ; CHECK-NEXT: lwz 12, 12(4)
25
+ ; CHECK-NEXT: lwz 11, 8(4)
26
+ ; CHECK-NEXT: subfic 0, 10, 96
27
+ ; CHECK-NEXT: lwz 8, 4(4)
28
+ ; CHECK-NEXT: addi 30, 10, -64
29
+ ; CHECK-NEXT: lwz 9, 0(4)
30
+ ; CHECK-NEXT: cmplwi 10, 64
31
+ ; CHECK-NEXT: slw 25, 12, 10
32
+ ; CHECK-NEXT: addi 29, 10, -96
33
+ ; CHECK-NEXT: subfic 27, 10, 32
34
+ ; CHECK-NEXT: srw 0, 12, 0
35
+ ; CHECK-NEXT: slw 24, 11, 30
36
+ ; CHECK-NEXT: bc 12, 0, .LBB0_3
37
+ ; CHECK-NEXT: # %bb.2: # %for.body
38
+ ; CHECK-NEXT: #
39
+ ; CHECK-NEXT: ori 25, 7, 0
40
+ ; CHECK-NEXT: b .LBB0_3
41
+ ; CHECK-NEXT: .LBB0_3: # %for.body
42
+ ; CHECK-NEXT: #
43
+ ; CHECK-NEXT: slw 28, 9, 10
44
+ ; CHECK-NEXT: or 0, 24, 0
45
+ ; CHECK-NEXT: srw 24, 8, 27
46
+ ; CHECK-NEXT: stw 25, 12(3)
47
+ ; CHECK-NEXT: subfic 25, 10, 64
48
+ ; CHECK-NEXT: slw 29, 12, 29
49
+ ; CHECK-NEXT: slw 26, 11, 10
50
+ ; CHECK-NEXT: or 28, 28, 24
51
+ ; CHECK-NEXT: srw 24, 12, 27
52
+ ; CHECK-NEXT: or 29, 0, 29
53
+ ; CHECK-NEXT: subfic 0, 25, 32
54
+ ; CHECK-NEXT: or 26, 26, 24
55
+ ; CHECK-NEXT: addi 24, 10, -32
56
+ ; CHECK-NEXT: srw 27, 11, 27
57
+ ; CHECK-NEXT: slw 0, 11, 0
58
+ ; CHECK-NEXT: srw 11, 11, 25
59
+ ; CHECK-NEXT: srw 25, 12, 25
60
+ ; CHECK-NEXT: slw 30, 12, 30
61
+ ; CHECK-NEXT: slw 12, 12, 24
62
+ ; CHECK-NEXT: slw 24, 8, 24
63
+ ; CHECK-NEXT: or 0, 25, 0
64
+ ; CHECK-NEXT: or 28, 28, 24
65
+ ; CHECK-NEXT: cmplwi 1, 10, 0
66
+ ; CHECK-NEXT: slw 10, 8, 10
67
+ ; CHECK-NEXT: or 0, 0, 27
68
+ ; CHECK-NEXT: or 11, 28, 11
69
+ ; CHECK-NEXT: or 10, 10, 0
70
+ ; CHECK-NEXT: or 12, 26, 12
71
+ ; CHECK-NEXT: bc 12, 0, .LBB0_5
72
+ ; CHECK-NEXT: # %bb.4: # %for.body
73
+ ; CHECK-NEXT: #
74
+ ; CHECK-NEXT: ori 11, 29, 0
75
+ ; CHECK-NEXT: ori 10, 30, 0
76
+ ; CHECK-NEXT: ori 12, 7, 0
77
+ ; CHECK-NEXT: b .LBB0_5
78
+ ; CHECK-NEXT: .LBB0_5: # %for.body
79
+ ; CHECK-NEXT: #
80
+ ; CHECK-NEXT: cmplwi 6, 0
81
+ ; CHECK-NEXT: bc 12, 6, .LBB0_7
82
+ ; CHECK-NEXT: # %bb.6: # %for.body
83
+ ; CHECK-NEXT: #
84
+ ; CHECK-NEXT: ori 9, 11, 0
85
+ ; CHECK-NEXT: ori 8, 10, 0
86
+ ; CHECK-NEXT: b .LBB0_7
87
+ ; CHECK-NEXT: .LBB0_7: # %for.body
88
+ ; CHECK-NEXT: #
89
+ ; CHECK-NEXT: stw 12, 8(3)
90
+ ; CHECK-NEXT: stw 9, 0(3)
91
+ ; CHECK-NEXT: stw 8, 4(3)
92
+ ; CHECK-NEXT: bne 0, .LBB0_1
93
+ ; CHECK-NEXT: # %bb.8: # %for.end
94
+ ; CHECK-NEXT: lwz 30, 40(1) # 4-byte Folded Reload
95
+ ; CHECK-NEXT: lwz 29, 36(1) # 4-byte Folded Reload
96
+ ; CHECK-NEXT: lwz 28, 32(1) # 4-byte Folded Reload
97
+ ; CHECK-NEXT: lwz 27, 28(1) # 4-byte Folded Reload
98
+ ; CHECK-NEXT: lwz 26, 24(1) # 4-byte Folded Reload
99
+ ; CHECK-NEXT: lwz 25, 20(1) # 4-byte Folded Reload
100
+ ; CHECK-NEXT: lwz 24, 16(1) # 4-byte Folded Reload
101
+ ; CHECK-NEXT: addi 1, 1, 48
102
+ ; CHECK-NEXT: blr
7
103
entry:
8
104
br label %for.body
9
105
@@ -19,13 +115,121 @@ for.body: ; preds = %for.body, %entry
19
115
20
116
for.end: ; preds = %for.body
21
117
ret void
22
-
23
- ; CHECK-LABEL: @foo1
24
- ; CHECK-NOT: mtctr
25
118
}
26
119
27
120
; Function Attrs: nounwind
28
121
define void @foo2 (ptr %a , ptr readonly %b , ptr readonly %c ) #0 {
122
+ ; CHECK-LABEL: foo2:
123
+ ; CHECK: # %bb.0: # %entry
124
+ ; CHECK-NEXT: stwu 1, -48(1)
125
+ ; CHECK-NEXT: li 6, 2048
126
+ ; CHECK-NEXT: stw 23, 12(1) # 4-byte Folded Spill
127
+ ; CHECK-NEXT: stw 24, 16(1) # 4-byte Folded Spill
128
+ ; CHECK-NEXT: stw 25, 20(1) # 4-byte Folded Spill
129
+ ; CHECK-NEXT: stw 26, 24(1) # 4-byte Folded Spill
130
+ ; CHECK-NEXT: stw 27, 28(1) # 4-byte Folded Spill
131
+ ; CHECK-NEXT: stw 28, 32(1) # 4-byte Folded Spill
132
+ ; CHECK-NEXT: stw 29, 36(1) # 4-byte Folded Spill
133
+ ; CHECK-NEXT: stw 30, 40(1) # 4-byte Folded Spill
134
+ ; CHECK-NEXT: .LBB1_1: # %for.body
135
+ ; CHECK-NEXT: #
136
+ ; CHECK-NEXT: lwz 9, 12(5)
137
+ ; CHECK-NEXT: addi 6, 6, -1
138
+ ; CHECK-NEXT: lwz 10, 4(4)
139
+ ; CHECK-NEXT: lwz 11, 0(4)
140
+ ; CHECK-NEXT: subfic 12, 9, 96
141
+ ; CHECK-NEXT: lwz 7, 8(4)
142
+ ; CHECK-NEXT: addi 0, 9, -64
143
+ ; CHECK-NEXT: lwz 8, 12(4)
144
+ ; CHECK-NEXT: subfic 28, 9, 32
145
+ ; CHECK-NEXT: slw 12, 11, 12
146
+ ; CHECK-NEXT: srw 24, 10, 0
147
+ ; CHECK-NEXT: srw 29, 8, 9
148
+ ; CHECK-NEXT: or 12, 24, 12
149
+ ; CHECK-NEXT: slw 24, 7, 28
150
+ ; CHECK-NEXT: srw 26, 10, 9
151
+ ; CHECK-NEXT: or 29, 29, 24
152
+ ; CHECK-NEXT: slw 24, 11, 28
153
+ ; CHECK-NEXT: cmplwi 9, 64
154
+ ; CHECK-NEXT: srawi 25, 11, 31
155
+ ; CHECK-NEXT: or 26, 26, 24
156
+ ; CHECK-NEXT: sraw 24, 11, 9
157
+ ; CHECK-NEXT: addi 30, 9, -96
158
+ ; CHECK-NEXT: bc 12, 0, .LBB1_3
159
+ ; CHECK-NEXT: # %bb.2: # %for.body
160
+ ; CHECK-NEXT: #
161
+ ; CHECK-NEXT: ori 24, 25, 0
162
+ ; CHECK-NEXT: b .LBB1_3
163
+ ; CHECK-NEXT: .LBB1_3: # %for.body
164
+ ; CHECK-NEXT: #
165
+ ; CHECK-NEXT: cmpwi 1, 30, 1
166
+ ; CHECK-NEXT: sraw 30, 11, 30
167
+ ; CHECK-NEXT: stw 24, 0(3)
168
+ ; CHECK-NEXT: subfic 24, 9, 64
169
+ ; CHECK-NEXT: addi 27, 9, -32
170
+ ; CHECK-NEXT: bc 12, 4, .LBB1_5
171
+ ; CHECK-NEXT: # %bb.4: # %for.body
172
+ ; CHECK-NEXT: #
173
+ ; CHECK-NEXT: ori 12, 30, 0
174
+ ; CHECK-NEXT: b .LBB1_5
175
+ ; CHECK-NEXT: .LBB1_5: # %for.body
176
+ ; CHECK-NEXT: #
177
+ ; CHECK-NEXT: subfic 30, 24, 32
178
+ ; CHECK-NEXT: slw 28, 10, 28
179
+ ; CHECK-NEXT: srw 30, 10, 30
180
+ ; CHECK-NEXT: slw 10, 10, 24
181
+ ; CHECK-NEXT: slw 24, 11, 24
182
+ ; CHECK-NEXT: sraw 23, 11, 0
183
+ ; CHECK-NEXT: srw 0, 7, 27
184
+ ; CHECK-NEXT: sraw 11, 11, 27
185
+ ; CHECK-NEXT: cmpwi 1, 27, 1
186
+ ; CHECK-NEXT: or 0, 29, 0
187
+ ; CHECK-NEXT: or 30, 24, 30
188
+ ; CHECK-NEXT: bc 12, 4, .LBB1_6
189
+ ; CHECK-NEXT: b .LBB1_7
190
+ ; CHECK-NEXT: .LBB1_6: # %for.body
191
+ ; CHECK-NEXT: #
192
+ ; CHECK-NEXT: addi 11, 26, 0
193
+ ; CHECK-NEXT: .LBB1_7: # %for.body
194
+ ; CHECK-NEXT: #
195
+ ; CHECK-NEXT: cmplwi 1, 9, 0
196
+ ; CHECK-NEXT: srw 9, 7, 9
197
+ ; CHECK-NEXT: or 10, 0, 10
198
+ ; CHECK-NEXT: or 0, 30, 28
199
+ ; CHECK-NEXT: or 9, 9, 0
200
+ ; CHECK-NEXT: bc 12, 0, .LBB1_9
201
+ ; CHECK-NEXT: # %bb.8: # %for.body
202
+ ; CHECK-NEXT: #
203
+ ; CHECK-NEXT: ori 10, 12, 0
204
+ ; CHECK-NEXT: ori 9, 23, 0
205
+ ; CHECK-NEXT: ori 11, 25, 0
206
+ ; CHECK-NEXT: b .LBB1_9
207
+ ; CHECK-NEXT: .LBB1_9: # %for.body
208
+ ; CHECK-NEXT: #
209
+ ; CHECK-NEXT: cmplwi 6, 0
210
+ ; CHECK-NEXT: bc 12, 6, .LBB1_11
211
+ ; CHECK-NEXT: # %bb.10: # %for.body
212
+ ; CHECK-NEXT: #
213
+ ; CHECK-NEXT: ori 8, 10, 0
214
+ ; CHECK-NEXT: ori 7, 9, 0
215
+ ; CHECK-NEXT: b .LBB1_11
216
+ ; CHECK-NEXT: .LBB1_11: # %for.body
217
+ ; CHECK-NEXT: #
218
+ ; CHECK-NEXT: stw 11, 4(3)
219
+ ; CHECK-NEXT: stw 8, 12(3)
220
+ ; CHECK-NEXT: stw 7, 8(3)
221
+ ; CHECK-NEXT: bne 0, .LBB1_1
222
+ ; CHECK-NEXT: # %bb.12: # %for.end
223
+ ; CHECK-NEXT: lwz 30, 40(1) # 4-byte Folded Reload
224
+ ; CHECK-NEXT: lwz 29, 36(1) # 4-byte Folded Reload
225
+ ; CHECK-NEXT: lwz 28, 32(1) # 4-byte Folded Reload
226
+ ; CHECK-NEXT: lwz 27, 28(1) # 4-byte Folded Reload
227
+ ; CHECK-NEXT: lwz 26, 24(1) # 4-byte Folded Reload
228
+ ; CHECK-NEXT: lwz 25, 20(1) # 4-byte Folded Reload
229
+ ; CHECK-NEXT: lwz 24, 16(1) # 4-byte Folded Reload
230
+ ; CHECK-NEXT: lwz 23, 12(1) # 4-byte Folded Reload
231
+ ; CHECK-NEXT: addi 1, 1, 48
232
+ ; CHECK-NEXT: blr
29
233
entry:
30
234
br label %for.body
31
235
@@ -41,13 +245,105 @@ for.body: ; preds = %for.body, %entry
41
245
42
246
for.end: ; preds = %for.body
43
247
ret void
44
-
45
- ; CHECK-LABEL: @foo2
46
- ; CHECK-NOT: mtctr
47
248
}
48
249
49
250
; Function Attrs: nounwind
50
251
define void @foo3 (ptr %a , ptr readonly %b , ptr readonly %c ) #0 {
252
+ ; CHECK-LABEL: foo3:
253
+ ; CHECK: # %bb.0: # %entry
254
+ ; CHECK-NEXT: stwu 1, -48(1)
255
+ ; CHECK-NEXT: li 6, 2048
256
+ ; CHECK-NEXT: li 7, 0
257
+ ; CHECK-NEXT: stw 24, 16(1) # 4-byte Folded Spill
258
+ ; CHECK-NEXT: stw 25, 20(1) # 4-byte Folded Spill
259
+ ; CHECK-NEXT: stw 26, 24(1) # 4-byte Folded Spill
260
+ ; CHECK-NEXT: stw 27, 28(1) # 4-byte Folded Spill
261
+ ; CHECK-NEXT: stw 28, 32(1) # 4-byte Folded Spill
262
+ ; CHECK-NEXT: stw 29, 36(1) # 4-byte Folded Spill
263
+ ; CHECK-NEXT: stw 30, 40(1) # 4-byte Folded Spill
264
+ ; CHECK-NEXT: .LBB2_1: # %for.body
265
+ ; CHECK-NEXT: #
266
+ ; CHECK-NEXT: lwz 10, 12(5)
267
+ ; CHECK-NEXT: addi 6, 6, -1
268
+ ; CHECK-NEXT: lwz 12, 0(4)
269
+ ; CHECK-NEXT: lwz 11, 4(4)
270
+ ; CHECK-NEXT: subfic 0, 10, 96
271
+ ; CHECK-NEXT: lwz 8, 8(4)
272
+ ; CHECK-NEXT: addi 30, 10, -64
273
+ ; CHECK-NEXT: lwz 9, 12(4)
274
+ ; CHECK-NEXT: cmplwi 10, 64
275
+ ; CHECK-NEXT: srw 25, 12, 10
276
+ ; CHECK-NEXT: addi 29, 10, -96
277
+ ; CHECK-NEXT: subfic 27, 10, 32
278
+ ; CHECK-NEXT: slw 0, 12, 0
279
+ ; CHECK-NEXT: srw 24, 11, 30
280
+ ; CHECK-NEXT: bc 12, 0, .LBB2_3
281
+ ; CHECK-NEXT: # %bb.2: # %for.body
282
+ ; CHECK-NEXT: #
283
+ ; CHECK-NEXT: ori 25, 7, 0
284
+ ; CHECK-NEXT: b .LBB2_3
285
+ ; CHECK-NEXT: .LBB2_3: # %for.body
286
+ ; CHECK-NEXT: #
287
+ ; CHECK-NEXT: srw 28, 9, 10
288
+ ; CHECK-NEXT: or 0, 24, 0
289
+ ; CHECK-NEXT: slw 24, 8, 27
290
+ ; CHECK-NEXT: stw 25, 0(3)
291
+ ; CHECK-NEXT: subfic 25, 10, 64
292
+ ; CHECK-NEXT: srw 29, 12, 29
293
+ ; CHECK-NEXT: srw 26, 11, 10
294
+ ; CHECK-NEXT: or 28, 28, 24
295
+ ; CHECK-NEXT: slw 24, 12, 27
296
+ ; CHECK-NEXT: or 29, 0, 29
297
+ ; CHECK-NEXT: subfic 0, 25, 32
298
+ ; CHECK-NEXT: or 26, 26, 24
299
+ ; CHECK-NEXT: addi 24, 10, -32
300
+ ; CHECK-NEXT: slw 27, 11, 27
301
+ ; CHECK-NEXT: srw 0, 11, 0
302
+ ; CHECK-NEXT: slw 11, 11, 25
303
+ ; CHECK-NEXT: slw 25, 12, 25
304
+ ; CHECK-NEXT: srw 30, 12, 30
305
+ ; CHECK-NEXT: srw 12, 12, 24
306
+ ; CHECK-NEXT: srw 24, 8, 24
307
+ ; CHECK-NEXT: or 0, 25, 0
308
+ ; CHECK-NEXT: or 28, 28, 24
309
+ ; CHECK-NEXT: cmplwi 1, 10, 0
310
+ ; CHECK-NEXT: srw 10, 8, 10
311
+ ; CHECK-NEXT: or 0, 0, 27
312
+ ; CHECK-NEXT: or 11, 28, 11
313
+ ; CHECK-NEXT: or 10, 10, 0
314
+ ; CHECK-NEXT: or 12, 26, 12
315
+ ; CHECK-NEXT: bc 12, 0, .LBB2_5
316
+ ; CHECK-NEXT: # %bb.4: # %for.body
317
+ ; CHECK-NEXT: #
318
+ ; CHECK-NEXT: ori 11, 29, 0
319
+ ; CHECK-NEXT: ori 10, 30, 0
320
+ ; CHECK-NEXT: ori 12, 7, 0
321
+ ; CHECK-NEXT: b .LBB2_5
322
+ ; CHECK-NEXT: .LBB2_5: # %for.body
323
+ ; CHECK-NEXT: #
324
+ ; CHECK-NEXT: cmplwi 6, 0
325
+ ; CHECK-NEXT: bc 12, 6, .LBB2_7
326
+ ; CHECK-NEXT: # %bb.6: # %for.body
327
+ ; CHECK-NEXT: #
328
+ ; CHECK-NEXT: ori 9, 11, 0
329
+ ; CHECK-NEXT: ori 8, 10, 0
330
+ ; CHECK-NEXT: b .LBB2_7
331
+ ; CHECK-NEXT: .LBB2_7: # %for.body
332
+ ; CHECK-NEXT: #
333
+ ; CHECK-NEXT: stw 12, 4(3)
334
+ ; CHECK-NEXT: stw 9, 12(3)
335
+ ; CHECK-NEXT: stw 8, 8(3)
336
+ ; CHECK-NEXT: bne 0, .LBB2_1
337
+ ; CHECK-NEXT: # %bb.8: # %for.end
338
+ ; CHECK-NEXT: lwz 30, 40(1) # 4-byte Folded Reload
339
+ ; CHECK-NEXT: lwz 29, 36(1) # 4-byte Folded Reload
340
+ ; CHECK-NEXT: lwz 28, 32(1) # 4-byte Folded Reload
341
+ ; CHECK-NEXT: lwz 27, 28(1) # 4-byte Folded Reload
342
+ ; CHECK-NEXT: lwz 26, 24(1) # 4-byte Folded Reload
343
+ ; CHECK-NEXT: lwz 25, 20(1) # 4-byte Folded Reload
344
+ ; CHECK-NEXT: lwz 24, 16(1) # 4-byte Folded Reload
345
+ ; CHECK-NEXT: addi 1, 1, 48
346
+ ; CHECK-NEXT: blr
51
347
entry:
52
348
br label %for.body
53
349
@@ -63,9 +359,6 @@ for.body: ; preds = %for.body, %entry
63
359
64
360
for.end: ; preds = %for.body
65
361
ret void
66
-
67
- ; CHECK-LABEL: @foo3
68
- ; CHECK-NOT: mtctr
69
362
}
70
363
71
364
attributes #0 = { nounwind }
0 commit comments