[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / leaFixup64.mir
blob7fdf582055c2405585a9df620f526f8f6d84ba84
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   ;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   }
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   }
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   ;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   }
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   }
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 = ADD32ri8 $eax, -5, implicit-def $eflags
190     ; CHECK: RETQ $eax
191     $eax = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg
192     RETQ $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 = ADD32ri8 $ebp, -5, implicit-def $eflags
228     ; CHECK: RETQ $ebp
229     $ebp = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg
230     RETQ $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: RETQ $ebp
266     $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
267     RETQ $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 = ADD64ri8 $rax, -5, implicit-def $eflags
303     ; CHECK: RETQ $eax
304     $rax = LEA64r killed $rax, 1, killed $rbp, -5, $noreg
305     RETQ $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 = ADD64ri8 $rbp, -5, implicit-def $eflags
341     ; CHECK: RETQ $ebp
342     $rbp = LEA64r killed $rbp, 1, killed $rax, -5, $noreg
343     RETQ $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: RETQ $ebp
379     $rbp = LEA64r killed $rbp, 1, killed $rax, 0, $noreg
380     RETQ $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 = ADD32ri8 $ebx, -5, implicit-def $eflags
417     ; CHECK: RETQ $ebx
418     $ebx = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg
419     RETQ $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 = ADD32ri8 $ebx, -5, implicit-def $eflags
456     ; CHECK: RETQ $ebx
457     $ebx = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg
458     RETQ $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: RETQ $ebx
495     $ebx = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
496     RETQ $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 = ADD64ri8 $rbx, -5, implicit-def $eflags
533     ; CHECK: RETQ $ebx
534     $rbx = LEA64r killed $rax, 1, killed $rbp, -5, $noreg
535     RETQ $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 = ADD64ri8 $rbx, -5, implicit-def $eflags
572     ; CHECK: RETQ $ebx
573     $rbx = LEA64r killed $rbp, 1, killed $rax, -5, $noreg
574     RETQ $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: RETQ $ebx
611     $rbx = LEA64r killed $rbp, 1, killed $rax, 0, $noreg
612     RETQ $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: RETQ $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     RETQ $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: RETQ $eax
690     $eax = LEA64_32r killed $rax, 1, killed $rbp, 129, $noreg
691     RETQ $eax
695 name:            test1mov1add_rbp_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: test1mov1add_rbp_64_32
724     ; CHECK: liveins: $rax, $rbp, $rbx
725     ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg
726     ; CHECK: RETQ $ebx
727     $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg
728     RETQ $ebx
732 name:            testleaadd_rbp_index_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: testleaadd_rbp_index_64_32
761     ; CHECK: liveins: $rax, $rbp, $rbx
762     ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg
763     ; CHECK: RETQ $ebx
764     $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg
765     RETQ $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: RETQ $ebx
801     $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg
802     RETQ $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: RETQ $eax
839     $rax = LEA64r killed $rax, 1, killed $rbp, 129, $noreg
840     RETQ $eax
844 name:            test1mov1add_rbp_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: test1mov1add_rbp_64
873     ; CHECK: liveins: $rax, $rbp, $rbx
874     ; CHECK: $rbx = MOV64rr $rbp
875     ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags
876     ; CHECK: RETQ $ebx
877     $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg
878     RETQ $ebx
882 name:            testleaadd_rbp_index_64
883 alignment:       16
884 exposesReturnsTwice: false
885 legalized:       false
886 regBankSelected: false
887 selected:        false
888 tracksRegLiveness: true
889 liveins:
890   - { reg: '$rbx' }
891   - { reg: '$rbp' }
892 frameInfo:
893   isFrameAddressTaken: false
894   isReturnAddressTaken: false
895   hasStackMap:     false
896   hasPatchPoint:   false
897   stackSize:       0
898   offsetAdjustment: 0
899   maxAlignment:    0
900   adjustsStack:    false
901   hasCalls:        false
902   maxCallFrameSize: 0
903   hasOpaqueSPAdjustment: false
904   hasVAStart:      false
905   hasMustTailInVarArgFunc: false
906 body:             |
907   bb.0 (%ir-block.0):
908     liveins: $rax, $rbp, $rbx
910     ; CHECK-LABEL: name: testleaadd_rbp_index_64
911     ; CHECK: liveins: $rax, $rbp, $rbx
912     ; CHECK: $rbx = LEA64r $noreg, 1, $rbp, 5, $noreg
913     ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags
914     ; CHECK: RETQ $ebx
915     $rbx = LEA64r $rbp, 1, $rbp, 5, $noreg
916     RETQ $ebx
920 name:            testleaadd_rbp_index2_64
921 alignment:       16
922 exposesReturnsTwice: false
923 legalized:       false
924 regBankSelected: false
925 selected:        false
926 tracksRegLiveness: true
927 liveins:
928   - { reg: '$rbx' }
929   - { reg: '$rbp' }
930 frameInfo:
931   isFrameAddressTaken: false
932   isReturnAddressTaken: false
933   hasStackMap:     false
934   hasPatchPoint:   false
935   stackSize:       0
936   offsetAdjustment: 0
937   maxAlignment:    0
938   adjustsStack:    false
939   hasCalls:        false
940   maxCallFrameSize: 0
941   hasOpaqueSPAdjustment: false
942   hasVAStart:      false
943   hasMustTailInVarArgFunc: false
944 body:             |
945   bb.0 (%ir-block.0):
946     liveins: $rax, $rbp, $rbx
948     ; CHECK-LABEL: name: testleaadd_rbp_index2_64
949     ; CHECK: liveins: $rax, $rbp, $rbx
950     ; CHECK: $rbx = LEA64r $noreg, 4, $rbp, 5, $noreg
951     ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags
952     ; CHECK: RETQ $ebx
953     $rbx = LEA64r $rbp, 4,  $rbp, 5, $noreg
954     RETQ $ebx
958 name:            test_skip_opt_64
959 alignment:       16
960 exposesReturnsTwice: false
961 legalized:       false
962 regBankSelected: false
963 selected:        false
964 tracksRegLiveness: true
965 liveins:
966   - { reg: '$rbx' }
967   - { reg: '$rbp' }
968 frameInfo:
969   isFrameAddressTaken: false
970   isReturnAddressTaken: false
971   hasStackMap:     false
972   hasPatchPoint:   false
973   stackSize:       0
974   offsetAdjustment: 0
975   maxAlignment:    0
976   adjustsStack:    false
977   hasCalls:        false
978   maxCallFrameSize: 0
979   hasOpaqueSPAdjustment: false
980   hasVAStart:      false
981   hasMustTailInVarArgFunc: false
982 body:             |
983   bb.0 (%ir-block.0):
984     liveins: $rax, $rbp, $rbx
986     ; CHECK-LABEL: name: test_skip_opt_64
987     ; CHECK: liveins: $rax, $rbp, $rbx
988     ; CHECK: $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg
989     ; CHECK: RETQ $ebp
990     $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg
991     RETQ $ebp
995 name:            test_skip_eflags_64
996 alignment:       16
997 exposesReturnsTwice: false
998 legalized:       false
999 regBankSelected: false
1000 selected:        false
1001 tracksRegLiveness: true
1002 liveins:
1003   - { reg: '$rbp' }
1004   - { reg: '$rax' }
1005 frameInfo:
1006   isFrameAddressTaken: false
1007   isReturnAddressTaken: false
1008   hasStackMap:     false
1009   hasPatchPoint:   false
1010   stackSize:       0
1011   offsetAdjustment: 0
1012   maxAlignment:    0
1013   adjustsStack:    false
1014   hasCalls:        false
1015   maxCallFrameSize: 0
1016   hasOpaqueSPAdjustment: false
1017   hasVAStart:      false
1018   hasMustTailInVarArgFunc: false
1019 body:             |
1020   ; CHECK-LABEL: name: test_skip_eflags_64
1021   ; CHECK: bb.0 (%ir-block.0):
1022   ; CHECK:   successors: %bb.1(0x80000000)
1023   ; CHECK:   liveins: $rax, $rbp, $rbx
1024   ; CHECK:   CMP64rr $rax, killed $rbx, implicit-def $eflags
1025   ; CHECK:   $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg
1026   ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
1027   ; CHECK:   RETQ $ebx
1028   ; CHECK: bb.1:
1029   ; CHECK:   liveins: $rax, $rbp, $rbx
1030   ; CHECK:   $rbp = LEA64r killed $rbx, 4, killed $rbx, 0, $noreg
1031   ; CHECK:   $rbp = ADD64ri8 $rbp, 5, implicit-def $eflags
1032   ; CHECK:   RETQ $ebp
1033   bb.0 (%ir-block.0):
1034     liveins: $rax, $rbp, $rbx
1036     CMP64rr   $rax, killed $rbx, implicit-def $eflags
1037     $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg
1038     JCC_1 %bb.1, 4, implicit $eflags
1039     RETQ $ebx
1040   bb.1:
1041     liveins: $rax, $rbp, $rbx
1042     $rbp = LEA64r killed $rbx, 4, killed $rbx, 5, $noreg
1043     RETQ $ebp
1047 name:            test_skip_opt_64_32
1048 alignment:       16
1049 exposesReturnsTwice: false
1050 legalized:       false
1051 regBankSelected: false
1052 selected:        false
1053 tracksRegLiveness: true
1054 liveins:
1055   - { reg: '$rbx' }
1056   - { reg: '$rbp' }
1057 frameInfo:
1058   isFrameAddressTaken: false
1059   isReturnAddressTaken: false
1060   hasStackMap:     false
1061   hasPatchPoint:   false
1062   stackSize:       0
1063   offsetAdjustment: 0
1064   maxAlignment:    0
1065   adjustsStack:    false
1066   hasCalls:        false
1067   maxCallFrameSize: 0
1068   hasOpaqueSPAdjustment: false
1069   hasVAStart:      false
1070   hasMustTailInVarArgFunc: false
1071 body:             |
1072   bb.0 (%ir-block.0):
1073     liveins: $rax, $rbp, $rbx
1075     ; CHECK-LABEL: name: test_skip_opt_64_32
1076     ; CHECK: liveins: $rax, $rbp, $rbx
1077     ; CHECK: $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg
1078     ; CHECK: RETQ $ebp
1079     $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg
1080     RETQ $ebp
1084 name:            test_skip_eflags_64_32
1085 alignment:       16
1086 exposesReturnsTwice: false
1087 legalized:       false
1088 regBankSelected: false
1089 selected:        false
1090 tracksRegLiveness: true
1091 liveins:
1092   - { reg: '$rbp' }
1093   - { reg: '$rax' }
1094 frameInfo:
1095   isFrameAddressTaken: false
1096   isReturnAddressTaken: false
1097   hasStackMap:     false
1098   hasPatchPoint:   false
1099   stackSize:       0
1100   offsetAdjustment: 0
1101   maxAlignment:    0
1102   adjustsStack:    false
1103   hasCalls:        false
1104   maxCallFrameSize: 0
1105   hasOpaqueSPAdjustment: false
1106   hasVAStart:      false
1107   hasMustTailInVarArgFunc: false
1108 body:             |
1109   ; CHECK-LABEL: name: test_skip_eflags_64_32
1110   ; CHECK: bb.0 (%ir-block.0):
1111   ; CHECK:   successors: %bb.1(0x80000000)
1112   ; CHECK:   liveins: $rax, $rbp, $rbx
1113   ; CHECK:   CMP64rr $rax, killed $rbx, implicit-def $eflags
1114   ; CHECK:   $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg
1115   ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
1116   ; CHECK:   RETQ $ebx
1117   ; CHECK: bb.1:
1118   ; CHECK:   liveins: $rax, $rbp, $rbx
1119   ; CHECK:   $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 0, $noreg
1120   ; CHECK:   $ebp = ADD32ri8 $ebp, 5, implicit-def $eflags
1121   ; CHECK:   RETQ $ebp
1122   bb.0 (%ir-block.0):
1123     liveins: $rax, $rbp, $rbx
1125     CMP64rr   $rax, killed $rbx, implicit-def $eflags
1126     $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg
1127     JCC_1 %bb.1, 4, implicit $eflags
1128     RETQ $ebx
1129   bb.1:
1130     liveins: $rax, $rbp, $rbx
1131     $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 5, $noreg
1132     RETQ $ebp
1136 name:            pr43758
1137 alignment:       16
1138 exposesReturnsTwice: false
1139 legalized:       false
1140 regBankSelected: false
1141 selected:        false
1142 tracksRegLiveness: true
1143 liveins:
1144   - { reg: '$rax' }
1145   - { reg: '$rbp' }
1146 frameInfo:
1147   isFrameAddressTaken: false
1148   isReturnAddressTaken: false
1149   hasStackMap:     false
1150   hasPatchPoint:   false
1151   stackSize:       0
1152   offsetAdjustment: 0
1153   maxAlignment:    0
1154   adjustsStack:    false
1155   hasCalls:        false
1156   maxCallFrameSize: 0
1157   hasOpaqueSPAdjustment: false
1158   hasVAStart:      false
1159   hasMustTailInVarArgFunc: false
1160 body:             |
1161   bb.0 (%ir-block.0):
1162     liveins: $rax, $rbp
1164     ; CHECK-LABEL: name: pr43758
1165     ; CHECK: liveins: $rax, $rbp
1166     ; CHECK: DBG_VALUE 0, $noreg
1167     ; CHECK: NOOP
1168     ; CHECK: NOOP
1169     ; CHECK: NOOP
1170     ; CHECK: NOOP
1171     ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax
1172     ; CHECK: NOOP
1173     ; CHECK: NOOP
1174     ; CHECK: NOOP
1175     ; CHECK: NOOP
1176     ; CHECK: RETQ $ebp
1177     DBG_VALUE 0, $noreg
1178     NOOP
1179     NOOP
1180     NOOP
1181     NOOP
1182     $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg
1183     NOOP
1184     NOOP
1185     NOOP
1186     NOOP
1187     RETQ $ebp