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  ;test1mov1add_rbp_64_32: 2 operands LEA64_32r cannot be replaced with 1 add 1 mov instructions
90  ; where the base is rbp/r13/ebp register
91  define i32 @test1mov1add_rbp_64_32() {
92    ret i32 0
93  }
94
95  ;testleaadd_rbp_index_64_32: 3 operands LEA64_32r that cannot replaced with 1 lea 1 add instructions
96  ; where the base and the index are ebp register and there is offset
97  define i32 @testleaadd_rbp_index_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  ;test1mov1add_rbp_64: 2 operands LEA64r that can be replaced with 1 add 1 mov instructions
114  ; where the base is rbp/r13/ebp register
115  define i32 @test1mov1add_rbp_64() {
116    ret i32 0
117  }
118
119  ;testleaadd_rbp_index_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions
120  ; where the base and the index are ebp register and there is offset
121  define i32 @testleaadd_rbp_index_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
152...
153---
154name:            testleaadd_64_32_1
155alignment:       16
156exposesReturnsTwice: false
157legalized:       false
158regBankSelected: false
159selected:        false
160tracksRegLiveness: true
161liveins:
162  - { reg: '$rax' }
163  - { reg: '$rbp' }
164frameInfo:
165  isFrameAddressTaken: false
166  isReturnAddressTaken: false
167  hasStackMap:     false
168  hasPatchPoint:   false
169  stackSize:       0
170  offsetAdjustment: 0
171  maxAlignment:    0
172  adjustsStack:    false
173  hasCalls:        false
174  maxCallFrameSize: 0
175  hasOpaqueSPAdjustment: false
176  hasVAStart:      false
177  hasMustTailInVarArgFunc: false
178body:             |
179  bb.0 (%ir-block.0):
180    liveins: $rax, $rbp
181
182    ; CHECK-LABEL: name: testleaadd_64_32_1
183    ; CHECK: liveins: $rax, $rbp
184    ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp
185    ; CHECK: $eax = ADD32ri8 $eax, -5, implicit-def $eflags
186    ; CHECK: RETQ $eax
187    $eax = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg
188    RETQ $eax
189
190...
191---
192name:            testleaadd_rbp_64_32_1
193alignment:       16
194exposesReturnsTwice: false
195legalized:       false
196regBankSelected: false
197selected:        false
198tracksRegLiveness: true
199liveins:
200  - { reg: '$rax' }
201  - { reg: '$rbp' }
202frameInfo:
203  isFrameAddressTaken: false
204  isReturnAddressTaken: false
205  hasStackMap:     false
206  hasPatchPoint:   false
207  stackSize:       0
208  offsetAdjustment: 0
209  maxAlignment:    0
210  adjustsStack:    false
211  hasCalls:        false
212  maxCallFrameSize: 0
213  hasOpaqueSPAdjustment: false
214  hasVAStart:      false
215  hasMustTailInVarArgFunc: false
216body:             |
217  bb.0 (%ir-block.0):
218    liveins: $rax, $rbp
219
220    ; CHECK-LABEL: name: testleaadd_rbp_64_32_1
221    ; CHECK: liveins: $rax, $rbp
222    ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax
223    ; CHECK: $ebp = ADD32ri8 $ebp, -5, implicit-def $eflags
224    ; CHECK: RETQ $ebp
225    $ebp = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg
226    RETQ $ebp
227
228...
229---
230name:            test1lea_rbp_64_32_1
231alignment:       16
232exposesReturnsTwice: false
233legalized:       false
234regBankSelected: false
235selected:        false
236tracksRegLiveness: true
237liveins:
238  - { reg: '$rax' }
239  - { reg: '$rbp' }
240frameInfo:
241  isFrameAddressTaken: false
242  isReturnAddressTaken: false
243  hasStackMap:     false
244  hasPatchPoint:   false
245  stackSize:       0
246  offsetAdjustment: 0
247  maxAlignment:    0
248  adjustsStack:    false
249  hasCalls:        false
250  maxCallFrameSize: 0
251  hasOpaqueSPAdjustment: false
252  hasVAStart:      false
253  hasMustTailInVarArgFunc: false
254body:             |
255  bb.0 (%ir-block.0):
256    liveins: $rax, $rbp
257
258    ; CHECK-LABEL: name: test1lea_rbp_64_32_1
259    ; CHECK: liveins: $rax, $rbp
260    ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax
261    ; CHECK: RETQ $ebp
262    $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
263    RETQ $ebp
264
265...
266---
267name:            test2add_64
268alignment:       16
269exposesReturnsTwice: false
270legalized:       false
271regBankSelected: false
272selected:        false
273tracksRegLiveness: true
274liveins:
275  - { reg: '$rax' }
276  - { reg: '$rbp' }
277frameInfo:
278  isFrameAddressTaken: false
279  isReturnAddressTaken: false
280  hasStackMap:     false
281  hasPatchPoint:   false
282  stackSize:       0
283  offsetAdjustment: 0
284  maxAlignment:    0
285  adjustsStack:    false
286  hasCalls:        false
287  maxCallFrameSize: 0
288  hasOpaqueSPAdjustment: false
289  hasVAStart:      false
290  hasMustTailInVarArgFunc: false
291body:             |
292  bb.0 (%ir-block.0):
293    liveins: $rax, $rbp
294
295    ; CHECK-LABEL: name: test2add_64
296    ; CHECK: liveins: $rax, $rbp
297    ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags
298    ; CHECK: $rax = ADD64ri8 $rax, -5, implicit-def $eflags
299    ; CHECK: RETQ $eax
300    $rax = LEA64r killed $rax, 1, killed $rbp, -5, $noreg
301    RETQ $eax
302
303...
304---
305name:            test2add_rbp_64
306alignment:       16
307exposesReturnsTwice: false
308legalized:       false
309regBankSelected: false
310selected:        false
311tracksRegLiveness: true
312liveins:
313  - { reg: '$rax' }
314  - { reg: '$rbp' }
315frameInfo:
316  isFrameAddressTaken: false
317  isReturnAddressTaken: false
318  hasStackMap:     false
319  hasPatchPoint:   false
320  stackSize:       0
321  offsetAdjustment: 0
322  maxAlignment:    0
323  adjustsStack:    false
324  hasCalls:        false
325  maxCallFrameSize: 0
326  hasOpaqueSPAdjustment: false
327  hasVAStart:      false
328  hasMustTailInVarArgFunc: false
329body:             |
330  bb.0 (%ir-block.0):
331    liveins: $rax, $rbp
332
333    ; CHECK-LABEL: name: test2add_rbp_64
334    ; CHECK: liveins: $rax, $rbp
335    ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags
336    ; CHECK: $rbp = ADD64ri8 $rbp, -5, implicit-def $eflags
337    ; CHECK: RETQ $ebp
338    $rbp = LEA64r killed $rbp, 1, killed $rax, -5, $noreg
339    RETQ $ebp
340
341...
342---
343name:            test1add_rbp_64
344alignment:       16
345exposesReturnsTwice: false
346legalized:       false
347regBankSelected: false
348selected:        false
349tracksRegLiveness: true
350liveins:
351  - { reg: '$rax' }
352  - { reg: '$rbp' }
353frameInfo:
354  isFrameAddressTaken: false
355  isReturnAddressTaken: false
356  hasStackMap:     false
357  hasPatchPoint:   false
358  stackSize:       0
359  offsetAdjustment: 0
360  maxAlignment:    0
361  adjustsStack:    false
362  hasCalls:        false
363  maxCallFrameSize: 0
364  hasOpaqueSPAdjustment: false
365  hasVAStart:      false
366  hasMustTailInVarArgFunc: false
367body:             |
368  bb.0 (%ir-block.0):
369    liveins: $rax, $rbp
370
371    ; CHECK-LABEL: name: test1add_rbp_64
372    ; CHECK: liveins: $rax, $rbp
373    ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags
374    ; CHECK: RETQ $ebp
375    $rbp = LEA64r killed $rbp, 1, killed $rax, 0, $noreg
376    RETQ $ebp
377
378...
379---
380name:            testleaadd_64_32
381alignment:       16
382exposesReturnsTwice: false
383legalized:       false
384regBankSelected: false
385selected:        false
386tracksRegLiveness: true
387liveins:
388  - { reg: '$rax' }
389  - { reg: '$rbp' }
390  - { reg: '$rbx' }
391frameInfo:
392  isFrameAddressTaken: false
393  isReturnAddressTaken: false
394  hasStackMap:     false
395  hasPatchPoint:   false
396  stackSize:       0
397  offsetAdjustment: 0
398  maxAlignment:    0
399  adjustsStack:    false
400  hasCalls:        false
401  maxCallFrameSize: 0
402  hasOpaqueSPAdjustment: false
403  hasVAStart:      false
404  hasMustTailInVarArgFunc: false
405body:             |
406  bb.0 (%ir-block.0):
407    liveins: $rax, $rbp
408
409    ; CHECK-LABEL: name: testleaadd_64_32
410    ; CHECK: liveins: $rax, $rbp
411    ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg
412    ; CHECK: $ebx = ADD32ri8 $ebx, -5, implicit-def $eflags
413    ; CHECK: RETQ $ebx
414    $ebx = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg
415    RETQ $ebx
416
417...
418---
419name:            testleaadd_rbp_64_32
420alignment:       16
421exposesReturnsTwice: false
422legalized:       false
423regBankSelected: false
424selected:        false
425tracksRegLiveness: true
426liveins:
427  - { reg: '$rax' }
428  - { reg: '$rbp' }
429  - { reg: '$rbx' }
430frameInfo:
431  isFrameAddressTaken: false
432  isReturnAddressTaken: false
433  hasStackMap:     false
434  hasPatchPoint:   false
435  stackSize:       0
436  offsetAdjustment: 0
437  maxAlignment:    0
438  adjustsStack:    false
439  hasCalls:        false
440  maxCallFrameSize: 0
441  hasOpaqueSPAdjustment: false
442  hasVAStart:      false
443  hasMustTailInVarArgFunc: false
444body:             |
445  bb.0 (%ir-block.0):
446    liveins: $rax, $rbp
447
448    ; CHECK-LABEL: name: testleaadd_rbp_64_32
449    ; CHECK: liveins: $rax, $rbp
450    ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg
451    ; CHECK: $ebx = ADD32ri8 $ebx, -5, implicit-def $eflags
452    ; CHECK: RETQ $ebx
453    $ebx = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg
454    RETQ $ebx
455
456...
457---
458name:            test1lea_rbp_64_32
459alignment:       16
460exposesReturnsTwice: false
461legalized:       false
462regBankSelected: false
463selected:        false
464tracksRegLiveness: true
465liveins:
466  - { reg: '$rax' }
467  - { reg: '$rbp' }
468  - { reg: '$rbx' }
469frameInfo:
470  isFrameAddressTaken: false
471  isReturnAddressTaken: false
472  hasStackMap:     false
473  hasPatchPoint:   false
474  stackSize:       0
475  offsetAdjustment: 0
476  maxAlignment:    0
477  adjustsStack:    false
478  hasCalls:        false
479  maxCallFrameSize: 0
480  hasOpaqueSPAdjustment: false
481  hasVAStart:      false
482  hasMustTailInVarArgFunc: false
483body:             |
484  bb.0 (%ir-block.0):
485    liveins: $rax, $rbp
486
487    ; CHECK-LABEL: name: test1lea_rbp_64_32
488    ; CHECK: liveins: $rax, $rbp
489    ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg
490    ; CHECK: RETQ $ebx
491    $ebx = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
492    RETQ $ebx
493
494...
495---
496name:            testleaadd_64
497alignment:       16
498exposesReturnsTwice: false
499legalized:       false
500regBankSelected: false
501selected:        false
502tracksRegLiveness: true
503liveins:
504  - { reg: '$rax' }
505  - { reg: '$rbp' }
506  - { reg: '$rbx' }
507frameInfo:
508  isFrameAddressTaken: false
509  isReturnAddressTaken: false
510  hasStackMap:     false
511  hasPatchPoint:   false
512  stackSize:       0
513  offsetAdjustment: 0
514  maxAlignment:    0
515  adjustsStack:    false
516  hasCalls:        false
517  maxCallFrameSize: 0
518  hasOpaqueSPAdjustment: false
519  hasVAStart:      false
520  hasMustTailInVarArgFunc: false
521body:             |
522  bb.0 (%ir-block.0):
523    liveins: $rax, $rbp
524
525    ; CHECK-LABEL: name: testleaadd_64
526    ; CHECK: liveins: $rax, $rbp
527    ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg
528    ; CHECK: $rbx = ADD64ri8 $rbx, -5, implicit-def $eflags
529    ; CHECK: RETQ $ebx
530    $rbx = LEA64r killed $rax, 1, killed $rbp, -5, $noreg
531    RETQ $ebx
532
533...
534---
535name:            testleaadd_rbp_64
536alignment:       16
537exposesReturnsTwice: false
538legalized:       false
539regBankSelected: false
540selected:        false
541tracksRegLiveness: true
542liveins:
543  - { reg: '$rax' }
544  - { reg: '$rbp' }
545  - { reg: '$rbx' }
546frameInfo:
547  isFrameAddressTaken: false
548  isReturnAddressTaken: false
549  hasStackMap:     false
550  hasPatchPoint:   false
551  stackSize:       0
552  offsetAdjustment: 0
553  maxAlignment:    0
554  adjustsStack:    false
555  hasCalls:        false
556  maxCallFrameSize: 0
557  hasOpaqueSPAdjustment: false
558  hasVAStart:      false
559  hasMustTailInVarArgFunc: false
560body:             |
561  bb.0 (%ir-block.0):
562    liveins: $rax, $rbp
563
564    ; CHECK-LABEL: name: testleaadd_rbp_64
565    ; CHECK: liveins: $rax, $rbp
566    ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg
567    ; CHECK: $rbx = ADD64ri8 $rbx, -5, implicit-def $eflags
568    ; CHECK: RETQ $ebx
569    $rbx = LEA64r killed $rbp, 1, killed $rax, -5, $noreg
570    RETQ $ebx
571
572...
573---
574name:            test1lea_rbp_64
575alignment:       16
576exposesReturnsTwice: false
577legalized:       false
578regBankSelected: false
579selected:        false
580tracksRegLiveness: true
581liveins:
582  - { reg: '$rax' }
583  - { reg: '$rbp' }
584  - { reg: '$rbx' }
585frameInfo:
586  isFrameAddressTaken: false
587  isReturnAddressTaken: false
588  hasStackMap:     false
589  hasPatchPoint:   false
590  stackSize:       0
591  offsetAdjustment: 0
592  maxAlignment:    0
593  adjustsStack:    false
594  hasCalls:        false
595  maxCallFrameSize: 0
596  hasOpaqueSPAdjustment: false
597  hasVAStart:      false
598  hasMustTailInVarArgFunc: false
599body:             |
600  bb.0 (%ir-block.0):
601    liveins: $rax, $rbp
602
603    ; CHECK-LABEL: name: test1lea_rbp_64
604    ; CHECK: liveins: $rax, $rbp
605    ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg
606    ; CHECK: RETQ $ebx
607    $rbx = LEA64r killed $rbp, 1, killed $rax, 0, $noreg
608    RETQ $ebx
609
610...
611---
612name:            test8
613alignment:       16
614exposesReturnsTwice: false
615legalized:       false
616regBankSelected: false
617selected:        false
618tracksRegLiveness: true
619liveins:
620  - { reg: '$rdi' }
621  - { reg: '$rbp' }
622frameInfo:
623  isFrameAddressTaken: false
624  isReturnAddressTaken: false
625  hasStackMap:     false
626  hasPatchPoint:   false
627  stackSize:       0
628  offsetAdjustment: 0
629  maxAlignment:    0
630  adjustsStack:    false
631  hasCalls:        false
632  maxCallFrameSize: 0
633  hasOpaqueSPAdjustment: false
634  hasVAStart:      false
635  hasMustTailInVarArgFunc: false
636body:             |
637  bb.0 (%ir-block.0):
638    liveins: $rdi, $rbp
639    ; CHECK-LABEL: name: test8
640    ; CHECK: liveins: $rdi, $rbp
641    ; CHECK: $rbp = KILL $rbp, implicit-def $rbp
642    ; CHECK: $r13 = KILL $rdi, implicit-def $r13
643    ; CHECK: $r12 = LEA64r $noreg, 2, killed $r13, 5, $noreg
644    ; CHECK: $r12 = ADD64rr $r12, killed $rbp, implicit-def $eflags
645    ; CHECK: RETQ $r12
646    $rbp = KILL $rbp, implicit-def $rbp
647    $r13 = KILL $rdi, implicit-def $r13
648    $r12 = LEA64r killed $rbp, 2, killed $r13, 5, $noreg
649    RETQ $r12
650
651...
652---
653name:            testleaaddi32_64_32
654alignment:       16
655exposesReturnsTwice: false
656legalized:       false
657regBankSelected: false
658selected:        false
659tracksRegLiveness: true
660liveins:
661  - { reg: '$rax' }
662  - { reg: '$rbp' }
663frameInfo:
664  isFrameAddressTaken: false
665  isReturnAddressTaken: false
666  hasStackMap:     false
667  hasPatchPoint:   false
668  stackSize:       0
669  offsetAdjustment: 0
670  maxAlignment:    0
671  adjustsStack:    false
672  hasCalls:        false
673  maxCallFrameSize: 0
674  hasOpaqueSPAdjustment: false
675  hasVAStart:      false
676  hasMustTailInVarArgFunc: false
677body:             |
678  bb.0 (%ir-block.0):
679    liveins: $rax, $rbp
680
681    ; CHECK-LABEL: name: testleaaddi32_64_32
682    ; CHECK: liveins: $rax, $rbp
683    ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp
684    ; CHECK: $eax = ADD32ri $eax, 129, implicit-def $eflags
685    ; CHECK: RETQ $eax
686    $eax = LEA64_32r killed $rax, 1, killed $rbp, 129, $noreg
687    RETQ $eax
688
689...
690---
691name:            test1mov1add_rbp_64_32
692alignment:       16
693exposesReturnsTwice: false
694legalized:       false
695regBankSelected: false
696selected:        false
697tracksRegLiveness: true
698liveins:
699  - { reg: '$rax' }
700  - { reg: '$rbp' }
701frameInfo:
702  isFrameAddressTaken: false
703  isReturnAddressTaken: false
704  hasStackMap:     false
705  hasPatchPoint:   false
706  stackSize:       0
707  offsetAdjustment: 0
708  maxAlignment:    0
709  adjustsStack:    false
710  hasCalls:        false
711  maxCallFrameSize: 0
712  hasOpaqueSPAdjustment: false
713  hasVAStart:      false
714  hasMustTailInVarArgFunc: false
715body:             |
716  bb.0 (%ir-block.0):
717    liveins: $rax, $rbp, $rbx
718
719    ; CHECK-LABEL: name: test1mov1add_rbp_64_32
720    ; CHECK: liveins: $rax, $rbp, $rbx
721    ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg
722    ; CHECK: RETQ $ebx
723    $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg
724    RETQ $ebx
725
726...
727---
728name:            testleaadd_rbp_index_64_32
729alignment:       16
730exposesReturnsTwice: false
731legalized:       false
732regBankSelected: false
733selected:        false
734tracksRegLiveness: true
735liveins:
736  - { reg: '$rbx' }
737  - { reg: '$rbp' }
738frameInfo:
739  isFrameAddressTaken: false
740  isReturnAddressTaken: false
741  hasStackMap:     false
742  hasPatchPoint:   false
743  stackSize:       0
744  offsetAdjustment: 0
745  maxAlignment:    0
746  adjustsStack:    false
747  hasCalls:        false
748  maxCallFrameSize: 0
749  hasOpaqueSPAdjustment: false
750  hasVAStart:      false
751  hasMustTailInVarArgFunc: false
752body:             |
753  bb.0 (%ir-block.0):
754    liveins: $rax, $rbp, $rbx
755
756    ; CHECK-LABEL: name: testleaadd_rbp_index_64_32
757    ; CHECK: liveins: $rax, $rbp, $rbx
758    ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg
759    ; CHECK: RETQ $ebx
760    $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg
761    RETQ $ebx
762
763...
764---
765name:            testleaadd_rbp_index2_64_32
766alignment:       16
767exposesReturnsTwice: false
768legalized:       false
769regBankSelected: false
770selected:        false
771tracksRegLiveness: true
772liveins:
773  - { reg: '$rbx' }
774  - { reg: '$rbp' }
775frameInfo:
776  isFrameAddressTaken: false
777  isReturnAddressTaken: false
778  hasStackMap:     false
779  hasPatchPoint:   false
780  stackSize:       0
781  offsetAdjustment: 0
782  maxAlignment:    0
783  adjustsStack:    false
784  hasCalls:        false
785  maxCallFrameSize: 0
786  hasOpaqueSPAdjustment: false
787  hasVAStart:      false
788  hasMustTailInVarArgFunc: false
789body:             |
790  bb.0 (%ir-block.0):
791    liveins: $eax, $ebp, $ebx
792
793    ; CHECK-LABEL: name: testleaadd_rbp_index2_64_32
794    ; CHECK: liveins: $eax, $ebp, $ebx
795    ; CHECK: $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg
796    ; CHECK: RETQ $ebx
797    $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg
798    RETQ $ebx
799
800...
801---
802name:            test2addi32_64
803alignment:       16
804exposesReturnsTwice: false
805legalized:       false
806regBankSelected: false
807selected:        false
808tracksRegLiveness: true
809liveins:
810  - { reg: '$rax' }
811  - { reg: '$rbp' }
812frameInfo:
813  isFrameAddressTaken: false
814  isReturnAddressTaken: false
815  hasStackMap:     false
816  hasPatchPoint:   false
817  stackSize:       0
818  offsetAdjustment: 0
819  maxAlignment:    0
820  adjustsStack:    false
821  hasCalls:        false
822  maxCallFrameSize: 0
823  hasOpaqueSPAdjustment: false
824  hasVAStart:      false
825  hasMustTailInVarArgFunc: false
826body:             |
827  bb.0 (%ir-block.0):
828    liveins: $rax, $rbp
829
830    ; CHECK-LABEL: name: test2addi32_64
831    ; CHECK: liveins: $rax, $rbp
832    ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags
833    ; CHECK: $rax = ADD64ri32 $rax, 129, implicit-def $eflags
834    ; CHECK: RETQ $eax
835    $rax = LEA64r killed $rax, 1, killed $rbp, 129, $noreg
836    RETQ $eax
837
838...
839---
840name:            test1mov1add_rbp_64
841alignment:       16
842exposesReturnsTwice: false
843legalized:       false
844regBankSelected: false
845selected:        false
846tracksRegLiveness: true
847liveins:
848  - { reg: '$rax' }
849  - { reg: '$rbp' }
850frameInfo:
851  isFrameAddressTaken: false
852  isReturnAddressTaken: false
853  hasStackMap:     false
854  hasPatchPoint:   false
855  stackSize:       0
856  offsetAdjustment: 0
857  maxAlignment:    0
858  adjustsStack:    false
859  hasCalls:        false
860  maxCallFrameSize: 0
861  hasOpaqueSPAdjustment: false
862  hasVAStart:      false
863  hasMustTailInVarArgFunc: false
864body:             |
865  bb.0 (%ir-block.0):
866    liveins: $rax, $rbp, $rbx
867
868    ; CHECK-LABEL: name: test1mov1add_rbp_64
869    ; CHECK: liveins: $rax, $rbp, $rbx
870    ; CHECK: $rbx = MOV64rr $rbp
871    ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags
872    ; CHECK: $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg
873    ; CHECK: RETQ $ebx
874    $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg
875    RETQ $ebx
876
877...
878---
879name:            testleaadd_rbp_index_64
880alignment:       16
881exposesReturnsTwice: false
882legalized:       false
883regBankSelected: false
884selected:        false
885tracksRegLiveness: true
886liveins:
887  - { reg: '$rbx' }
888  - { reg: '$rbp' }
889frameInfo:
890  isFrameAddressTaken: false
891  isReturnAddressTaken: false
892  hasStackMap:     false
893  hasPatchPoint:   false
894  stackSize:       0
895  offsetAdjustment: 0
896  maxAlignment:    0
897  adjustsStack:    false
898  hasCalls:        false
899  maxCallFrameSize: 0
900  hasOpaqueSPAdjustment: false
901  hasVAStart:      false
902  hasMustTailInVarArgFunc: false
903body:             |
904  bb.0 (%ir-block.0):
905    liveins: $rax, $rbp, $rbx
906
907    ; CHECK-LABEL: name: testleaadd_rbp_index_64
908    ; CHECK: liveins: $rax, $rbp, $rbx
909    ; CHECK: $rbx = LEA64r $noreg, 1, $rbp, 5, $noreg
910    ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags
911    ; CHECK: RETQ $ebx
912    $rbx = LEA64r $rbp, 1, $rbp, 5, $noreg
913    RETQ $ebx
914
915...
916---
917name:            testleaadd_rbp_index2_64
918alignment:       16
919exposesReturnsTwice: false
920legalized:       false
921regBankSelected: false
922selected:        false
923tracksRegLiveness: true
924liveins:
925  - { reg: '$rbx' }
926  - { reg: '$rbp' }
927frameInfo:
928  isFrameAddressTaken: false
929  isReturnAddressTaken: false
930  hasStackMap:     false
931  hasPatchPoint:   false
932  stackSize:       0
933  offsetAdjustment: 0
934  maxAlignment:    0
935  adjustsStack:    false
936  hasCalls:        false
937  maxCallFrameSize: 0
938  hasOpaqueSPAdjustment: false
939  hasVAStart:      false
940  hasMustTailInVarArgFunc: false
941body:             |
942  bb.0 (%ir-block.0):
943    liveins: $rax, $rbp, $rbx
944
945    ; CHECK-LABEL: name: testleaadd_rbp_index2_64
946    ; CHECK: liveins: $rax, $rbp, $rbx
947    ; CHECK: $rbx = LEA64r $noreg, 4, $rbp, 5, $noreg
948    ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags
949    ; CHECK: RETQ $ebx
950    $rbx = LEA64r $rbp, 4,  $rbp, 5, $noreg
951    RETQ $ebx
952
953...
954---
955name:            test_skip_opt_64
956alignment:       16
957exposesReturnsTwice: false
958legalized:       false
959regBankSelected: false
960selected:        false
961tracksRegLiveness: true
962liveins:
963  - { reg: '$rbx' }
964  - { reg: '$rbp' }
965frameInfo:
966  isFrameAddressTaken: false
967  isReturnAddressTaken: false
968  hasStackMap:     false
969  hasPatchPoint:   false
970  stackSize:       0
971  offsetAdjustment: 0
972  maxAlignment:    0
973  adjustsStack:    false
974  hasCalls:        false
975  maxCallFrameSize: 0
976  hasOpaqueSPAdjustment: false
977  hasVAStart:      false
978  hasMustTailInVarArgFunc: false
979body:             |
980  bb.0 (%ir-block.0):
981    liveins: $rax, $rbp, $rbx
982
983    ; CHECK-LABEL: name: test_skip_opt_64
984    ; CHECK: liveins: $rax, $rbp, $rbx
985    ; CHECK: $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg
986    ; CHECK: RETQ $ebp
987    $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg
988    RETQ $ebp
989
990...
991---
992name:            test_skip_eflags_64
993alignment:       16
994exposesReturnsTwice: false
995legalized:       false
996regBankSelected: false
997selected:        false
998tracksRegLiveness: true
999liveins:
1000  - { reg: '$rbp' }
1001  - { reg: '$rax' }
1002frameInfo:
1003  isFrameAddressTaken: false
1004  isReturnAddressTaken: false
1005  hasStackMap:     false
1006  hasPatchPoint:   false
1007  stackSize:       0
1008  offsetAdjustment: 0
1009  maxAlignment:    0
1010  adjustsStack:    false
1011  hasCalls:        false
1012  maxCallFrameSize: 0
1013  hasOpaqueSPAdjustment: false
1014  hasVAStart:      false
1015  hasMustTailInVarArgFunc: false
1016body:             |
1017  ; CHECK-LABEL: name: test_skip_eflags_64
1018  ; CHECK: bb.0 (%ir-block.0):
1019  ; CHECK:   successors: %bb.1(0x80000000)
1020  ; CHECK:   liveins: $rax, $rbp, $rbx
1021  ; CHECK:   CMP64rr $rax, killed $rbx, implicit-def $eflags
1022  ; CHECK:   $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg
1023  ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
1024  ; CHECK:   RETQ $ebx
1025  ; CHECK: bb.1:
1026  ; CHECK:   liveins: $rax, $rbp, $rbx
1027  ; CHECK:   $rbp = LEA64r killed $rbx, 4, killed $rbx, 0, $noreg
1028  ; CHECK:   $rbp = ADD64ri8 $rbp, 5, implicit-def $eflags
1029  ; CHECK:   RETQ $ebp
1030  bb.0 (%ir-block.0):
1031    liveins: $rax, $rbp, $rbx
1032
1033    CMP64rr   $rax, killed $rbx, implicit-def $eflags
1034    $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg
1035    JCC_1 %bb.1, 4, implicit $eflags
1036    RETQ $ebx
1037  bb.1:
1038    liveins: $rax, $rbp, $rbx
1039    $rbp = LEA64r killed $rbx, 4, killed $rbx, 5, $noreg
1040    RETQ $ebp
1041
1042...
1043---
1044name:            test_skip_opt_64_32
1045alignment:       16
1046exposesReturnsTwice: false
1047legalized:       false
1048regBankSelected: false
1049selected:        false
1050tracksRegLiveness: true
1051liveins:
1052  - { reg: '$rbx' }
1053  - { reg: '$rbp' }
1054frameInfo:
1055  isFrameAddressTaken: false
1056  isReturnAddressTaken: false
1057  hasStackMap:     false
1058  hasPatchPoint:   false
1059  stackSize:       0
1060  offsetAdjustment: 0
1061  maxAlignment:    0
1062  adjustsStack:    false
1063  hasCalls:        false
1064  maxCallFrameSize: 0
1065  hasOpaqueSPAdjustment: false
1066  hasVAStart:      false
1067  hasMustTailInVarArgFunc: false
1068body:             |
1069  bb.0 (%ir-block.0):
1070    liveins: $rax, $rbp, $rbx
1071
1072    ; CHECK-LABEL: name: test_skip_opt_64_32
1073    ; CHECK: liveins: $rax, $rbp, $rbx
1074    ; CHECK: $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg
1075    ; CHECK: RETQ $ebp
1076    $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg
1077    RETQ $ebp
1078
1079...
1080---
1081name:            test_skip_eflags_64_32
1082alignment:       16
1083exposesReturnsTwice: false
1084legalized:       false
1085regBankSelected: false
1086selected:        false
1087tracksRegLiveness: true
1088liveins:
1089  - { reg: '$rbp' }
1090  - { reg: '$rax' }
1091frameInfo:
1092  isFrameAddressTaken: false
1093  isReturnAddressTaken: false
1094  hasStackMap:     false
1095  hasPatchPoint:   false
1096  stackSize:       0
1097  offsetAdjustment: 0
1098  maxAlignment:    0
1099  adjustsStack:    false
1100  hasCalls:        false
1101  maxCallFrameSize: 0
1102  hasOpaqueSPAdjustment: false
1103  hasVAStart:      false
1104  hasMustTailInVarArgFunc: false
1105body:             |
1106  ; CHECK-LABEL: name: test_skip_eflags_64_32
1107  ; CHECK: bb.0 (%ir-block.0):
1108  ; CHECK:   successors: %bb.1(0x80000000)
1109  ; CHECK:   liveins: $rax, $rbp, $rbx
1110  ; CHECK:   CMP64rr $rax, killed $rbx, implicit-def $eflags
1111  ; CHECK:   $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg
1112  ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
1113  ; CHECK:   RETQ $ebx
1114  ; CHECK: bb.1:
1115  ; CHECK:   liveins: $rax, $rbp, $rbx
1116  ; CHECK:   $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 0, $noreg
1117  ; CHECK:   $ebp = ADD32ri8 $ebp, 5, implicit-def $eflags
1118  ; CHECK:   RETQ $ebp
1119  bb.0 (%ir-block.0):
1120    liveins: $rax, $rbp, $rbx
1121
1122    CMP64rr   $rax, killed $rbx, implicit-def $eflags
1123    $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg
1124    JCC_1 %bb.1, 4, implicit $eflags
1125    RETQ $ebx
1126  bb.1:
1127    liveins: $rax, $rbp, $rbx
1128    $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 5, $noreg
1129    RETQ $ebp
1130
1131...
1132
1133
1134
1135