[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / MIR / X86 / virtual-registers.mir
blob56a475de783a1146f5c4bf21b7b9a0af716bcd77
1 # RUN: llc -march=x86-64 -run-pass none -o - %s | FileCheck %s
2 # This test ensures that the MIR parser parses virtual register definitions and
3 # references correctly.
5 --- |
7   define i32 @bar(i32 %a) {
8   entry:
9     %0 = icmp sle i32 %a, 10
10     br i1 %0, label %less, label %exit
12   less:
13     ret i32 0
15   exit:
16     ret i32 %a
17   }
19   define i32 @foo(i32 %a) {
20   entry:
21     %0 = icmp sle i32 %a, 10
22     br i1 %0, label %less, label %exit
24   less:
25     ret i32 0
27   exit:
28     ret i32 %a
29   }
31 ...
32 ---
33 name:            bar
34 tracksRegLiveness: true
35 # CHECK:      registers:
36 # CHECK-NEXT:   - { id: 0, class: gr32, preferred-register: '' }
37 # CHECK-NEXT:   - { id: 1, class: gr32, preferred-register: '' }
38 # CHECK-NEXT:   - { id: 2, class: gr32, preferred-register: '' }
39 registers:
40   - { id: 0, class: gr32 }
41   - { id: 1, class: gr32 }
42   - { id: 2, class: gr32 }
43 body: |
44   bb.0.entry:
45     successors: %bb.2.exit, %bb.1.less
46     liveins: $edi
47     ; CHECK:      %0:gr32 = COPY $edi
48     ; CHECK-NEXT: %1:gr32 = SUB32ri8 %0, 10
49     %0 = COPY $edi
50     %1 = SUB32ri8 %0, 10, implicit-def $eflags
51     JCC_1 %bb.2.exit, 15, implicit $eflags
52     JMP_1 %bb.1.less
54   bb.1.less:
55     ; CHECK:      %2:gr32 = MOV32r0
56     ; CHECK-NEXT: $eax = COPY %2
57     %2 = MOV32r0 implicit-def $eflags
58     $eax = COPY %2
59     RETQ $eax
61   bb.2.exit:
62     $eax = COPY %0
63     RETQ $eax
64 ...
65 ---
66 name:            foo
67 tracksRegLiveness: true
68 # CHECK: name: foo
69 # CHECK:      registers:
70 # CHECK-NEXT:   - { id: 0, class: gr32, preferred-register: '' }
71 # CHECK-NEXT:   - { id: 1, class: gr32, preferred-register: '' }
72 # CHECK-NEXT:   - { id: 2, class: gr32, preferred-register: '' }
73 registers:
74   - { id: 2, class: gr32 }
75   - { id: 0, class: gr32 }
76   - { id: 10, class: gr32 }
77 body: |
78   bb.0.entry:
79     successors: %bb.2.exit, %bb.1.less
80     liveins: $edi
81     ; CHECK:      %0:gr32 = COPY $edi
82     ; CHECK-NEXT: %1:gr32 = SUB32ri8 %0, 10
83     %2 = COPY $edi
84     %0 = SUB32ri8 %2, 10, implicit-def $eflags
85     JCC_1 %bb.2.exit, 15, implicit $eflags
86     JMP_1 %bb.1.less
88   bb.1.less:
89     ; CHECK:      %2:gr32 = MOV32r0
90     ; CHECK-NEXT: $eax = COPY %2
91     %10 = MOV32r0 implicit-def $eflags
92     $eax = COPY %10
93     RETQ $eax
95   bb.2.exit:
96     ; CHECK: $eax = COPY %0
97     $eax = COPY %2
98     RETQ $eax
99 ...