1
+ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
1
2
# RUN: llc -run-pass x86-fixup-LEAs -mtriple=i386 -verify-machineinstrs -mcpu=corei7-avx -o - %s | FileCheck %s
2
3
--- |
3
4
; ModuleID = 'test/CodeGen/X86/fixup-lea.ll'
40
41
define i32 @test1lea_ebp_32() {
41
42
ret i32 0
42
43
}
43
-
44
+
44
45
;test2addi32_32 : 3 operands LEA32r that can be replaced with 2 add instructions where ADD32ri32
45
46
; is chosen
46
47
define i32 @test2addi32_32() {
47
48
ret i32 0
48
49
}
49
-
50
+
50
51
;test1mov1add_ebp_32 : 2 operands LEA32r that can be replaced with 1 add 1 mov instructions
51
52
; where the base is rbp/r13/ebp register
52
53
define i32 @test1mov1add_ebp_32() {
64
65
define i32 @testleaadd_ebp_index2_32() {
65
66
ret i32 0
66
67
}
67
-
68
+
68
69
;test_skip_opt_32 : 3 operands LEA32r that can not be replaced with 2 instructions
69
70
define i32 @test_skip_opt_32() {
70
71
ret i32 0
@@ -84,10 +85,10 @@ legalized: false
84
85
regBankSelected : false
85
86
selected : false
86
87
tracksRegLiveness : true
87
- liveins :
88
+ liveins :
88
89
- { reg: '$eax' }
89
90
- { reg: '$ebp' }
90
- frameInfo :
91
+ frameInfo :
91
92
isFrameAddressTaken : false
92
93
isReturnAddressTaken : false
93
94
hasStackMap : false
@@ -104,9 +105,12 @@ frameInfo:
104
105
body : |
105
106
bb.0 (%ir-block.0):
106
107
liveins: $eax, $ebp
107
- ; CHECK: $eax = ADD32rr $eax, $ebp
108
- ; CHECK: $eax = ADD32ri8 $eax, -5
109
-
108
+
109
+ ; CHECK-LABEL: name: test2add_32
110
+ ; CHECK: liveins: $eax, $ebp
111
+ ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags
112
+ ; CHECK: $eax = ADD32ri8 $eax, -5, implicit-def $eflags
113
+ ; CHECK: RETQ $eax
110
114
$eax = LEA32r killed $eax, 1, killed $ebp, -5, $noreg
111
115
RETQ $eax
112
116
@@ -119,10 +123,10 @@ legalized: false
119
123
regBankSelected : false
120
124
selected : false
121
125
tracksRegLiveness : true
122
- liveins :
126
+ liveins :
123
127
- { reg: '$eax' }
124
128
- { reg: '$ebp' }
125
- frameInfo :
129
+ frameInfo :
126
130
isFrameAddressTaken : false
127
131
isReturnAddressTaken : false
128
132
hasStackMap : false
@@ -139,9 +143,12 @@ frameInfo:
139
143
body : |
140
144
bb.0 (%ir-block.0):
141
145
liveins: $eax, $ebp
142
- ; CHECK: $ebp = ADD32rr $ebp, $eax
143
- ; CHECK: $ebp = ADD32ri8 $ebp, -5
144
-
146
+
147
+ ; CHECK-LABEL: name: test2add_ebp_32
148
+ ; CHECK: liveins: $eax, $ebp
149
+ ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags
150
+ ; CHECK: $ebp = ADD32ri8 $ebp, -5, implicit-def $eflags
151
+ ; CHECK: RETQ $ebp
145
152
$ebp = LEA32r killed $ebp, 1, killed $eax, -5, $noreg
146
153
RETQ $ebp
147
154
@@ -154,10 +161,10 @@ legalized: false
154
161
regBankSelected : false
155
162
selected : false
156
163
tracksRegLiveness : true
157
- liveins :
164
+ liveins :
158
165
- { reg: '$eax' }
159
166
- { reg: '$ebp' }
160
- frameInfo :
167
+ frameInfo :
161
168
isFrameAddressTaken : false
162
169
isReturnAddressTaken : false
163
170
hasStackMap : false
@@ -174,8 +181,11 @@ frameInfo:
174
181
body : |
175
182
bb.0 (%ir-block.0):
176
183
liveins: $eax, $ebp
177
- ; CHECK: $ebp = ADD32rr $ebp, $eax
178
-
184
+
185
+ ; CHECK-LABEL: name: test1add_ebp_32
186
+ ; CHECK: liveins: $eax, $ebp
187
+ ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags
188
+ ; CHECK: RETQ $ebp
179
189
$ebp = LEA32r killed $ebp, 1, killed $eax, 0, $noreg
180
190
RETQ $ebp
181
191
@@ -188,11 +198,11 @@ legalized: false
188
198
regBankSelected : false
189
199
selected : false
190
200
tracksRegLiveness : true
191
- liveins :
201
+ liveins :
192
202
- { reg: '$eax' }
193
203
- { reg: '$ebp' }
194
204
- { reg: '$ebx' }
195
- frameInfo :
205
+ frameInfo :
196
206
isFrameAddressTaken : false
197
207
isReturnAddressTaken : false
198
208
hasStackMap : false
@@ -209,9 +219,12 @@ frameInfo:
209
219
body : |
210
220
bb.0 (%ir-block.0):
211
221
liveins: $eax, $ebp, $esi
212
- ; CHECK: $ebx = LEA32r killed $eax, 1, killed $ebp, 0
213
- ; CHECK: $ebx = ADD32ri8 $ebx, -5
214
-
222
+
223
+ ; CHECK-LABEL: name: testleaadd_32
224
+ ; CHECK: liveins: $eax, $ebp, $esi
225
+ ; CHECK: $ebx = LEA32r killed $eax, 1, killed $ebp, 0, $noreg
226
+ ; CHECK: $ebx = ADD32ri8 $ebx, -5, implicit-def $eflags
227
+ ; CHECK: RETQ $ebx
215
228
$ebx = LEA32r killed $eax, 1, killed $ebp, -5, $noreg
216
229
RETQ $ebx
217
230
@@ -224,11 +237,11 @@ legalized: false
224
237
regBankSelected : false
225
238
selected : false
226
239
tracksRegLiveness : true
227
- liveins :
240
+ liveins :
228
241
- { reg: '$eax' }
229
242
- { reg: '$ebp' }
230
243
- { reg: '$ebx' }
231
- frameInfo :
244
+ frameInfo :
232
245
isFrameAddressTaken : false
233
246
isReturnAddressTaken : false
234
247
hasStackMap : false
@@ -245,9 +258,12 @@ frameInfo:
245
258
body : |
246
259
bb.0 (%ir-block.0):
247
260
liveins: $eax, $ebp
261
+
262
+ ; CHECK-LABEL: name: testleaadd_ebp_32
263
+ ; CHECK: liveins: $eax, $ebp
248
264
; CHECK: $ebx = LEA32r killed $eax, 1, killed $ebp, 0, $noreg
249
- ; CHECK: $ebx = ADD32ri8 $ebx, -5
250
-
265
+ ; CHECK: $ebx = ADD32ri8 $ebx, -5, implicit-def $eflags
266
+ ; CHECK: RETQ $ebx
251
267
$ebx = LEA32r killed $ebp, 1, killed $eax, -5, $noreg
252
268
RETQ $ebx
253
269
@@ -260,11 +276,11 @@ legalized: false
260
276
regBankSelected : false
261
277
selected : false
262
278
tracksRegLiveness : true
263
- liveins :
279
+ liveins :
264
280
- { reg: '$eax' }
265
281
- { reg: '$ebp' }
266
282
- { reg: '$ebx' }
267
- frameInfo :
283
+ frameInfo :
268
284
isFrameAddressTaken : false
269
285
isReturnAddressTaken : false
270
286
hasStackMap : false
@@ -281,8 +297,11 @@ frameInfo:
281
297
body : |
282
298
bb.0 (%ir-block.0):
283
299
liveins: $eax, $ebp
300
+
301
+ ; CHECK-LABEL: name: test1lea_ebp_32
302
+ ; CHECK: liveins: $eax, $ebp
284
303
; CHECK: $ebx = LEA32r killed $eax, 1, killed $ebp, 0, $noreg
285
-
304
+ ; CHECK: RETQ $ebx
286
305
$ebx = LEA32r killed $ebp, 1, killed $eax, 0, $noreg
287
306
RETQ $ebx
288
307
@@ -295,10 +314,10 @@ legalized: false
295
314
regBankSelected : false
296
315
selected : false
297
316
tracksRegLiveness : true
298
- liveins :
317
+ liveins :
299
318
- { reg: '$eax' }
300
319
- { reg: '$ebp' }
301
- frameInfo :
320
+ frameInfo :
302
321
isFrameAddressTaken : false
303
322
isReturnAddressTaken : false
304
323
hasStackMap : false
@@ -315,9 +334,12 @@ frameInfo:
315
334
body : |
316
335
bb.0 (%ir-block.0):
317
336
liveins: $eax, $ebp
318
- ; CHECK: $eax = ADD32rr $eax, $ebp
319
- ; CHECK: $eax = ADD32ri $eax, 129
320
-
337
+
338
+ ; CHECK-LABEL: name: test2addi32_32
339
+ ; CHECK: liveins: $eax, $ebp
340
+ ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags
341
+ ; CHECK: $eax = ADD32ri $eax, 129, implicit-def $eflags
342
+ ; CHECK: RETQ $eax
321
343
$eax = LEA32r killed $eax, 1, killed $ebp, 129, $noreg
322
344
RETQ $eax
323
345
@@ -330,11 +352,11 @@ legalized: false
330
352
regBankSelected : false
331
353
selected : false
332
354
tracksRegLiveness : true
333
- liveins :
355
+ liveins :
334
356
- { reg: '$eax' }
335
357
- { reg: '$ebx' }
336
358
- { reg: '$ebp' }
337
- frameInfo :
359
+ frameInfo :
338
360
isFrameAddressTaken : false
339
361
isReturnAddressTaken : false
340
362
hasStackMap : false
@@ -351,9 +373,13 @@ frameInfo:
351
373
body : |
352
374
bb.0 (%ir-block.0):
353
375
liveins: $eax, $ebp, $ebx
354
- ; CHECK: $ebx = MOV32rr $ebp
355
- ; CHECK: $ebx = ADD32rr $ebx, $ebp
356
-
376
+
377
+ ; CHECK-LABEL: name: test1mov1add_ebp_32
378
+ ; CHECK: liveins: $eax, $ebp, $ebx
379
+ ; CHECK: $ebx = MOV32rr $ebp
380
+ ; CHECK: $ebx = ADD32rr $ebx, $ebp, implicit-def $eflags
381
+ ; CHECK: $ebx = LEA32r killed $ebp, 1, $ebp, 0, $noreg
382
+ ; CHECK: RETQ $ebx
357
383
$ebx = LEA32r killed $ebp, 1, $ebp, 0, $noreg
358
384
RETQ $ebx
359
385
@@ -366,10 +392,10 @@ legalized: false
366
392
regBankSelected : false
367
393
selected : false
368
394
tracksRegLiveness : true
369
- liveins :
395
+ liveins :
370
396
- { reg: '$ebx' }
371
397
- { reg: '$ebp' }
372
- frameInfo :
398
+ frameInfo :
373
399
isFrameAddressTaken : false
374
400
isReturnAddressTaken : false
375
401
hasStackMap : false
@@ -386,9 +412,12 @@ frameInfo:
386
412
body : |
387
413
bb.0 (%ir-block.0):
388
414
liveins: $eax, $ebp, $ebx
415
+
416
+ ; CHECK-LABEL: name: testleaadd_ebp_index_32
417
+ ; CHECK: liveins: $eax, $ebp, $ebx
389
418
; CHECK: $ebx = LEA32r $noreg, 1, $ebp, 5, $noreg
390
- ; CHECK: $ebx = ADD32rr $ebx, $ebp
391
-
419
+ ; CHECK: $ebx = ADD32rr $ebx, $ebp, implicit-def $eflags
420
+ ; CHECK: RETQ $ebx
392
421
$ebx = LEA32r $ebp, 1, $ebp, 5, $noreg
393
422
RETQ $ebx
394
423
@@ -401,10 +430,10 @@ legalized: false
401
430
regBankSelected : false
402
431
selected : false
403
432
tracksRegLiveness : true
404
- liveins :
433
+ liveins :
405
434
- { reg: '$ebx' }
406
435
- { reg: '$ebp' }
407
- frameInfo :
436
+ frameInfo :
408
437
isFrameAddressTaken : false
409
438
isReturnAddressTaken : false
410
439
hasStackMap : false
@@ -421,9 +450,12 @@ frameInfo:
421
450
body : |
422
451
bb.0 (%ir-block.0):
423
452
liveins: $eax, $ebp, $ebx
453
+
454
+ ; CHECK-LABEL: name: testleaadd_ebp_index2_32
455
+ ; CHECK: liveins: $eax, $ebp, $ebx
424
456
; CHECK: $ebx = LEA32r $noreg, 4, $ebp, 5, $noreg
425
- ; CHECK: $ebx = ADD32rr $ebx, $ebp
426
-
457
+ ; CHECK: $ebx = ADD32rr $ebx, $ebp, implicit-def $eflags
458
+ ; CHECK: RETQ $ebx
427
459
$ebx = LEA32r $ebp, 4, $ebp, 5, $noreg
428
460
RETQ $ebx
429
461
@@ -436,10 +468,10 @@ legalized: false
436
468
regBankSelected : false
437
469
selected : false
438
470
tracksRegLiveness : true
439
- liveins :
471
+ liveins :
440
472
- { reg: '$ebx' }
441
473
- { reg: '$ebp' }
442
- frameInfo :
474
+ frameInfo :
443
475
isFrameAddressTaken : false
444
476
isReturnAddressTaken : false
445
477
hasStackMap : false
@@ -456,8 +488,11 @@ frameInfo:
456
488
body : |
457
489
bb.0 (%ir-block.0):
458
490
liveins: $eax, $ebp, $ebx
491
+
492
+ ; CHECK-LABEL: name: test_skip_opt_32
493
+ ; CHECK: liveins: $eax, $ebp, $ebx
459
494
; CHECK: $ebp = LEA32r killed $ebp, 4, killed $ebp, 0, $noreg
460
-
495
+ ; CHECK: RETQ $ebp
461
496
$ebp = LEA32r killed $ebp, 4, killed $ebp, 0, $noreg
462
497
RETQ $ebp
463
498
@@ -470,10 +505,10 @@ legalized: false
470
505
regBankSelected : false
471
506
selected : false
472
507
tracksRegLiveness : true
473
- liveins :
508
+ liveins :
474
509
- { reg: '$ebp' }
475
510
- { reg: '$eax' }
476
- frameInfo :
511
+ frameInfo :
477
512
isFrameAddressTaken : false
478
513
isReturnAddressTaken : false
479
514
hasStackMap : false
@@ -488,12 +523,22 @@ frameInfo:
488
523
hasVAStart : false
489
524
hasMustTailInVarArgFunc : false
490
525
body : |
526
+ ; CHECK-LABEL: name: test_skip_eflags_32
527
+ ; CHECK: bb.0 (%ir-block.0):
528
+ ; CHECK: successors: %bb.1(0x80000000)
529
+ ; CHECK: liveins: $eax, $ebp, $ebx
530
+ ; CHECK: CMP32rr $eax, killed $ebx, implicit-def $eflags
531
+ ; CHECK: $ebx = LEA32r killed $eax, 4, killed $eax, 5, $noreg
532
+ ; CHECK: JCC_1 %bb.1, 4, implicit $eflags
533
+ ; CHECK: RETQ $ebx
534
+ ; CHECK: bb.1:
535
+ ; CHECK: liveins: $eax, $ebp, $ebx
536
+ ; CHECK: $ebp = LEA32r killed $ebx, 4, killed $ebx, 0, $noreg
537
+ ; CHECK: $ebp = ADD32ri8 $ebp, 5, implicit-def $eflags
538
+ ; CHECK: RETQ $ebp
491
539
bb.0 (%ir-block.0):
492
540
liveins: $eax, $ebp, $ebx
493
- ; CHECK: $ebx = LEA32r killed $eax, 4, killed $eax, 5, $noreg
494
- ; CHECK: $ebp = LEA32r killed $ebx, 4, killed $ebx, 0, $noreg
495
- ; CHECK: $ebp = ADD32ri8 $ebp, 5
496
-
541
+
497
542
CMP32rr $eax, killed $ebx, implicit-def $eflags
498
543
$ebx = LEA32r killed $eax, 4, killed $eax, 5, $noreg
499
544
JCC_1 %bb.1, 4, implicit $eflags
0 commit comments