[x86/MIR] Implement support for pre- and post-instruction symbols, as
[llvm-complete.git] / test / CodeGen / MIR / X86 / jump-table-info.mir
blobca0e992bdac947878a6aaa6a1c3d818bfe4f3633
1 # RUN: llc -march=x86-64 -run-pass none -o - %s | FileCheck %s
2 # This test ensures that the MIR parser parses the jump table info and jump
3 # table operands correctly.
5 --- |
7   define i32 @test_jumptable(i32 %in) {
8   entry:
9     switch i32 %in, label %def [
10       i32 0, label %lbl1
11       i32 1, label %lbl2
12       i32 2, label %lbl3
13       i32 3, label %lbl4
14     ]
16   def:
17     ret i32 0
19   lbl1:
20     ret i32 1
22   lbl2:
23     ret i32 2
25   lbl3:
26     ret i32 4
28   lbl4:
29     ret i32 8
30   }
32   define i32 @test_jumptable2(i32 %in) {
33   entry:
34     switch i32 %in, label %def [
35       i32 0, label %lbl1
36       i32 1, label %lbl2
37       i32 2, label %lbl3
38       i32 3, label %lbl4
39     ]
41   def:
42     ret i32 0
44   lbl1:
45     ret i32 1
47   lbl2:
48     ret i32 2
50   lbl3:
51     ret i32 4
53   lbl4:
54     ret i32 8
55   }
57 ...
58 ---
59 name:            test_jumptable
60 # CHECK:      jumpTable:
61 # CHECK-NEXT: kind: label-difference32
62 # CHECK-NEXT: entries:
63 # CHECK-NEXT: - id: 0
64 # CHECK-NEXT: blocks: [ '%bb.3', '%bb.4', '%bb.5', '%bb.6' ]
65 # CHECK-NEXT: body:
66 jumpTable:
67   kind:          label-difference32
68   entries:
69     - id:        0
70       blocks:    [ '%bb.3', '%bb.4', '%bb.5', '%bb.6' ]
71 body: |
72   bb.0.entry:
73     successors: %bb.2, %bb.1
75     $eax = MOV32rr $edi, implicit-def $rax
76     CMP32ri8 $edi, 3, implicit-def $eflags
77     JA_1 %bb.2, implicit $eflags
79   bb.1.entry:
80     successors: %bb.3, %bb.4, %bb.5, %bb.6
81     ; CHECK: $rcx = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
82     $rcx = LEA64r $rip, 1, _, %jump-table.0, _
83     $rax = MOVSX64rm32 $rcx, 4, $rax, 0, _
84     $rax = ADD64rr $rax, $rcx, implicit-def $eflags
85     JMP64r $rax
87   bb.2.def:
88     $eax = MOV32r0 implicit-def $eflags
89     RETQ $eax
91   bb.3.lbl1:
92     $eax = MOV32ri 1
93     RETQ $eax
95   bb.4.lbl2:
96     $eax = MOV32ri 2
97     RETQ $eax
99   bb.5.lbl3:
100     $eax = MOV32ri 4
101     RETQ $eax
103   bb.6.lbl4:
104     $eax = MOV32ri 8
105     RETQ $eax
108 name:            test_jumptable2
109 jumpTable:
110   kind:          label-difference32
111   entries:
112     - id:        1
113       blocks:    [ '%bb.3', '%bb.4', '%bb.5', '%bb.6' ]
114 body: |
115   bb.0.entry:
116     successors: %bb.2, %bb.1
118     $eax = MOV32rr $edi, implicit-def $rax
119     CMP32ri8 $edi, 3, implicit-def $eflags
120     JA_1 %bb.2, implicit $eflags
122   bb.1.entry:
123     successors: %bb.3, %bb.4, %bb.5, %bb.6
124     ; Verify that the printer will use an id of 0 for this jump table:
125     ; CHECK: $rcx = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
126     $rcx = LEA64r $rip, 1, _, %jump-table.1, _
127     $rax = MOVSX64rm32 $rcx, 4, $rax, 0, _
128     $rax = ADD64rr $rax, $rcx, implicit-def $eflags
129     JMP64r $rax
131   bb.2.def:
132     $eax = MOV32r0 implicit-def $eflags
133     RETQ $eax
135   bb.3.lbl1:
136     $eax = MOV32ri 1
137     RETQ $eax
139   bb.4.lbl2:
140     $eax = MOV32ri 2
141     RETQ $eax
143   bb.5.lbl3:
144     $eax = MOV32ri 4
145     RETQ $eax
147   bb.6.lbl4:
148     $eax = MOV32ri 8
149     RETQ $eax