[Types] Define a getWithNewBitWidth for Types and make use of it
[llvm-complete.git] / test / CodeGen / X86 / leaFixup64.mir
blob77be582225694e691b3b9bc03fa3b44cd7f4d519
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   }
154 name:            testleaadd_64_32_1
155 alignment:       16
156 exposesReturnsTwice: false
157 legalized:       false
158 regBankSelected: false
159 selected:        false
160 tracksRegLiveness: true
161 liveins:
162   - { reg: '$rax' }
163   - { reg: '$rbp' }
164 frameInfo:
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
178 body:             |
179   bb.0 (%ir-block.0):
180     liveins: $rax, $rbp
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
192 name:            testleaadd_rbp_64_32_1
193 alignment:       16
194 exposesReturnsTwice: false
195 legalized:       false
196 regBankSelected: false
197 selected:        false
198 tracksRegLiveness: true
199 liveins:
200   - { reg: '$rax' }
201   - { reg: '$rbp' }
202 frameInfo:
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
216 body:             |
217   bb.0 (%ir-block.0):
218     liveins: $rax, $rbp
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
230 name:            test1lea_rbp_64_32_1
231 alignment:       16
232 exposesReturnsTwice: false
233 legalized:       false
234 regBankSelected: false
235 selected:        false
236 tracksRegLiveness: true
237 liveins:
238   - { reg: '$rax' }
239   - { reg: '$rbp' }
240 frameInfo:
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
254 body:             |
255   bb.0 (%ir-block.0):
256     liveins: $rax, $rbp
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
267 name:            test2add_64
268 alignment:       16
269 exposesReturnsTwice: false
270 legalized:       false
271 regBankSelected: false
272 selected:        false
273 tracksRegLiveness: true
274 liveins:
275   - { reg: '$rax' }
276   - { reg: '$rbp' }
277 frameInfo:
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
291 body:             |
292   bb.0 (%ir-block.0):
293     liveins: $rax, $rbp
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
305 name:            test2add_rbp_64
306 alignment:       16
307 exposesReturnsTwice: false
308 legalized:       false
309 regBankSelected: false
310 selected:        false
311 tracksRegLiveness: true
312 liveins:
313   - { reg: '$rax' }
314   - { reg: '$rbp' }
315 frameInfo:
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
329 body:             |
330   bb.0 (%ir-block.0):
331     liveins: $rax, $rbp
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
343 name:            test1add_rbp_64
344 alignment:       16
345 exposesReturnsTwice: false
346 legalized:       false
347 regBankSelected: false
348 selected:        false
349 tracksRegLiveness: true
350 liveins:
351   - { reg: '$rax' }
352   - { reg: '$rbp' }
353 frameInfo:
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
367 body:             |
368   bb.0 (%ir-block.0):
369     liveins: $rax, $rbp
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
380 name:            testleaadd_64_32
381 alignment:       16
382 exposesReturnsTwice: false
383 legalized:       false
384 regBankSelected: false
385 selected:        false
386 tracksRegLiveness: true
387 liveins:
388   - { reg: '$rax' }
389   - { reg: '$rbp' }
390   - { reg: '$rbx' }
391 frameInfo:
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
405 body:             |
406   bb.0 (%ir-block.0):
407     liveins: $rax, $rbp
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
419 name:            testleaadd_rbp_64_32
420 alignment:       16
421 exposesReturnsTwice: false
422 legalized:       false
423 regBankSelected: false
424 selected:        false
425 tracksRegLiveness: true
426 liveins:
427   - { reg: '$rax' }
428   - { reg: '$rbp' }
429   - { reg: '$rbx' }
430 frameInfo:
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
444 body:             |
445   bb.0 (%ir-block.0):
446     liveins: $rax, $rbp
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
458 name:            test1lea_rbp_64_32
459 alignment:       16
460 exposesReturnsTwice: false
461 legalized:       false
462 regBankSelected: false
463 selected:        false
464 tracksRegLiveness: true
465 liveins:
466   - { reg: '$rax' }
467   - { reg: '$rbp' }
468   - { reg: '$rbx' }
469 frameInfo:
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
483 body:             |
484   bb.0 (%ir-block.0):
485     liveins: $rax, $rbp
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
496 name:            testleaadd_64
497 alignment:       16
498 exposesReturnsTwice: false
499 legalized:       false
500 regBankSelected: false
501 selected:        false
502 tracksRegLiveness: true
503 liveins:
504   - { reg: '$rax' }
505   - { reg: '$rbp' }
506   - { reg: '$rbx' }
507 frameInfo:
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
521 body:             |
522   bb.0 (%ir-block.0):
523     liveins: $rax, $rbp
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
535 name:            testleaadd_rbp_64
536 alignment:       16
537 exposesReturnsTwice: false
538 legalized:       false
539 regBankSelected: false
540 selected:        false
541 tracksRegLiveness: true
542 liveins:
543   - { reg: '$rax' }
544   - { reg: '$rbp' }
545   - { reg: '$rbx' }
546 frameInfo:
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
560 body:             |
561   bb.0 (%ir-block.0):
562     liveins: $rax, $rbp
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
574 name:            test1lea_rbp_64
575 alignment:       16
576 exposesReturnsTwice: false
577 legalized:       false
578 regBankSelected: false
579 selected:        false
580 tracksRegLiveness: true
581 liveins:
582   - { reg: '$rax' }
583   - { reg: '$rbp' }
584   - { reg: '$rbx' }
585 frameInfo:
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
599 body:             |
600   bb.0 (%ir-block.0):
601     liveins: $rax, $rbp
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
612 name:            test8
613 alignment:       16
614 exposesReturnsTwice: false
615 legalized:       false
616 regBankSelected: false
617 selected:        false
618 tracksRegLiveness: true
619 liveins:
620   - { reg: '$rdi' }
621   - { reg: '$rbp' }
622 frameInfo:
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
636 body:             |
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
653 name:            testleaaddi32_64_32
654 alignment:       16
655 exposesReturnsTwice: false
656 legalized:       false
657 regBankSelected: false
658 selected:        false
659 tracksRegLiveness: true
660 liveins:
661   - { reg: '$rax' }
662   - { reg: '$rbp' }
663 frameInfo:
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
677 body:             |
678   bb.0 (%ir-block.0):
679     liveins: $rax, $rbp
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
691 name:            test1mov1add_rbp_64_32
692 alignment:       16
693 exposesReturnsTwice: false
694 legalized:       false
695 regBankSelected: false
696 selected:        false
697 tracksRegLiveness: true
698 liveins:
699   - { reg: '$rax' }
700   - { reg: '$rbp' }
701 frameInfo:
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
715 body:             |
716   bb.0 (%ir-block.0):
717     liveins: $rax, $rbp, $rbx
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
728 name:            testleaadd_rbp_index_64_32
729 alignment:       16
730 exposesReturnsTwice: false
731 legalized:       false
732 regBankSelected: false
733 selected:        false
734 tracksRegLiveness: true
735 liveins:
736   - { reg: '$rbx' }
737   - { reg: '$rbp' }
738 frameInfo:
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
752 body:             |
753   bb.0 (%ir-block.0):
754     liveins: $rax, $rbp, $rbx
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
765 name:            testleaadd_rbp_index2_64_32
766 alignment:       16
767 exposesReturnsTwice: false
768 legalized:       false
769 regBankSelected: false
770 selected:        false
771 tracksRegLiveness: true
772 liveins:
773   - { reg: '$rbx' }
774   - { reg: '$rbp' }
775 frameInfo:
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
789 body:             |
790   bb.0 (%ir-block.0):
791     liveins: $eax, $ebp, $ebx
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
802 name:            test2addi32_64
803 alignment:       16
804 exposesReturnsTwice: false
805 legalized:       false
806 regBankSelected: false
807 selected:        false
808 tracksRegLiveness: true
809 liveins:
810   - { reg: '$rax' }
811   - { reg: '$rbp' }
812 frameInfo:
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
826 body:             |
827   bb.0 (%ir-block.0):
828     liveins: $rax, $rbp
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
840 name:            test1mov1add_rbp_64
841 alignment:       16
842 exposesReturnsTwice: false
843 legalized:       false
844 regBankSelected: false
845 selected:        false
846 tracksRegLiveness: true
847 liveins:
848   - { reg: '$rax' }
849   - { reg: '$rbp' }
850 frameInfo:
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
864 body:             |
865   bb.0 (%ir-block.0):
866     liveins: $rax, $rbp, $rbx
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
879 name:            testleaadd_rbp_index_64
880 alignment:       16
881 exposesReturnsTwice: false
882 legalized:       false
883 regBankSelected: false
884 selected:        false
885 tracksRegLiveness: true
886 liveins:
887   - { reg: '$rbx' }
888   - { reg: '$rbp' }
889 frameInfo:
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
903 body:             |
904   bb.0 (%ir-block.0):
905     liveins: $rax, $rbp, $rbx
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
917 name:            testleaadd_rbp_index2_64
918 alignment:       16
919 exposesReturnsTwice: false
920 legalized:       false
921 regBankSelected: false
922 selected:        false
923 tracksRegLiveness: true
924 liveins:
925   - { reg: '$rbx' }
926   - { reg: '$rbp' }
927 frameInfo:
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
941 body:             |
942   bb.0 (%ir-block.0):
943     liveins: $rax, $rbp, $rbx
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
955 name:            test_skip_opt_64
956 alignment:       16
957 exposesReturnsTwice: false
958 legalized:       false
959 regBankSelected: false
960 selected:        false
961 tracksRegLiveness: true
962 liveins:
963   - { reg: '$rbx' }
964   - { reg: '$rbp' }
965 frameInfo:
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
979 body:             |
980   bb.0 (%ir-block.0):
981     liveins: $rax, $rbp, $rbx
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
992 name:            test_skip_eflags_64
993 alignment:       16
994 exposesReturnsTwice: false
995 legalized:       false
996 regBankSelected: false
997 selected:        false
998 tracksRegLiveness: true
999 liveins:
1000   - { reg: '$rbp' }
1001   - { reg: '$rax' }
1002 frameInfo:
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
1016 body:             |
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
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
1044 name:            test_skip_opt_64_32
1045 alignment:       16
1046 exposesReturnsTwice: false
1047 legalized:       false
1048 regBankSelected: false
1049 selected:        false
1050 tracksRegLiveness: true
1051 liveins:
1052   - { reg: '$rbx' }
1053   - { reg: '$rbp' }
1054 frameInfo:
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
1068 body:             |
1069   bb.0 (%ir-block.0):
1070     liveins: $rax, $rbp, $rbx
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
1081 name:            test_skip_eflags_64_32
1082 alignment:       16
1083 exposesReturnsTwice: false
1084 legalized:       false
1085 regBankSelected: false
1086 selected:        false
1087 tracksRegLiveness: true
1088 liveins:
1089   - { reg: '$rbp' }
1090   - { reg: '$rax' }
1091 frameInfo:
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
1105 body:             |
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
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