Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / Mips / GlobalISel / llvm-ir / jump_table_and_brjt.ll
blob74765ff0e8f106dcdb2e6d2342f3c1832d8509f8
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc  -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32
3 ; RUN: llc  -O0 -mtriple=mipsel-linux-gnu -global-isel -relocation-model=pic -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32_PIC
5 define i32 @mod4_0_to_11(i32 %a) {
6 ; MIPS32-LABEL: mod4_0_to_11:
7 ; MIPS32:       # %bb.0: # %entry
8 ; MIPS32-NEXT:    addiu $sp, $sp, -32
9 ; MIPS32-NEXT:    .cfi_def_cfa_offset 32
10 ; MIPS32-NEXT:    sw $4, 4($sp) # 4-byte Folded Spill
11 ; MIPS32-NEXT:    ori $1, $zero, 7
12 ; MIPS32-NEXT:    ori $2, $zero, 3
13 ; MIPS32-NEXT:    sw $2, 8($sp) # 4-byte Folded Spill
14 ; MIPS32-NEXT:    ori $2, $zero, 2
15 ; MIPS32-NEXT:    sw $2, 12($sp) # 4-byte Folded Spill
16 ; MIPS32-NEXT:    ori $2, $zero, 1
17 ; MIPS32-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
18 ; MIPS32-NEXT:    ori $2, $zero, 0
19 ; MIPS32-NEXT:    sw $2, 20($sp) # 4-byte Folded Spill
20 ; MIPS32-NEXT:    addiu $2, $zero, 65535
21 ; MIPS32-NEXT:    sw $2, 24($sp) # 4-byte Folded Spill
22 ; MIPS32-NEXT:    ori $2, $zero, 0
23 ; MIPS32-NEXT:    subu $2, $4, $2
24 ; MIPS32-NEXT:    sw $2, 28($sp) # 4-byte Folded Spill
25 ; MIPS32-NEXT:    sltu $1, $1, $2
26 ; MIPS32-NEXT:    bnez $1, $BB0_6
27 ; MIPS32-NEXT:    nop
28 ; MIPS32-NEXT:  # %bb.1: # %entry
29 ; MIPS32-NEXT:    lw $2, 28($sp) # 4-byte Folded Reload
30 ; MIPS32-NEXT:    lui $1, %hi($JTI0_0)
31 ; MIPS32-NEXT:    sll $2, $2, 2
32 ; MIPS32-NEXT:    addu $1, $1, $2
33 ; MIPS32-NEXT:    lw $1, %lo($JTI0_0)($1)
34 ; MIPS32-NEXT:    jr $1
35 ; MIPS32-NEXT:    nop
36 ; MIPS32-NEXT:  $BB0_2: # %sw.bb
37 ; MIPS32-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
38 ; MIPS32-NEXT:    addiu $sp, $sp, 32
39 ; MIPS32-NEXT:    jr $ra
40 ; MIPS32-NEXT:    nop
41 ; MIPS32-NEXT:  $BB0_3: # %sw.bb1
42 ; MIPS32-NEXT:    lw $2, 16($sp) # 4-byte Folded Reload
43 ; MIPS32-NEXT:    addiu $sp, $sp, 32
44 ; MIPS32-NEXT:    jr $ra
45 ; MIPS32-NEXT:    nop
46 ; MIPS32-NEXT:  $BB0_4: # %sw.bb2
47 ; MIPS32-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
48 ; MIPS32-NEXT:    addiu $sp, $sp, 32
49 ; MIPS32-NEXT:    jr $ra
50 ; MIPS32-NEXT:    nop
51 ; MIPS32-NEXT:  $BB0_5: # %sw.bb3
52 ; MIPS32-NEXT:    lw $2, 8($sp) # 4-byte Folded Reload
53 ; MIPS32-NEXT:    addiu $sp, $sp, 32
54 ; MIPS32-NEXT:    jr $ra
55 ; MIPS32-NEXT:    nop
56 ; MIPS32-NEXT:  $BB0_6: # %sw.default
57 ; MIPS32-NEXT:    j $BB0_7
58 ; MIPS32-NEXT:    nop
59 ; MIPS32-NEXT:  $BB0_7: # %sw.epilog
60 ; MIPS32-NEXT:    lw $1, 8($sp) # 4-byte Folded Reload
61 ; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
62 ; MIPS32-NEXT:    ori $3, $zero, 8
63 ; MIPS32-NEXT:    subu $2, $2, $3
64 ; MIPS32-NEXT:    sw $2, 0($sp) # 4-byte Folded Spill
65 ; MIPS32-NEXT:    sltu $1, $1, $2
66 ; MIPS32-NEXT:    bnez $1, $BB0_13
67 ; MIPS32-NEXT:    nop
68 ; MIPS32-NEXT:  # %bb.8: # %sw.epilog
69 ; MIPS32-NEXT:    lw $2, 0($sp) # 4-byte Folded Reload
70 ; MIPS32-NEXT:    lui $1, %hi($JTI0_1)
71 ; MIPS32-NEXT:    sll $2, $2, 2
72 ; MIPS32-NEXT:    addu $1, $1, $2
73 ; MIPS32-NEXT:    lw $1, %lo($JTI0_1)($1)
74 ; MIPS32-NEXT:    jr $1
75 ; MIPS32-NEXT:    nop
76 ; MIPS32-NEXT:  $BB0_9: # %sw.bb4
77 ; MIPS32-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
78 ; MIPS32-NEXT:    addiu $sp, $sp, 32
79 ; MIPS32-NEXT:    jr $ra
80 ; MIPS32-NEXT:    nop
81 ; MIPS32-NEXT:  $BB0_10: # %sw.bb5
82 ; MIPS32-NEXT:    lw $2, 16($sp) # 4-byte Folded Reload
83 ; MIPS32-NEXT:    addiu $sp, $sp, 32
84 ; MIPS32-NEXT:    jr $ra
85 ; MIPS32-NEXT:    nop
86 ; MIPS32-NEXT:  $BB0_11: # %sw.bb6
87 ; MIPS32-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
88 ; MIPS32-NEXT:    addiu $sp, $sp, 32
89 ; MIPS32-NEXT:    jr $ra
90 ; MIPS32-NEXT:    nop
91 ; MIPS32-NEXT:  $BB0_12: # %sw.bb7
92 ; MIPS32-NEXT:    lw $2, 8($sp) # 4-byte Folded Reload
93 ; MIPS32-NEXT:    addiu $sp, $sp, 32
94 ; MIPS32-NEXT:    jr $ra
95 ; MIPS32-NEXT:    nop
96 ; MIPS32-NEXT:  $BB0_13: # %sw.default8
97 ; MIPS32-NEXT:    lw $2, 24($sp) # 4-byte Folded Reload
98 ; MIPS32-NEXT:    addiu $sp, $sp, 32
99 ; MIPS32-NEXT:    jr $ra
100 ; MIPS32-NEXT:    nop
102 ; MIPS32_PIC-LABEL: mod4_0_to_11:
103 ; MIPS32_PIC:       # %bb.0: # %entry
104 ; MIPS32_PIC-NEXT:    lui $2, %hi(_gp_disp)
105 ; MIPS32_PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
106 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, -40
107 ; MIPS32_PIC-NEXT:    .cfi_def_cfa_offset 40
108 ; MIPS32_PIC-NEXT:    addu $1, $2, $25
109 ; MIPS32_PIC-NEXT:    sw $1, 8($sp) # 4-byte Folded Spill
110 ; MIPS32_PIC-NEXT:    sw $4, 12($sp) # 4-byte Folded Spill
111 ; MIPS32_PIC-NEXT:    ori $1, $zero, 7
112 ; MIPS32_PIC-NEXT:    ori $2, $zero, 3
113 ; MIPS32_PIC-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
114 ; MIPS32_PIC-NEXT:    ori $2, $zero, 2
115 ; MIPS32_PIC-NEXT:    sw $2, 20($sp) # 4-byte Folded Spill
116 ; MIPS32_PIC-NEXT:    ori $2, $zero, 1
117 ; MIPS32_PIC-NEXT:    sw $2, 24($sp) # 4-byte Folded Spill
118 ; MIPS32_PIC-NEXT:    ori $2, $zero, 0
119 ; MIPS32_PIC-NEXT:    sw $2, 28($sp) # 4-byte Folded Spill
120 ; MIPS32_PIC-NEXT:    addiu $2, $zero, 65535
121 ; MIPS32_PIC-NEXT:    sw $2, 32($sp) # 4-byte Folded Spill
122 ; MIPS32_PIC-NEXT:    ori $2, $zero, 0
123 ; MIPS32_PIC-NEXT:    subu $2, $4, $2
124 ; MIPS32_PIC-NEXT:    sw $2, 36($sp) # 4-byte Folded Spill
125 ; MIPS32_PIC-NEXT:    sltu $1, $1, $2
126 ; MIPS32_PIC-NEXT:    bnez $1, $BB0_6
127 ; MIPS32_PIC-NEXT:    nop
128 ; MIPS32_PIC-NEXT:  # %bb.1: # %entry
129 ; MIPS32_PIC-NEXT:    lw $2, 8($sp) # 4-byte Folded Reload
130 ; MIPS32_PIC-NEXT:    lw $3, 36($sp) # 4-byte Folded Reload
131 ; MIPS32_PIC-NEXT:    lw $1, %got($JTI0_0)($2)
132 ; MIPS32_PIC-NEXT:    sll $3, $3, 2
133 ; MIPS32_PIC-NEXT:    addu $1, $1, $3
134 ; MIPS32_PIC-NEXT:    lw $1, %lo($JTI0_0)($1)
135 ; MIPS32_PIC-NEXT:    addu $1, $1, $2
136 ; MIPS32_PIC-NEXT:    jr $1
137 ; MIPS32_PIC-NEXT:    nop
138 ; MIPS32_PIC-NEXT:  $BB0_2: # %sw.bb
139 ; MIPS32_PIC-NEXT:    lw $2, 28($sp) # 4-byte Folded Reload
140 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
141 ; MIPS32_PIC-NEXT:    jr $ra
142 ; MIPS32_PIC-NEXT:    nop
143 ; MIPS32_PIC-NEXT:  $BB0_3: # %sw.bb1
144 ; MIPS32_PIC-NEXT:    lw $2, 24($sp) # 4-byte Folded Reload
145 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
146 ; MIPS32_PIC-NEXT:    jr $ra
147 ; MIPS32_PIC-NEXT:    nop
148 ; MIPS32_PIC-NEXT:  $BB0_4: # %sw.bb2
149 ; MIPS32_PIC-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
150 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
151 ; MIPS32_PIC-NEXT:    jr $ra
152 ; MIPS32_PIC-NEXT:    nop
153 ; MIPS32_PIC-NEXT:  $BB0_5: # %sw.bb3
154 ; MIPS32_PIC-NEXT:    lw $2, 16($sp) # 4-byte Folded Reload
155 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
156 ; MIPS32_PIC-NEXT:    jr $ra
157 ; MIPS32_PIC-NEXT:    nop
158 ; MIPS32_PIC-NEXT:  $BB0_6: # %sw.default
159 ; MIPS32_PIC-NEXT:    b $BB0_7
160 ; MIPS32_PIC-NEXT:    nop
161 ; MIPS32_PIC-NEXT:  $BB0_7: # %sw.epilog
162 ; MIPS32_PIC-NEXT:    lw $1, 16($sp) # 4-byte Folded Reload
163 ; MIPS32_PIC-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
164 ; MIPS32_PIC-NEXT:    ori $3, $zero, 8
165 ; MIPS32_PIC-NEXT:    subu $2, $2, $3
166 ; MIPS32_PIC-NEXT:    sw $2, 4($sp) # 4-byte Folded Spill
167 ; MIPS32_PIC-NEXT:    sltu $1, $1, $2
168 ; MIPS32_PIC-NEXT:    bnez $1, $BB0_13
169 ; MIPS32_PIC-NEXT:    nop
170 ; MIPS32_PIC-NEXT:  # %bb.8: # %sw.epilog
171 ; MIPS32_PIC-NEXT:    lw $2, 8($sp) # 4-byte Folded Reload
172 ; MIPS32_PIC-NEXT:    lw $3, 4($sp) # 4-byte Folded Reload
173 ; MIPS32_PIC-NEXT:    lw $1, %got($JTI0_1)($2)
174 ; MIPS32_PIC-NEXT:    sll $3, $3, 2
175 ; MIPS32_PIC-NEXT:    addu $1, $1, $3
176 ; MIPS32_PIC-NEXT:    lw $1, %lo($JTI0_1)($1)
177 ; MIPS32_PIC-NEXT:    addu $1, $1, $2
178 ; MIPS32_PIC-NEXT:    jr $1
179 ; MIPS32_PIC-NEXT:    nop
180 ; MIPS32_PIC-NEXT:  $BB0_9: # %sw.bb4
181 ; MIPS32_PIC-NEXT:    lw $2, 28($sp) # 4-byte Folded Reload
182 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
183 ; MIPS32_PIC-NEXT:    jr $ra
184 ; MIPS32_PIC-NEXT:    nop
185 ; MIPS32_PIC-NEXT:  $BB0_10: # %sw.bb5
186 ; MIPS32_PIC-NEXT:    lw $2, 24($sp) # 4-byte Folded Reload
187 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
188 ; MIPS32_PIC-NEXT:    jr $ra
189 ; MIPS32_PIC-NEXT:    nop
190 ; MIPS32_PIC-NEXT:  $BB0_11: # %sw.bb6
191 ; MIPS32_PIC-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
192 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
193 ; MIPS32_PIC-NEXT:    jr $ra
194 ; MIPS32_PIC-NEXT:    nop
195 ; MIPS32_PIC-NEXT:  $BB0_12: # %sw.bb7
196 ; MIPS32_PIC-NEXT:    lw $2, 16($sp) # 4-byte Folded Reload
197 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
198 ; MIPS32_PIC-NEXT:    jr $ra
199 ; MIPS32_PIC-NEXT:    nop
200 ; MIPS32_PIC-NEXT:  $BB0_13: # %sw.default8
201 ; MIPS32_PIC-NEXT:    lw $2, 32($sp) # 4-byte Folded Reload
202 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 40
203 ; MIPS32_PIC-NEXT:    jr $ra
204 ; MIPS32_PIC-NEXT:    nop
207 entry:
208   switch i32 %a, label %sw.default [
209     i32 0, label %sw.bb
210     i32 4, label %sw.bb
211     i32 1, label %sw.bb1
212     i32 5, label %sw.bb1
213     i32 2, label %sw.bb2
214     i32 6, label %sw.bb2
215     i32 3, label %sw.bb3
216     i32 7, label %sw.bb3
217   ]
219 sw.bb:                                            ; preds = %entry, %entry
220   ret i32 0
222 sw.bb1:                                           ; preds = %entry, %entry
223   ret i32 1
225 sw.bb2:                                           ; preds = %entry, %entry
226   ret i32 2
228 sw.bb3:                                           ; preds = %entry, %entry
229   ret i32 3
231 sw.default:                                       ; preds = %entry
232   br label %sw.epilog
234 sw.epilog:                                        ; preds = %sw.default
235   switch i32 %a, label %sw.default8 [
236     i32 8, label %sw.bb4
237     i32 9, label %sw.bb5
238     i32 10, label %sw.bb6
239     i32 11, label %sw.bb7
240   ]
242 sw.bb4:                                           ; preds = %sw.epilog
243   ret i32 0
245 sw.bb5:                                           ; preds = %sw.epilog
246   ret i32 1
248 sw.bb6:                                           ; preds = %sw.epilog
249   ret i32 2
251 sw.bb7:                                           ; preds = %sw.epilog
252   ret i32 3
254 sw.default8:                                      ; preds = %sw.epilog
255   ret i32 -1