Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / X86 / leaFixup64.mir
blob00b880ade32044a4c6aaea2f56ce57d62d389965
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
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   }
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   }
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   }
27   ;test2add_64: 3 operands LEA64r that can be replaced with 2 add instructions
28   define i32 @test2add_64() {
29     ret i32 0
30   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
78   ;test8: dst = base & scale!=1, can't optimize
79   define i32 @test8() {
80       ret i32 0
81   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
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   }
151   define i32 @pr43758() {
152     ret i32 0
153   }
158 name:            testleaadd_64_32_1
159 alignment:       16
160 exposesReturnsTwice: false
161 legalized:       false
162 regBankSelected: false
163 selected:        false
164 tracksRegLiveness: true
165 liveins:
166   - { reg: '$rax' }
167   - { reg: '$rbp' }
168 frameInfo:
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
182 body:             |
183   bb.0 (%ir-block.0):
184     liveins: $rax, $rbp
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
196 name:            testleaadd_rbp_64_32_1
197 alignment:       16
198 exposesReturnsTwice: false
199 legalized:       false
200 regBankSelected: false
201 selected:        false
202 tracksRegLiveness: true
203 liveins:
204   - { reg: '$rax' }
205   - { reg: '$rbp' }
206 frameInfo:
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
220 body:             |
221   bb.0 (%ir-block.0):
222     liveins: $rax, $rbp
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
234 name:            test1lea_rbp_64_32_1
235 alignment:       16
236 exposesReturnsTwice: false
237 legalized:       false
238 regBankSelected: false
239 selected:        false
240 tracksRegLiveness: true
241 liveins:
242   - { reg: '$rax' }
243   - { reg: '$rbp' }
244 frameInfo:
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
258 body:             |
259   bb.0 (%ir-block.0):
260     liveins: $rax, $rbp
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
271 name:            test2add_64
272 alignment:       16
273 exposesReturnsTwice: false
274 legalized:       false
275 regBankSelected: false
276 selected:        false
277 tracksRegLiveness: true
278 liveins:
279   - { reg: '$rax' }
280   - { reg: '$rbp' }
281 frameInfo:
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
295 body:             |
296   bb.0 (%ir-block.0):
297     liveins: $rax, $rbp
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
309 name:            test2add_rbp_64
310 alignment:       16
311 exposesReturnsTwice: false
312 legalized:       false
313 regBankSelected: false
314 selected:        false
315 tracksRegLiveness: true
316 liveins:
317   - { reg: '$rax' }
318   - { reg: '$rbp' }
319 frameInfo:
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
333 body:             |
334   bb.0 (%ir-block.0):
335     liveins: $rax, $rbp
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
347 name:            test1add_rbp_64
348 alignment:       16
349 exposesReturnsTwice: false
350 legalized:       false
351 regBankSelected: false
352 selected:        false
353 tracksRegLiveness: true
354 liveins:
355   - { reg: '$rax' }
356   - { reg: '$rbp' }
357 frameInfo:
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
371 body:             |
372   bb.0 (%ir-block.0):
373     liveins: $rax, $rbp
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
384 name:            testleaadd_64_32
385 alignment:       16
386 exposesReturnsTwice: false
387 legalized:       false
388 regBankSelected: false
389 selected:        false
390 tracksRegLiveness: true
391 liveins:
392   - { reg: '$rax' }
393   - { reg: '$rbp' }
394   - { reg: '$rbx' }
395 frameInfo:
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
409 body:             |
410   bb.0 (%ir-block.0):
411     liveins: $rax, $rbp
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
423 name:            testleaadd_rbp_64_32
424 alignment:       16
425 exposesReturnsTwice: false
426 legalized:       false
427 regBankSelected: false
428 selected:        false
429 tracksRegLiveness: true
430 liveins:
431   - { reg: '$rax' }
432   - { reg: '$rbp' }
433   - { reg: '$rbx' }
434 frameInfo:
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
448 body:             |
449   bb.0 (%ir-block.0):
450     liveins: $rax, $rbp
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
462 name:            test1lea_rbp_64_32
463 alignment:       16
464 exposesReturnsTwice: false
465 legalized:       false
466 regBankSelected: false
467 selected:        false
468 tracksRegLiveness: true
469 liveins:
470   - { reg: '$rax' }
471   - { reg: '$rbp' }
472   - { reg: '$rbx' }
473 frameInfo:
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
487 body:             |
488   bb.0 (%ir-block.0):
489     liveins: $rax, $rbp
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
500 name:            testleaadd_64
501 alignment:       16
502 exposesReturnsTwice: false
503 legalized:       false
504 regBankSelected: false
505 selected:        false
506 tracksRegLiveness: true
507 liveins:
508   - { reg: '$rax' }
509   - { reg: '$rbp' }
510   - { reg: '$rbx' }
511 frameInfo:
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
525 body:             |
526   bb.0 (%ir-block.0):
527     liveins: $rax, $rbp
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
539 name:            testleaadd_rbp_64
540 alignment:       16
541 exposesReturnsTwice: false
542 legalized:       false
543 regBankSelected: false
544 selected:        false
545 tracksRegLiveness: true
546 liveins:
547   - { reg: '$rax' }
548   - { reg: '$rbp' }
549   - { reg: '$rbx' }
550 frameInfo:
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
564 body:             |
565   bb.0 (%ir-block.0):
566     liveins: $rax, $rbp
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
578 name:            test1lea_rbp_64
579 alignment:       16
580 exposesReturnsTwice: false
581 legalized:       false
582 regBankSelected: false
583 selected:        false
584 tracksRegLiveness: true
585 liveins:
586   - { reg: '$rax' }
587   - { reg: '$rbp' }
588   - { reg: '$rbx' }
589 frameInfo:
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
603 body:             |
604   bb.0 (%ir-block.0):
605     liveins: $rax, $rbp
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
616 name:            test8
617 alignment:       16
618 exposesReturnsTwice: false
619 legalized:       false
620 regBankSelected: false
621 selected:        false
622 tracksRegLiveness: true
623 liveins:
624   - { reg: '$rdi' }
625   - { reg: '$rbp' }
626 frameInfo:
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
640 body:             |
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
657 name:            testleaaddi32_64_32
658 alignment:       16
659 exposesReturnsTwice: false
660 legalized:       false
661 regBankSelected: false
662 selected:        false
663 tracksRegLiveness: true
664 liveins:
665   - { reg: '$rax' }
666   - { reg: '$rbp' }
667 frameInfo:
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
681 body:             |
682   bb.0 (%ir-block.0):
683     liveins: $rax, $rbp
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
695 name:            test_leab_rbp_leais_64_32
696 alignment:       16
697 exposesReturnsTwice: false
698 legalized:       false
699 regBankSelected: false
700 selected:        false
701 tracksRegLiveness: true
702 liveins:
703   - { reg: '$rax' }
704   - { reg: '$rbp' }
705 frameInfo:
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
719 body:             |
720   bb.0 (%ir-block.0):
721     liveins: $rax, $rbp, $rbx
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
732 name:            test_leabi_rbp_leais_64_32
733 alignment:       16
734 exposesReturnsTwice: false
735 legalized:       false
736 regBankSelected: false
737 selected:        false
738 tracksRegLiveness: true
739 liveins:
740   - { reg: '$rbx' }
741   - { reg: '$rbp' }
742 frameInfo:
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
756 body:             |
757   bb.0 (%ir-block.0):
758     liveins: $rax, $rbp, $rbx
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
769 name:            testleaadd_rbp_index2_64_32
770 alignment:       16
771 exposesReturnsTwice: false
772 legalized:       false
773 regBankSelected: false
774 selected:        false
775 tracksRegLiveness: true
776 liveins:
777   - { reg: '$rbx' }
778   - { reg: '$rbp' }
779 frameInfo:
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
793 body:             |
794   bb.0 (%ir-block.0):
795     liveins: $eax, $ebp, $ebx
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
806 name:            test2addi32_64
807 alignment:       16
808 exposesReturnsTwice: false
809 legalized:       false
810 regBankSelected: false
811 selected:        false
812 tracksRegLiveness: true
813 liveins:
814   - { reg: '$rax' }
815   - { reg: '$rbp' }
816 frameInfo:
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
830 body:             |
831   bb.0 (%ir-block.0):
832     liveins: $rax, $rbp
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
844 name:            test_leab_rbp_leais_64
845 alignment:       16
846 exposesReturnsTwice: false
847 legalized:       false
848 regBankSelected: false
849 selected:        false
850 tracksRegLiveness: true
851 liveins:
852   - { reg: '$rax' }
853   - { reg: '$rbp' }
854 frameInfo:
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
868 body:             |
869   bb.0 (%ir-block.0):
870     liveins: $rax, $rbp, $rbx
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
881 name:            test_leabi_rbp_leais_64
882 alignment:       16
883 exposesReturnsTwice: false
884 legalized:       false
885 regBankSelected: false
886 selected:        false
887 tracksRegLiveness: true
888 liveins:
889   - { reg: '$rbx' }
890   - { reg: '$rbp' }
891 frameInfo:
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
905 body:             |
906   bb.0 (%ir-block.0):
907     liveins: $rax, $rbp, $rbx
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
918 name:            testleaadd_rbp_index2_64
919 alignment:       16
920 exposesReturnsTwice: false
921 legalized:       false
922 regBankSelected: false
923 selected:        false
924 tracksRegLiveness: true
925 liveins:
926   - { reg: '$rbx' }
927   - { reg: '$rbp' }
928 frameInfo:
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
942 body:             |
943   bb.0 (%ir-block.0):
944     liveins: $rax, $rbp, $rbx
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
956 name:            test_skip_opt_64
957 alignment:       16
958 exposesReturnsTwice: false
959 legalized:       false
960 regBankSelected: false
961 selected:        false
962 tracksRegLiveness: true
963 liveins:
964   - { reg: '$rbx' }
965   - { reg: '$rbp' }
966 frameInfo:
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
980 body:             |
981   bb.0 (%ir-block.0):
982     liveins: $rax, $rbp, $rbx
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
993 name:            test_skip_eflags_64
994 alignment:       16
995 exposesReturnsTwice: false
996 legalized:       false
997 regBankSelected: false
998 selected:        false
999 tracksRegLiveness: true
1000 liveins:
1001   - { reg: '$rbp' }
1002   - { reg: '$rax' }
1003 frameInfo:
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
1017 body:             |
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
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
1045 name:            test_skip_opt_64_32
1046 alignment:       16
1047 exposesReturnsTwice: false
1048 legalized:       false
1049 regBankSelected: false
1050 selected:        false
1051 tracksRegLiveness: true
1052 liveins:
1053   - { reg: '$rbx' }
1054   - { reg: '$rbp' }
1055 frameInfo:
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
1069 body:             |
1070   bb.0 (%ir-block.0):
1071     liveins: $rax, $rbp, $rbx
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
1082 name:            test_skip_eflags_64_32
1083 alignment:       16
1084 exposesReturnsTwice: false
1085 legalized:       false
1086 regBankSelected: false
1087 selected:        false
1088 tracksRegLiveness: true
1089 liveins:
1090   - { reg: '$rbp' }
1091   - { reg: '$rax' }
1092 frameInfo:
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
1106 body:             |
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
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
1134 name:            pr43758
1135 alignment:       16
1136 exposesReturnsTwice: false
1137 legalized:       false
1138 regBankSelected: false
1139 selected:        false
1140 tracksRegLiveness: true
1141 liveins:
1142   - { reg: '$rax' }
1143   - { reg: '$rbp' }
1144 frameInfo:
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
1158 body:             |
1159   bb.0 (%ir-block.0):
1160     liveins: $rax, $rbp
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