[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / Mips / countleading.ll
blob264d0486e3b87b987e2db82a71004d1182f3a326
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=mipsel -mcpu=mips32   < %s | FileCheck -check-prefixes=MIPS-GT-R1,MIPS32-R1-R2 %s
3 ; RUN: llc -march=mipsel -mcpu=mips32r2 < %s | FileCheck -check-prefixes=MIPS-GT-R1,MIPS32-R1-R2 %s
4 ; RUN: llc -march=mipsel -mcpu=mips32r6 < %s | FileCheck -check-prefixes=MIPS-GT-R1,MIPS32-R6 %s
5 ; RUN: llc -march=mips64el -mcpu=mips64   < %s | FileCheck -check-prefixes=MIPS-GT-R1,MIPS64-GT-R1 %s
6 ; RUN: llc -march=mips64el -mcpu=mips64r2 < %s | FileCheck -check-prefixes=MIPS-GT-R1,MIPS64-GT-R1 %s
7 ; RUN: llc -march=mips64el -mcpu=mips64r6 < %s | FileCheck -check-prefixes=MIPS-GT-R1,MIPS64-GT-R1 %s
8 ; RUN: llc -march=mips64el -mcpu=mips4    < %s | FileCheck -check-prefixes=MIPS4 %s
10 ; Prefixes:
11 ;   ALL      - All
12 ;   MIPS-GT-R1 - MIPS32r1/MIPS64r1 and above
13 ;   MIPS64-GT-R1 - MIPS64r1 and above
15 define i32 @ctlz_i32(i32 signext %X) nounwind readnone {
16 ; MIPS-GT-R1-LABEL: ctlz_i32:
17 ; MIPS-GT-R1:       # %bb.0: # %entry
18 ; MIPS-GT-R1-NEXT:    jr $ra
19 ; MIPS-GT-R1-NEXT:    clz $2, $4
21 ; MIPS4-LABEL: ctlz_i32:
22 ; MIPS4:       # %bb.0: # %entry
23 ; MIPS4-NEXT:    srl $1, $4, 1
24 ; MIPS4-NEXT:    or $1, $4, $1
25 ; MIPS4-NEXT:    srl $2, $1, 2
26 ; MIPS4-NEXT:    or $1, $1, $2
27 ; MIPS4-NEXT:    srl $2, $1, 4
28 ; MIPS4-NEXT:    lui $3, 21845
29 ; MIPS4-NEXT:    lui $4, 13107
30 ; MIPS4-NEXT:    lui $5, 3855
31 ; MIPS4-NEXT:    or $1, $1, $2
32 ; MIPS4-NEXT:    ori $2, $5, 3855
33 ; MIPS4-NEXT:    ori $4, $4, 13107
34 ; MIPS4-NEXT:    ori $3, $3, 21845
35 ; MIPS4-NEXT:    srl $5, $1, 8
36 ; MIPS4-NEXT:    or $1, $1, $5
37 ; MIPS4-NEXT:    srl $5, $1, 16
38 ; MIPS4-NEXT:    nor $1, $1, $5
39 ; MIPS4-NEXT:    srl $5, $1, 1
40 ; MIPS4-NEXT:    and $3, $5, $3
41 ; MIPS4-NEXT:    subu $1, $1, $3
42 ; MIPS4-NEXT:    and $3, $1, $4
43 ; MIPS4-NEXT:    srl $1, $1, 2
44 ; MIPS4-NEXT:    and $1, $1, $4
45 ; MIPS4-NEXT:    addu $1, $3, $1
46 ; MIPS4-NEXT:    srl $3, $1, 4
47 ; MIPS4-NEXT:    addu $1, $1, $3
48 ; MIPS4-NEXT:    and $1, $1, $2
49 ; MIPS4-NEXT:    sll $2, $1, 8
50 ; MIPS4-NEXT:    addu $2, $2, $1
51 ; MIPS4-NEXT:    sll $3, $1, 16
52 ; MIPS4-NEXT:    addu $2, $3, $2
53 ; MIPS4-NEXT:    sll $1, $1, 24
54 ; MIPS4-NEXT:    addu $1, $1, $2
55 ; MIPS4-NEXT:    jr $ra
56 ; MIPS4-NEXT:    srl $2, $1, 24
57 entry:
58   %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %X, i1 true)
59   ret i32 %tmp1
62 declare i32 @llvm.ctlz.i32(i32, i1) nounwind readnone
64 define i32 @ctlo_i32(i32 signext %X) nounwind readnone {
65 ; MIPS-GT-R1-LABEL: ctlo_i32:
66 ; MIPS-GT-R1:       # %bb.0: # %entry
67 ; MIPS-GT-R1-NEXT:    jr $ra
68 ; MIPS-GT-R1-NEXT:    clo $2, $4
70 ; MIPS4-LABEL: ctlo_i32:
71 ; MIPS4:       # %bb.0: # %entry
72 ; MIPS4-NEXT:    not $1, $4
73 ; MIPS4-NEXT:    srl $2, $1, 1
74 ; MIPS4-NEXT:    or $1, $1, $2
75 ; MIPS4-NEXT:    srl $2, $1, 2
76 ; MIPS4-NEXT:    or $1, $1, $2
77 ; MIPS4-NEXT:    lui $2, 21845
78 ; MIPS4-NEXT:    lui $3, 13107
79 ; MIPS4-NEXT:    lui $4, 3855
80 ; MIPS4-NEXT:    srl $5, $1, 4
81 ; MIPS4-NEXT:    ori $4, $4, 3855
82 ; MIPS4-NEXT:    ori $3, $3, 13107
83 ; MIPS4-NEXT:    ori $2, $2, 21845
84 ; MIPS4-NEXT:    or $1, $1, $5
85 ; MIPS4-NEXT:    srl $5, $1, 8
86 ; MIPS4-NEXT:    or $1, $1, $5
87 ; MIPS4-NEXT:    srl $5, $1, 16
88 ; MIPS4-NEXT:    nor $1, $1, $5
89 ; MIPS4-NEXT:    srl $5, $1, 1
90 ; MIPS4-NEXT:    and $2, $5, $2
91 ; MIPS4-NEXT:    subu $1, $1, $2
92 ; MIPS4-NEXT:    and $2, $1, $3
93 ; MIPS4-NEXT:    srl $1, $1, 2
94 ; MIPS4-NEXT:    and $1, $1, $3
95 ; MIPS4-NEXT:    addu $1, $2, $1
96 ; MIPS4-NEXT:    srl $2, $1, 4
97 ; MIPS4-NEXT:    addu $1, $1, $2
98 ; MIPS4-NEXT:    and $1, $1, $4
99 ; MIPS4-NEXT:    sll $2, $1, 8
100 ; MIPS4-NEXT:    addu $2, $2, $1
101 ; MIPS4-NEXT:    sll $3, $1, 16
102 ; MIPS4-NEXT:    addu $2, $3, $2
103 ; MIPS4-NEXT:    sll $1, $1, 24
104 ; MIPS4-NEXT:    addu $1, $1, $2
105 ; MIPS4-NEXT:    jr $ra
106 ; MIPS4-NEXT:    srl $2, $1, 24
107 entry:
108   %neg = xor i32 %X, -1
109   %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %neg, i1 true)
110   ret i32 %tmp1
113 define i64 @ctlz_i64(i64 %X) nounwind readnone {
114 ; MIPS32-R1-R2-LABEL: ctlz_i64:
115 ; MIPS32-R1-R2:       # %bb.0: # %entry
116 ; MIPS32-R1-R2-NEXT:    clz $1, $5
117 ; MIPS32-R1-R2-NEXT:    clz $2, $4
118 ; MIPS32-R1-R2-NEXT:    addiu $2, $2, 32
119 ; MIPS32-R1-R2-NEXT:    movn $2, $1, $5
120 ; MIPS32-R1-R2-NEXT:    jr $ra
121 ; MIPS32-R1-R2-NEXT:    addiu $3, $zero, 0
123 ; MIPS32-R6-LABEL: ctlz_i64:
124 ; MIPS32-R6:       # %bb.0: # %entry
125 ; MIPS32-R6-NEXT:    clz $1, $5
126 ; MIPS32-R6-NEXT:    selnez $1, $1, $5
127 ; MIPS32-R6-NEXT:    clz $2, $4
128 ; MIPS32-R6-NEXT:    addiu $2, $2, 32
129 ; MIPS32-R6-NEXT:    seleqz $2, $2, $5
130 ; MIPS32-R6-NEXT:    or $2, $1, $2
131 ; MIPS32-R6-NEXT:    jr $ra
132 ; MIPS32-R6-NEXT:    addiu $3, $zero, 0
134 ; MIPS64-GT-R1-LABEL: ctlz_i64:
135 ; MIPS64-GT-R1:       # %bb.0: # %entry
136 ; MIPS64-GT-R1-NEXT:    jr $ra
137 ; MIPS64-GT-R1-NEXT:    dclz $2, $4
139 ; MIPS4-LABEL: ctlz_i64:
140 ; MIPS4:       # %bb.0: # %entry
141 ; MIPS4-NEXT:    dsrl $1, $4, 1
142 ; MIPS4-NEXT:    or $1, $4, $1
143 ; MIPS4-NEXT:    dsrl $2, $1, 2
144 ; MIPS4-NEXT:    or $1, $1, $2
145 ; MIPS4-NEXT:    dsrl $2, $1, 4
146 ; MIPS4-NEXT:    or $1, $1, $2
147 ; MIPS4-NEXT:    lui $2, 13107
148 ; MIPS4-NEXT:    dsrl $3, $1, 8
149 ; MIPS4-NEXT:    daddiu $2, $2, 13107
150 ; MIPS4-NEXT:    or $1, $1, $3
151 ; MIPS4-NEXT:    dsll $2, $2, 16
152 ; MIPS4-NEXT:    lui $3, 3855
153 ; MIPS4-NEXT:    daddiu $3, $3, 3855
154 ; MIPS4-NEXT:    dsll $3, $3, 16
155 ; MIPS4-NEXT:    daddiu $3, $3, 3855
156 ; MIPS4-NEXT:    daddiu $2, $2, 13107
157 ; MIPS4-NEXT:    lui $4, 21845
158 ; MIPS4-NEXT:    daddiu $4, $4, 21845
159 ; MIPS4-NEXT:    dsll $4, $4, 16
160 ; MIPS4-NEXT:    dsrl $5, $1, 16
161 ; MIPS4-NEXT:    or $1, $1, $5
162 ; MIPS4-NEXT:    dsll $2, $2, 16
163 ; MIPS4-NEXT:    dsll $3, $3, 16
164 ; MIPS4-NEXT:    lui $5, 257
165 ; MIPS4-NEXT:    daddiu $5, $5, 257
166 ; MIPS4-NEXT:    dsll $5, $5, 16
167 ; MIPS4-NEXT:    daddiu $5, $5, 257
168 ; MIPS4-NEXT:    dsll $5, $5, 16
169 ; MIPS4-NEXT:    dsrl $6, $1, 32
170 ; MIPS4-NEXT:    daddiu $5, $5, 257
171 ; MIPS4-NEXT:    daddiu $3, $3, 3855
172 ; MIPS4-NEXT:    daddiu $2, $2, 13107
173 ; MIPS4-NEXT:    daddiu $4, $4, 21845
174 ; MIPS4-NEXT:    dsll $4, $4, 16
175 ; MIPS4-NEXT:    daddiu $4, $4, 21845
176 ; MIPS4-NEXT:    nor $1, $1, $6
177 ; MIPS4-NEXT:    dsrl $6, $1, 1
178 ; MIPS4-NEXT:    and $4, $6, $4
179 ; MIPS4-NEXT:    dsubu $1, $1, $4
180 ; MIPS4-NEXT:    and $4, $1, $2
181 ; MIPS4-NEXT:    dsrl $1, $1, 2
182 ; MIPS4-NEXT:    and $1, $1, $2
183 ; MIPS4-NEXT:    daddu $1, $4, $1
184 ; MIPS4-NEXT:    dsrl $2, $1, 4
185 ; MIPS4-NEXT:    daddu $1, $1, $2
186 ; MIPS4-NEXT:    and $1, $1, $3
187 ; MIPS4-NEXT:    dmult $1, $5
188 ; MIPS4-NEXT:    mflo $1
189 ; MIPS4-NEXT:    jr $ra
190 ; MIPS4-NEXT:    dsrl $2, $1, 56
191 entry:
192   %tmp1 = tail call i64 @llvm.ctlz.i64(i64 %X, i1 true)
193   ret i64 %tmp1
196 declare i64 @llvm.ctlz.i64(i64, i1) nounwind readnone
198 define i64 @ctlo_i64(i64 %X) nounwind readnone {
199 ; MIPS32-R1-R2-LABEL: ctlo_i64:
200 ; MIPS32-R1-R2:       # %bb.0: # %entry
201 ; MIPS32-R1-R2-NEXT:    not $1, $5
202 ; MIPS32-R1-R2-NEXT:    clo $3, $5
203 ; MIPS32-R1-R2-NEXT:    clo $2, $4
204 ; MIPS32-R1-R2-NEXT:    addiu $2, $2, 32
205 ; MIPS32-R1-R2-NEXT:    movn $2, $3, $1
206 ; MIPS32-R1-R2-NEXT:    jr $ra
207 ; MIPS32-R1-R2-NEXT:    addiu $3, $zero, 0
209 ; MIPS32-R6-LABEL: ctlo_i64:
210 ; MIPS32-R6:       # %bb.0: # %entry
211 ; MIPS32-R6-NEXT:    not $1, $5
212 ; MIPS32-R6-NEXT:    clo $2, $5
213 ; MIPS32-R6-NEXT:    selnez $2, $2, $1
214 ; MIPS32-R6-NEXT:    clo $3, $4
215 ; MIPS32-R6-NEXT:    addiu $3, $3, 32
216 ; MIPS32-R6-NEXT:    seleqz $1, $3, $1
217 ; MIPS32-R6-NEXT:    or $2, $2, $1
218 ; MIPS32-R6-NEXT:    jr $ra
219 ; MIPS32-R6-NEXT:    addiu $3, $zero, 0
221 ; MIPS64-GT-R1-LABEL: ctlo_i64:
222 ; MIPS64-GT-R1:       # %bb.0: # %entry
223 ; MIPS64-GT-R1-NEXT:    jr $ra
224 ; MIPS64-GT-R1-NEXT:    dclo $2, $4
226 ; MIPS4-LABEL: ctlo_i64:
227 ; MIPS4:       # %bb.0: # %entry
228 ; MIPS4-NEXT:    daddiu $1, $zero, -1
229 ; MIPS4-NEXT:    xor $1, $4, $1
230 ; MIPS4-NEXT:    dsrl $2, $1, 1
231 ; MIPS4-NEXT:    or $1, $1, $2
232 ; MIPS4-NEXT:    dsrl $2, $1, 2
233 ; MIPS4-NEXT:    or $1, $1, $2
234 ; MIPS4-NEXT:    dsrl $2, $1, 4
235 ; MIPS4-NEXT:    lui $3, 13107
236 ; MIPS4-NEXT:    or $1, $1, $2
237 ; MIPS4-NEXT:    daddiu $2, $3, 13107
238 ; MIPS4-NEXT:    dsrl $3, $1, 8
239 ; MIPS4-NEXT:    dsll $2, $2, 16
240 ; MIPS4-NEXT:    lui $4, 3855
241 ; MIPS4-NEXT:    daddiu $4, $4, 3855
242 ; MIPS4-NEXT:    dsll $4, $4, 16
243 ; MIPS4-NEXT:    or $1, $1, $3
244 ; MIPS4-NEXT:    daddiu $3, $4, 3855
245 ; MIPS4-NEXT:    daddiu $2, $2, 13107
246 ; MIPS4-NEXT:    lui $4, 21845
247 ; MIPS4-NEXT:    daddiu $4, $4, 21845
248 ; MIPS4-NEXT:    dsll $4, $4, 16
249 ; MIPS4-NEXT:    daddiu $4, $4, 21845
250 ; MIPS4-NEXT:    dsrl $5, $1, 16
251 ; MIPS4-NEXT:    dsll $2, $2, 16
252 ; MIPS4-NEXT:    dsll $3, $3, 16
253 ; MIPS4-NEXT:    lui $6, 257
254 ; MIPS4-NEXT:    daddiu $6, $6, 257
255 ; MIPS4-NEXT:    dsll $6, $6, 16
256 ; MIPS4-NEXT:    daddiu $6, $6, 257
257 ; MIPS4-NEXT:    dsll $6, $6, 16
258 ; MIPS4-NEXT:    or $1, $1, $5
259 ; MIPS4-NEXT:    daddiu $5, $6, 257
260 ; MIPS4-NEXT:    daddiu $3, $3, 3855
261 ; MIPS4-NEXT:    daddiu $2, $2, 13107
262 ; MIPS4-NEXT:    dsll $4, $4, 16
263 ; MIPS4-NEXT:    daddiu $4, $4, 21845
264 ; MIPS4-NEXT:    dsrl $6, $1, 32
265 ; MIPS4-NEXT:    nor $1, $1, $6
266 ; MIPS4-NEXT:    dsrl $6, $1, 1
267 ; MIPS4-NEXT:    and $4, $6, $4
268 ; MIPS4-NEXT:    dsubu $1, $1, $4
269 ; MIPS4-NEXT:    and $4, $1, $2
270 ; MIPS4-NEXT:    dsrl $1, $1, 2
271 ; MIPS4-NEXT:    and $1, $1, $2
272 ; MIPS4-NEXT:    daddu $1, $4, $1
273 ; MIPS4-NEXT:    dsrl $2, $1, 4
274 ; MIPS4-NEXT:    daddu $1, $1, $2
275 ; MIPS4-NEXT:    and $1, $1, $3
276 ; MIPS4-NEXT:    dmult $1, $5
277 ; MIPS4-NEXT:    mflo $1
278 ; MIPS4-NEXT:    jr $ra
279 ; MIPS4-NEXT:    dsrl $2, $1, 56
280 entry:
281   %neg = xor i64 %X, -1
282   %tmp1 = tail call i64 @llvm.ctlz.i64(i64 %neg, i1 true)
283   ret i64 %tmp1