xref: /llvm-project/llvm/test/CodeGen/X86/leaFixup64.mir (revision c81a121f3f230cfe468b6def6d2904b4aefb855b)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -run-pass x86-fixup-LEAs -mtriple=x86_64-gnu-unknown -verify-machineinstrs -mcpu=corei7-avx -o - %s | FileCheck %s
3--- |
4  ; ModuleID = 'lea-2.ll'
5  source_filename = "lea-2.ll"
6  target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
7  ;generated using: llc -stop-after x86-pad-short-functions lea-2.ll > leaFinxup64.mir
8
9  ;testleaadd_64_32_1: 3 operands LEA64_32r cannot be replaced with 2 add instructions
10  ; but can be replaced with 1 lea + 1 add
11  define i32 @testleaadd_64_32_1() {
12    ret i32 0
13  }
14
15  ;testleaadd_rbp_64_32_1: 3 operands LEA64_32r cannot be replaced with 2 add instructions
16  ; where the base is rbp/r13/ebp register but it can be replaced with 1 lea + 1 add
17  define i32 @testleaadd_rbp_64_32_1() {
18    ret i32 0
19  }
20
21  ;test1lea_rbp_64_32_1: 2 operands LEA64_32r where base register is rbp/r13/ebp and can not
22  ; be replaced with an add instruction but can be replaced with 1 lea instruction
23  define i32 @test1lea_rbp_64_32_1() {
24    ret i32 0
25  }
26
27  ;test2add_64: 3 operands LEA64r that can be replaced with 2 add instructions
28  define i32 @test2add_64() {
29    ret i32 0
30  }
31
32  ;test2add_rbp_64: 3 operands LEA64r that can be replaced with 2 add instructions
33  ; where the base is rbp/r13/ebp register
34  define i32 @test2add_rbp_64() {
35    ret i32 0
36  }
37
38  ;test1add_rbp_64: 2 operands LEA64r where base register is rbp/r13/ebp and can be replaced
39  ; with an add instruction
40  define i32 @test1add_rbp_64() {
41    ret i32 0
42  }
43
44  ;testleaadd_64_32: 3 operands LEA64_32r that can be replaced with 1 lea 1 add instructions
45  define i32 @testleaadd_64_32() {
46    ret i32 0
47  }
48
49  ;testleaadd_rbp_64_32: 3 operands LEA64_32r that can be replaced with 1 lea 1 add instructions
50  ; where the base is rbp/r13/ebp register
51  define i32 @testleaadd_rbp_64_32() {
52    ret i32 0
53  }
54
55  ;test1lea_rbp_64_32: 2 operands LEA64_32r where base register is rbp/r13/ebp and can be replaced
56  ; with a lea instruction
57  define i32 @test1lea_rbp_64_32() {
58    ret i32 0
59  }
60
61  ;testleaadd_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions
62  define i32 @testleaadd_64() {
63    ret i32 0
64  }
65
66  ;testleaadd_rbp_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions
67  ; where the base is rbp/r13/ebp register
68  define i32 @testleaadd_rbp_64() {
69    ret i32 0
70  }
71
72  ;test1lea_rbp_64: 2 operands LEA64r wher base register is rbp/r13/ebp and can be replaced
73  ; with a lea instruction
74  define i32 @test1lea_rbp_64() {
75    ret i32 0
76  }
77
78  ;test8: dst = base & scale!=1, can't optimize
79  define i32 @test8() {
80      ret i32 0
81  }
82
83  ;testleaaddi32_64_32: 3 operands LEA64_32r that can be replaced with 1 lea + 1 add instructions where
84  ; ADD64ri32 is chosen
85  define i32 @testleaaddi32_64_32() {
86    ret i32 0
87  }
88
89  ;test_leab_rbp_leais_64_32: 2 operands LEA64_32r that can be replaced with LEA_IS form
90  ; where the base is rbp/r13/ebp register
91  define i32 @test_leab_rbp_leais_64_32() {
92    ret i32 0
93  }
94
95  ;test_leabi_rbp_leais_64_32: 3 operands LEA64_32r that can be replaced with LEA_IS form
96  ; where the base and the index are ebp register and there is offset
97  define i32 @test_leabi_rbp_leais_64_32() {
98    ret i32 0
99  }
100
101  ;testleaadd_rbp_index2_64_32: 3 operands LEA64_32r that cannot replaced with 1 lea 1 add instructions
102  ; where the base and the index are ebp register and there is scale
103  define i32 @testleaadd_rbp_index2_64_32() {
104    ret i32 0
105  }
106
107  ;test2addi32_64: 3 operands LEA64r that can be replaced with 2 add instructions where ADD64ri32
108  ; is chosen
109  define i32 @test2addi32_64() {
110    ret i32 0
111  }
112
113  ;test_leab_rbp_leais_64: 2 operands LEA64r that can be replaced with LEA_IS form
114  ; where the base is rbp/r13/ebp register
115  define i32 @test_leab_rbp_leais_64() {
116    ret i32 0
117  }
118
119  ;test_leabi_rbp_leais_64: 3 operands LEA64r that can be replaced with LEA_IS form
120  ; where the base and the index are ebp register and there is offset
121  define i32 @test_leabi_rbp_leais_64() {
122    ret i32 0
123  }
124
125  ;testleaadd_rbp_index2_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions
126  ; where the base and the index are ebp register and there is scale
127  define i32 @testleaadd_rbp_index2_64() {
128    ret i32 0
129  }
130
131  ;test_skip_opt_64: 3 operands LEA64r that can not be replaced with 2 instructions
132  define i32 @test_skip_opt_64() {
133    ret i32 0
134  }
135
136  ;test_skip_eflags_64: LEA64r that cannot be replaced since its not safe to clobber eflags
137  define i32 @test_skip_eflags_64() {
138    ret i32 0
139  }
140
141  ;test_skip_opt_64_32: 3 operands LEA64_32r that can not be replaced with 2 instructions
142  define i32 @test_skip_opt_64_32() {
143    ret i32 0
144  }
145
146  ;test_skip_eflags_64_32: LEA64_32r that cannot be replaced since its not safe to clobber eflags
147  define i32 @test_skip_eflags_64_32() {
148    ret i32 0
149  }
150
151  define i32 @pr43758() {
152    ret i32 0
153  }
154
155
156...
157---
158name:            testleaadd_64_32_1
159alignment:       16
160exposesReturnsTwice: false
161legalized:       false
162regBankSelected: false
163selected:        false
164tracksRegLiveness: true
165liveins:
166  - { reg: '$rax' }
167  - { reg: '$rbp' }
168frameInfo:
169  isFrameAddressTaken: false
170  isReturnAddressTaken: false
171  hasStackMap:     false
172  hasPatchPoint:   false
173  stackSize:       0
174  offsetAdjustment: 0
175  maxAlignment:    0
176  adjustsStack:    false
177  hasCalls:        false
178  maxCallFrameSize: 0
179  hasOpaqueSPAdjustment: false
180  hasVAStart:      false
181  hasMustTailInVarArgFunc: false
182body:             |
183  bb.0 (%ir-block.0):
184    liveins: $rax, $rbp
185
186    ; CHECK-LABEL: name: testleaadd_64_32_1
187    ; CHECK: liveins: $rax, $rbp
188    ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp
189    ; CHECK: $eax = ADD32ri $eax, -5, implicit-def $eflags
190    ; CHECK: RET64 $eax
191    $eax = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg
192    RET64 $eax
193
194...
195---
196name:            testleaadd_rbp_64_32_1
197alignment:       16
198exposesReturnsTwice: false
199legalized:       false
200regBankSelected: false
201selected:        false
202tracksRegLiveness: true
203liveins:
204  - { reg: '$rax' }
205  - { reg: '$rbp' }
206frameInfo:
207  isFrameAddressTaken: false
208  isReturnAddressTaken: false
209  hasStackMap:     false
210  hasPatchPoint:   false
211  stackSize:       0
212  offsetAdjustment: 0
213  maxAlignment:    0
214  adjustsStack:    false
215  hasCalls:        false
216  maxCallFrameSize: 0
217  hasOpaqueSPAdjustment: false
218  hasVAStart:      false
219  hasMustTailInVarArgFunc: false
220body:             |
221  bb.0 (%ir-block.0):
222    liveins: $rax, $rbp
223
224    ; CHECK-LABEL: name: testleaadd_rbp_64_32_1
225    ; CHECK: liveins: $rax, $rbp
226    ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax
227    ; CHECK: $ebp = ADD32ri $ebp, -5, implicit-def $eflags
228    ; CHECK: RET64 $ebp
229    $ebp = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg
230    RET64 $ebp
231
232...
233---
234name:            test1lea_rbp_64_32_1
235alignment:       16
236exposesReturnsTwice: false
237legalized:       false
238regBankSelected: false
239selected:        false
240tracksRegLiveness: true
241liveins:
242  - { reg: '$rax' }
243  - { reg: '$rbp' }
244frameInfo:
245  isFrameAddressTaken: false
246  isReturnAddressTaken: false
247  hasStackMap:     false
248  hasPatchPoint:   false
249  stackSize:       0
250  offsetAdjustment: 0
251  maxAlignment:    0
252  adjustsStack:    false
253  hasCalls:        false
254  maxCallFrameSize: 0
255  hasOpaqueSPAdjustment: false
256  hasVAStart:      false
257  hasMustTailInVarArgFunc: false
258body:             |
259  bb.0 (%ir-block.0):
260    liveins: $rax, $rbp
261
262    ; CHECK-LABEL: name: test1lea_rbp_64_32_1
263    ; CHECK: liveins: $rax, $rbp
264    ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax
265    ; CHECK: RET64 $ebp
266    $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
267    RET64 $ebp
268
269...
270---
271name:            test2add_64
272alignment:       16
273exposesReturnsTwice: false
274legalized:       false
275regBankSelected: false
276selected:        false
277tracksRegLiveness: true
278liveins:
279  - { reg: '$rax' }
280  - { reg: '$rbp' }
281frameInfo:
282  isFrameAddressTaken: false
283  isReturnAddressTaken: false
284  hasStackMap:     false
285  hasPatchPoint:   false
286  stackSize:       0
287  offsetAdjustment: 0
288  maxAlignment:    0
289  adjustsStack:    false
290  hasCalls:        false
291  maxCallFrameSize: 0
292  hasOpaqueSPAdjustment: false
293  hasVAStart:      false
294  hasMustTailInVarArgFunc: false
295body:             |
296  bb.0 (%ir-block.0):
297    liveins: $rax, $rbp
298
299    ; CHECK-LABEL: name: test2add_64
300    ; CHECK: liveins: $rax, $rbp
301    ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags
302    ; CHECK: $rax = ADD64ri32 $rax, -5, implicit-def $eflags
303    ; CHECK: RET64 $eax
304    $rax = LEA64r killed $rax, 1, killed $rbp, -5, $noreg
305    RET64 $eax
306
307...
308---
309name:            test2add_rbp_64
310alignment:       16
311exposesReturnsTwice: false
312legalized:       false
313regBankSelected: false
314selected:        false
315tracksRegLiveness: true
316liveins:
317  - { reg: '$rax' }
318  - { reg: '$rbp' }
319frameInfo:
320  isFrameAddressTaken: false
321  isReturnAddressTaken: false
322  hasStackMap:     false
323  hasPatchPoint:   false
324  stackSize:       0
325  offsetAdjustment: 0
326  maxAlignment:    0
327  adjustsStack:    false
328  hasCalls:        false
329  maxCallFrameSize: 0
330  hasOpaqueSPAdjustment: false
331  hasVAStart:      false
332  hasMustTailInVarArgFunc: false
333body:             |
334  bb.0 (%ir-block.0):
335    liveins: $rax, $rbp
336
337    ; CHECK-LABEL: name: test2add_rbp_64
338    ; CHECK: liveins: $rax, $rbp
339    ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags
340    ; CHECK: $rbp = ADD64ri32 $rbp, -5, implicit-def $eflags
341    ; CHECK: RET64 $ebp
342    $rbp = LEA64r killed $rbp, 1, killed $rax, -5, $noreg
343    RET64 $ebp
344
345...
346---
347name:            test1add_rbp_64
348alignment:       16
349exposesReturnsTwice: false
350legalized:       false
351regBankSelected: false
352selected:        false
353tracksRegLiveness: true
354liveins:
355  - { reg: '$rax' }
356  - { reg: '$rbp' }
357frameInfo:
358  isFrameAddressTaken: false
359  isReturnAddressTaken: false
360  hasStackMap:     false
361  hasPatchPoint:   false
362  stackSize:       0
363  offsetAdjustment: 0
364  maxAlignment:    0
365  adjustsStack:    false
366  hasCalls:        false
367  maxCallFrameSize: 0
368  hasOpaqueSPAdjustment: false
369  hasVAStart:      false
370  hasMustTailInVarArgFunc: false
371body:             |
372  bb.0 (%ir-block.0):
373    liveins: $rax, $rbp
374
375    ; CHECK-LABEL: name: test1add_rbp_64
376    ; CHECK: liveins: $rax, $rbp
377    ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags
378    ; CHECK: RET64 $ebp
379    $rbp = LEA64r killed $rbp, 1, killed $rax, 0, $noreg
380    RET64 $ebp
381
382...
383---
384name:            testleaadd_64_32
385alignment:       16
386exposesReturnsTwice: false
387legalized:       false
388regBankSelected: false
389selected:        false
390tracksRegLiveness: true
391liveins:
392  - { reg: '$rax' }
393  - { reg: '$rbp' }
394  - { reg: '$rbx' }
395frameInfo:
396  isFrameAddressTaken: false
397  isReturnAddressTaken: false
398  hasStackMap:     false
399  hasPatchPoint:   false
400  stackSize:       0
401  offsetAdjustment: 0
402  maxAlignment:    0
403  adjustsStack:    false
404  hasCalls:        false
405  maxCallFrameSize: 0
406  hasOpaqueSPAdjustment: false
407  hasVAStart:      false
408  hasMustTailInVarArgFunc: false
409body:             |
410  bb.0 (%ir-block.0):
411    liveins: $rax, $rbp
412
413    ; CHECK-LABEL: name: testleaadd_64_32
414    ; CHECK: liveins: $rax, $rbp
415    ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg
416    ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags
417    ; CHECK: RET64 $ebx
418    $ebx = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg
419    RET64 $ebx
420
421...
422---
423name:            testleaadd_rbp_64_32
424alignment:       16
425exposesReturnsTwice: false
426legalized:       false
427regBankSelected: false
428selected:        false
429tracksRegLiveness: true
430liveins:
431  - { reg: '$rax' }
432  - { reg: '$rbp' }
433  - { reg: '$rbx' }
434frameInfo:
435  isFrameAddressTaken: false
436  isReturnAddressTaken: false
437  hasStackMap:     false
438  hasPatchPoint:   false
439  stackSize:       0
440  offsetAdjustment: 0
441  maxAlignment:    0
442  adjustsStack:    false
443  hasCalls:        false
444  maxCallFrameSize: 0
445  hasOpaqueSPAdjustment: false
446  hasVAStart:      false
447  hasMustTailInVarArgFunc: false
448body:             |
449  bb.0 (%ir-block.0):
450    liveins: $rax, $rbp
451
452    ; CHECK-LABEL: name: testleaadd_rbp_64_32
453    ; CHECK: liveins: $rax, $rbp
454    ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg
455    ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags
456    ; CHECK: RET64 $ebx
457    $ebx = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg
458    RET64 $ebx
459
460...
461---
462name:            test1lea_rbp_64_32
463alignment:       16
464exposesReturnsTwice: false
465legalized:       false
466regBankSelected: false
467selected:        false
468tracksRegLiveness: true
469liveins:
470  - { reg: '$rax' }
471  - { reg: '$rbp' }
472  - { reg: '$rbx' }
473frameInfo:
474  isFrameAddressTaken: false
475  isReturnAddressTaken: false
476  hasStackMap:     false
477  hasPatchPoint:   false
478  stackSize:       0
479  offsetAdjustment: 0
480  maxAlignment:    0
481  adjustsStack:    false
482  hasCalls:        false
483  maxCallFrameSize: 0
484  hasOpaqueSPAdjustment: false
485  hasVAStart:      false
486  hasMustTailInVarArgFunc: false
487body:             |
488  bb.0 (%ir-block.0):
489    liveins: $rax, $rbp
490
491    ; CHECK-LABEL: name: test1lea_rbp_64_32
492    ; CHECK: liveins: $rax, $rbp
493    ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg
494    ; CHECK: RET64 $ebx
495    $ebx = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
496    RET64 $ebx
497
498...
499---
500name:            testleaadd_64
501alignment:       16
502exposesReturnsTwice: false
503legalized:       false
504regBankSelected: false
505selected:        false
506tracksRegLiveness: true
507liveins:
508  - { reg: '$rax' }
509  - { reg: '$rbp' }
510  - { reg: '$rbx' }
511frameInfo:
512  isFrameAddressTaken: false
513  isReturnAddressTaken: false
514  hasStackMap:     false
515  hasPatchPoint:   false
516  stackSize:       0
517  offsetAdjustment: 0
518  maxAlignment:    0
519  adjustsStack:    false
520  hasCalls:        false
521  maxCallFrameSize: 0
522  hasOpaqueSPAdjustment: false
523  hasVAStart:      false
524  hasMustTailInVarArgFunc: false
525body:             |
526  bb.0 (%ir-block.0):
527    liveins: $rax, $rbp
528
529    ; CHECK-LABEL: name: testleaadd_64
530    ; CHECK: liveins: $rax, $rbp
531    ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg
532    ; CHECK: $rbx = ADD64ri32 $rbx, -5, implicit-def $eflags
533    ; CHECK: RET64 $ebx
534    $rbx = LEA64r killed $rax, 1, killed $rbp, -5, $noreg
535    RET64 $ebx
536
537...
538---
539name:            testleaadd_rbp_64
540alignment:       16
541exposesReturnsTwice: false
542legalized:       false
543regBankSelected: false
544selected:        false
545tracksRegLiveness: true
546liveins:
547  - { reg: '$rax' }
548  - { reg: '$rbp' }
549  - { reg: '$rbx' }
550frameInfo:
551  isFrameAddressTaken: false
552  isReturnAddressTaken: false
553  hasStackMap:     false
554  hasPatchPoint:   false
555  stackSize:       0
556  offsetAdjustment: 0
557  maxAlignment:    0
558  adjustsStack:    false
559  hasCalls:        false
560  maxCallFrameSize: 0
561  hasOpaqueSPAdjustment: false
562  hasVAStart:      false
563  hasMustTailInVarArgFunc: false
564body:             |
565  bb.0 (%ir-block.0):
566    liveins: $rax, $rbp
567
568    ; CHECK-LABEL: name: testleaadd_rbp_64
569    ; CHECK: liveins: $rax, $rbp
570    ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg
571    ; CHECK: $rbx = ADD64ri32 $rbx, -5, implicit-def $eflags
572    ; CHECK: RET64 $ebx
573    $rbx = LEA64r killed $rbp, 1, killed $rax, -5, $noreg
574    RET64 $ebx
575
576...
577---
578name:            test1lea_rbp_64
579alignment:       16
580exposesReturnsTwice: false
581legalized:       false
582regBankSelected: false
583selected:        false
584tracksRegLiveness: true
585liveins:
586  - { reg: '$rax' }
587  - { reg: '$rbp' }
588  - { reg: '$rbx' }
589frameInfo:
590  isFrameAddressTaken: false
591  isReturnAddressTaken: false
592  hasStackMap:     false
593  hasPatchPoint:   false
594  stackSize:       0
595  offsetAdjustment: 0
596  maxAlignment:    0
597  adjustsStack:    false
598  hasCalls:        false
599  maxCallFrameSize: 0
600  hasOpaqueSPAdjustment: false
601  hasVAStart:      false
602  hasMustTailInVarArgFunc: false
603body:             |
604  bb.0 (%ir-block.0):
605    liveins: $rax, $rbp
606
607    ; CHECK-LABEL: name: test1lea_rbp_64
608    ; CHECK: liveins: $rax, $rbp
609    ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg
610    ; CHECK: RET64 $ebx
611    $rbx = LEA64r killed $rbp, 1, killed $rax, 0, $noreg
612    RET64 $ebx
613
614...
615---
616name:            test8
617alignment:       16
618exposesReturnsTwice: false
619legalized:       false
620regBankSelected: false
621selected:        false
622tracksRegLiveness: true
623liveins:
624  - { reg: '$rdi' }
625  - { reg: '$rbp' }
626frameInfo:
627  isFrameAddressTaken: false
628  isReturnAddressTaken: false
629  hasStackMap:     false
630  hasPatchPoint:   false
631  stackSize:       0
632  offsetAdjustment: 0
633  maxAlignment:    0
634  adjustsStack:    false
635  hasCalls:        false
636  maxCallFrameSize: 0
637  hasOpaqueSPAdjustment: false
638  hasVAStart:      false
639  hasMustTailInVarArgFunc: false
640body:             |
641  bb.0 (%ir-block.0):
642    liveins: $rdi, $rbp
643    ; CHECK-LABEL: name: test8
644    ; CHECK: liveins: $rdi, $rbp
645    ; CHECK: $rbp = KILL $rbp, implicit-def $rbp
646    ; CHECK: $r13 = KILL $rdi, implicit-def $r13
647    ; CHECK: $r12 = LEA64r $noreg, 2, killed $r13, 5, $noreg
648    ; CHECK: $r12 = ADD64rr $r12, killed $rbp, implicit-def $eflags
649    ; CHECK: RET64 $r12
650    $rbp = KILL $rbp, implicit-def $rbp
651    $r13 = KILL $rdi, implicit-def $r13
652    $r12 = LEA64r killed $rbp, 2, killed $r13, 5, $noreg
653    RET64 $r12
654
655...
656---
657name:            testleaaddi32_64_32
658alignment:       16
659exposesReturnsTwice: false
660legalized:       false
661regBankSelected: false
662selected:        false
663tracksRegLiveness: true
664liveins:
665  - { reg: '$rax' }
666  - { reg: '$rbp' }
667frameInfo:
668  isFrameAddressTaken: false
669  isReturnAddressTaken: false
670  hasStackMap:     false
671  hasPatchPoint:   false
672  stackSize:       0
673  offsetAdjustment: 0
674  maxAlignment:    0
675  adjustsStack:    false
676  hasCalls:        false
677  maxCallFrameSize: 0
678  hasOpaqueSPAdjustment: false
679  hasVAStart:      false
680  hasMustTailInVarArgFunc: false
681body:             |
682  bb.0 (%ir-block.0):
683    liveins: $rax, $rbp
684
685    ; CHECK-LABEL: name: testleaaddi32_64_32
686    ; CHECK: liveins: $rax, $rbp
687    ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp
688    ; CHECK: $eax = ADD32ri $eax, 129, implicit-def $eflags
689    ; CHECK: RET64 $eax
690    $eax = LEA64_32r killed $rax, 1, killed $rbp, 129, $noreg
691    RET64 $eax
692
693...
694---
695name:            test_leab_rbp_leais_64_32
696alignment:       16
697exposesReturnsTwice: false
698legalized:       false
699regBankSelected: false
700selected:        false
701tracksRegLiveness: true
702liveins:
703  - { reg: '$rax' }
704  - { reg: '$rbp' }
705frameInfo:
706  isFrameAddressTaken: false
707  isReturnAddressTaken: false
708  hasStackMap:     false
709  hasPatchPoint:   false
710  stackSize:       0
711  offsetAdjustment: 0
712  maxAlignment:    0
713  adjustsStack:    false
714  hasCalls:        false
715  maxCallFrameSize: 0
716  hasOpaqueSPAdjustment: false
717  hasVAStart:      false
718  hasMustTailInVarArgFunc: false
719body:             |
720  bb.0 (%ir-block.0):
721    liveins: $rax, $rbp, $rbx
722
723    ; CHECK-LABEL: name: test_leab_rbp_leais_64_32
724    ; CHECK: liveins: $rax, $rbp, $rbx
725    ; CHECK: $ebx = LEA64_32r $noreg, 2, killed $rbp, 0, $noreg
726    ; CHECK: RET64 $ebx
727    $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg
728    RET64 $ebx
729
730...
731---
732name:            test_leabi_rbp_leais_64_32
733alignment:       16
734exposesReturnsTwice: false
735legalized:       false
736regBankSelected: false
737selected:        false
738tracksRegLiveness: true
739liveins:
740  - { reg: '$rbx' }
741  - { reg: '$rbp' }
742frameInfo:
743  isFrameAddressTaken: false
744  isReturnAddressTaken: false
745  hasStackMap:     false
746  hasPatchPoint:   false
747  stackSize:       0
748  offsetAdjustment: 0
749  maxAlignment:    0
750  adjustsStack:    false
751  hasCalls:        false
752  maxCallFrameSize: 0
753  hasOpaqueSPAdjustment: false
754  hasVAStart:      false
755  hasMustTailInVarArgFunc: false
756body:             |
757  bb.0 (%ir-block.0):
758    liveins: $rax, $rbp, $rbx
759
760    ; CHECK-LABEL: name: test_leabi_rbp_leais_64_32
761    ; CHECK: liveins: $rax, $rbp, $rbx
762    ; CHECK: $ebx = LEA64_32r $noreg, 2, killed $rbp, 5, $noreg
763    ; CHECK: RET64 $ebx
764    $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg
765    RET64 $ebx
766
767...
768---
769name:            testleaadd_rbp_index2_64_32
770alignment:       16
771exposesReturnsTwice: false
772legalized:       false
773regBankSelected: false
774selected:        false
775tracksRegLiveness: true
776liveins:
777  - { reg: '$rbx' }
778  - { reg: '$rbp' }
779frameInfo:
780  isFrameAddressTaken: false
781  isReturnAddressTaken: false
782  hasStackMap:     false
783  hasPatchPoint:   false
784  stackSize:       0
785  offsetAdjustment: 0
786  maxAlignment:    0
787  adjustsStack:    false
788  hasCalls:        false
789  maxCallFrameSize: 0
790  hasOpaqueSPAdjustment: false
791  hasVAStart:      false
792  hasMustTailInVarArgFunc: false
793body:             |
794  bb.0 (%ir-block.0):
795    liveins: $eax, $ebp, $ebx
796
797    ; CHECK-LABEL: name: testleaadd_rbp_index2_64_32
798    ; CHECK: liveins: $eax, $ebp, $ebx
799    ; CHECK: $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg
800    ; CHECK: RET64 $ebx
801    $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg
802    RET64 $ebx
803
804...
805---
806name:            test2addi32_64
807alignment:       16
808exposesReturnsTwice: false
809legalized:       false
810regBankSelected: false
811selected:        false
812tracksRegLiveness: true
813liveins:
814  - { reg: '$rax' }
815  - { reg: '$rbp' }
816frameInfo:
817  isFrameAddressTaken: false
818  isReturnAddressTaken: false
819  hasStackMap:     false
820  hasPatchPoint:   false
821  stackSize:       0
822  offsetAdjustment: 0
823  maxAlignment:    0
824  adjustsStack:    false
825  hasCalls:        false
826  maxCallFrameSize: 0
827  hasOpaqueSPAdjustment: false
828  hasVAStart:      false
829  hasMustTailInVarArgFunc: false
830body:             |
831  bb.0 (%ir-block.0):
832    liveins: $rax, $rbp
833
834    ; CHECK-LABEL: name: test2addi32_64
835    ; CHECK: liveins: $rax, $rbp
836    ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags
837    ; CHECK: $rax = ADD64ri32 $rax, 129, implicit-def $eflags
838    ; CHECK: RET64 $eax
839    $rax = LEA64r killed $rax, 1, killed $rbp, 129, $noreg
840    RET64 $eax
841
842...
843---
844name:            test_leab_rbp_leais_64
845alignment:       16
846exposesReturnsTwice: false
847legalized:       false
848regBankSelected: false
849selected:        false
850tracksRegLiveness: true
851liveins:
852  - { reg: '$rax' }
853  - { reg: '$rbp' }
854frameInfo:
855  isFrameAddressTaken: false
856  isReturnAddressTaken: false
857  hasStackMap:     false
858  hasPatchPoint:   false
859  stackSize:       0
860  offsetAdjustment: 0
861  maxAlignment:    0
862  adjustsStack:    false
863  hasCalls:        false
864  maxCallFrameSize: 0
865  hasOpaqueSPAdjustment: false
866  hasVAStart:      false
867  hasMustTailInVarArgFunc: false
868body:             |
869  bb.0 (%ir-block.0):
870    liveins: $rax, $rbp, $rbx
871
872    ; CHECK-LABEL: name: test_leab_rbp_leais_64
873    ; CHECK: liveins: $rax, $rbp, $rbx
874    ; CHECK: $rbx = LEA64r $noreg, 2, $rbp, 0, $noreg
875    ; CHECK: RET64 $ebx
876    $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg
877    RET64 $ebx
878
879...
880---
881name:            test_leabi_rbp_leais_64
882alignment:       16
883exposesReturnsTwice: false
884legalized:       false
885regBankSelected: false
886selected:        false
887tracksRegLiveness: true
888liveins:
889  - { reg: '$rbx' }
890  - { reg: '$rbp' }
891frameInfo:
892  isFrameAddressTaken: false
893  isReturnAddressTaken: false
894  hasStackMap:     false
895  hasPatchPoint:   false
896  stackSize:       0
897  offsetAdjustment: 0
898  maxAlignment:    0
899  adjustsStack:    false
900  hasCalls:        false
901  maxCallFrameSize: 0
902  hasOpaqueSPAdjustment: false
903  hasVAStart:      false
904  hasMustTailInVarArgFunc: false
905body:             |
906  bb.0 (%ir-block.0):
907    liveins: $rax, $rbp, $rbx
908
909    ; CHECK-LABEL: name: test_leabi_rbp_leais_64
910    ; CHECK: liveins: $rax, $rbp, $rbx
911    ; CHECK: $rbx = LEA64r $noreg, 2, $rbp, 5, $noreg
912    ; CHECK: RET64 $ebx
913    $rbx = LEA64r $rbp, 1, $rbp, 5, $noreg
914    RET64 $ebx
915
916...
917---
918name:            testleaadd_rbp_index2_64
919alignment:       16
920exposesReturnsTwice: false
921legalized:       false
922regBankSelected: false
923selected:        false
924tracksRegLiveness: true
925liveins:
926  - { reg: '$rbx' }
927  - { reg: '$rbp' }
928frameInfo:
929  isFrameAddressTaken: false
930  isReturnAddressTaken: false
931  hasStackMap:     false
932  hasPatchPoint:   false
933  stackSize:       0
934  offsetAdjustment: 0
935  maxAlignment:    0
936  adjustsStack:    false
937  hasCalls:        false
938  maxCallFrameSize: 0
939  hasOpaqueSPAdjustment: false
940  hasVAStart:      false
941  hasMustTailInVarArgFunc: false
942body:             |
943  bb.0 (%ir-block.0):
944    liveins: $rax, $rbp, $rbx
945
946    ; CHECK-LABEL: name: testleaadd_rbp_index2_64
947    ; CHECK: liveins: $rax, $rbp, $rbx
948    ; CHECK: $rbx = LEA64r $noreg, 4, $rbp, 5, $noreg
949    ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags
950    ; CHECK: RET64 $ebx
951    $rbx = LEA64r $rbp, 4,  $rbp, 5, $noreg
952    RET64 $ebx
953
954...
955---
956name:            test_skip_opt_64
957alignment:       16
958exposesReturnsTwice: false
959legalized:       false
960regBankSelected: false
961selected:        false
962tracksRegLiveness: true
963liveins:
964  - { reg: '$rbx' }
965  - { reg: '$rbp' }
966frameInfo:
967  isFrameAddressTaken: false
968  isReturnAddressTaken: false
969  hasStackMap:     false
970  hasPatchPoint:   false
971  stackSize:       0
972  offsetAdjustment: 0
973  maxAlignment:    0
974  adjustsStack:    false
975  hasCalls:        false
976  maxCallFrameSize: 0
977  hasOpaqueSPAdjustment: false
978  hasVAStart:      false
979  hasMustTailInVarArgFunc: false
980body:             |
981  bb.0 (%ir-block.0):
982    liveins: $rax, $rbp, $rbx
983
984    ; CHECK-LABEL: name: test_skip_opt_64
985    ; CHECK: liveins: $rax, $rbp, $rbx
986    ; CHECK: $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg
987    ; CHECK: RET64 $ebp
988    $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg
989    RET64 $ebp
990
991...
992---
993name:            test_skip_eflags_64
994alignment:       16
995exposesReturnsTwice: false
996legalized:       false
997regBankSelected: false
998selected:        false
999tracksRegLiveness: true
1000liveins:
1001  - { reg: '$rbp' }
1002  - { reg: '$rax' }
1003frameInfo:
1004  isFrameAddressTaken: false
1005  isReturnAddressTaken: false
1006  hasStackMap:     false
1007  hasPatchPoint:   false
1008  stackSize:       0
1009  offsetAdjustment: 0
1010  maxAlignment:    0
1011  adjustsStack:    false
1012  hasCalls:        false
1013  maxCallFrameSize: 0
1014  hasOpaqueSPAdjustment: false
1015  hasVAStart:      false
1016  hasMustTailInVarArgFunc: false
1017body:             |
1018  ; CHECK-LABEL: name: test_skip_eflags_64
1019  ; CHECK: bb.0 (%ir-block.0):
1020  ; CHECK:   successors: %bb.1(0x80000000)
1021  ; CHECK:   liveins: $rax, $rbp, $rbx
1022  ; CHECK:   CMP64rr $rax, killed $rbx, implicit-def $eflags
1023  ; CHECK:   $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg
1024  ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
1025  ; CHECK:   RET64 $ebx
1026  ; CHECK: bb.1:
1027  ; CHECK:   liveins: $rax, $rbp, $rbx
1028  ; CHECK:   $rbp = LEA64r killed $rbx, 4, killed $rbx, 0, $noreg
1029  ; CHECK:   $rbp = ADD64ri32 $rbp, 5, implicit-def $eflags
1030  ; CHECK:   RET64 $ebp
1031  bb.0 (%ir-block.0):
1032    liveins: $rax, $rbp, $rbx
1033
1034    CMP64rr   $rax, killed $rbx, implicit-def $eflags
1035    $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg
1036    JCC_1 %bb.1, 4, implicit $eflags
1037    RET64 $ebx
1038  bb.1:
1039    liveins: $rax, $rbp, $rbx
1040    $rbp = LEA64r killed $rbx, 4, killed $rbx, 5, $noreg
1041    RET64 $ebp
1042
1043...
1044---
1045name:            test_skip_opt_64_32
1046alignment:       16
1047exposesReturnsTwice: false
1048legalized:       false
1049regBankSelected: false
1050selected:        false
1051tracksRegLiveness: true
1052liveins:
1053  - { reg: '$rbx' }
1054  - { reg: '$rbp' }
1055frameInfo:
1056  isFrameAddressTaken: false
1057  isReturnAddressTaken: false
1058  hasStackMap:     false
1059  hasPatchPoint:   false
1060  stackSize:       0
1061  offsetAdjustment: 0
1062  maxAlignment:    0
1063  adjustsStack:    false
1064  hasCalls:        false
1065  maxCallFrameSize: 0
1066  hasOpaqueSPAdjustment: false
1067  hasVAStart:      false
1068  hasMustTailInVarArgFunc: false
1069body:             |
1070  bb.0 (%ir-block.0):
1071    liveins: $rax, $rbp, $rbx
1072
1073    ; CHECK-LABEL: name: test_skip_opt_64_32
1074    ; CHECK: liveins: $rax, $rbp, $rbx
1075    ; CHECK: $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg
1076    ; CHECK: RET64 $ebp
1077    $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg
1078    RET64 $ebp
1079
1080...
1081---
1082name:            test_skip_eflags_64_32
1083alignment:       16
1084exposesReturnsTwice: false
1085legalized:       false
1086regBankSelected: false
1087selected:        false
1088tracksRegLiveness: true
1089liveins:
1090  - { reg: '$rbp' }
1091  - { reg: '$rax' }
1092frameInfo:
1093  isFrameAddressTaken: false
1094  isReturnAddressTaken: false
1095  hasStackMap:     false
1096  hasPatchPoint:   false
1097  stackSize:       0
1098  offsetAdjustment: 0
1099  maxAlignment:    0
1100  adjustsStack:    false
1101  hasCalls:        false
1102  maxCallFrameSize: 0
1103  hasOpaqueSPAdjustment: false
1104  hasVAStart:      false
1105  hasMustTailInVarArgFunc: false
1106body:             |
1107  ; CHECK-LABEL: name: test_skip_eflags_64_32
1108  ; CHECK: bb.0 (%ir-block.0):
1109  ; CHECK:   successors: %bb.1(0x80000000)
1110  ; CHECK:   liveins: $rax, $rbp, $rbx
1111  ; CHECK:   CMP64rr $rax, killed $rbx, implicit-def $eflags
1112  ; CHECK:   $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg
1113  ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
1114  ; CHECK:   RET64 $ebx
1115  ; CHECK: bb.1:
1116  ; CHECK:   liveins: $rax, $rbp, $rbx
1117  ; CHECK:   $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 0, $noreg
1118  ; CHECK:   $ebp = ADD32ri $ebp, 5, implicit-def $eflags
1119  ; CHECK:   RET64 $ebp
1120  bb.0 (%ir-block.0):
1121    liveins: $rax, $rbp, $rbx
1122
1123    CMP64rr   $rax, killed $rbx, implicit-def $eflags
1124    $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg
1125    JCC_1 %bb.1, 4, implicit $eflags
1126    RET64 $ebx
1127  bb.1:
1128    liveins: $rax, $rbp, $rbx
1129    $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 5, $noreg
1130    RET64 $ebp
1131
1132...
1133---
1134name:            pr43758
1135alignment:       16
1136exposesReturnsTwice: false
1137legalized:       false
1138regBankSelected: false
1139selected:        false
1140tracksRegLiveness: true
1141liveins:
1142  - { reg: '$rax' }
1143  - { reg: '$rbp' }
1144frameInfo:
1145  isFrameAddressTaken: false
1146  isReturnAddressTaken: false
1147  hasStackMap:     false
1148  hasPatchPoint:   false
1149  stackSize:       0
1150  offsetAdjustment: 0
1151  maxAlignment:    0
1152  adjustsStack:    false
1153  hasCalls:        false
1154  maxCallFrameSize: 0
1155  hasOpaqueSPAdjustment: false
1156  hasVAStart:      false
1157  hasMustTailInVarArgFunc: false
1158body:             |
1159  bb.0 (%ir-block.0):
1160    liveins: $rax, $rbp
1161
1162    ; CHECK-LABEL: name: pr43758
1163    ; CHECK: liveins: $rax, $rbp
1164    ; CHECK: DBG_VALUE 0, $noreg
1165    ; CHECK: NOOP
1166    ; CHECK: NOOP
1167    ; CHECK: NOOP
1168    ; CHECK: NOOP
1169    ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax
1170    ; CHECK: NOOP
1171    ; CHECK: NOOP
1172    ; CHECK: NOOP
1173    ; CHECK: NOOP
1174    ; CHECK: RET64 $ebp
1175    DBG_VALUE 0, $noreg
1176    NOOP
1177    NOOP
1178    NOOP
1179    NOOP
1180    $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
1181    NOOP
1182    NOOP
1183    NOOP
1184    NOOP
1185    RET64 $ebp
1186
1187...
1188...
1189
1190
1191
1192