[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fpclamptosat_vec.ll
blobaa845bd8bb0b7bb00f7327743b40bcbf47bd1826
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+v -verify-machineinstrs < %s \
3 ; RUN:   -target-abi=lp64d -riscv-v-vector-bits-min=0 | FileCheck --check-prefix=CHECK-NOV %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+v -verify-machineinstrs < %s \
5 ; RUN:   -target-abi=lp64d -riscv-v-vector-bits-min=-1 | FileCheck --check-prefix=CHECK-V %s
7 ; i32 saturate
9 define <2 x i32> @stest_f64i32(<2 x double> %x) {
10 ; CHECK-NOV-LABEL: stest_f64i32:
11 ; CHECK-NOV:       # %bb.0: # %entry
12 ; CHECK-NOV-NEXT:    fcvt.l.d a1, fa1, rtz
13 ; CHECK-NOV-NEXT:    lui a2, 524288
14 ; CHECK-NOV-NEXT:    addiw a3, a2, -1
15 ; CHECK-NOV-NEXT:    fcvt.l.d a0, fa0, rtz
16 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB0_5
17 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
18 ; CHECK-NOV-NEXT:    bge a0, a3, .LBB0_6
19 ; CHECK-NOV-NEXT:  .LBB0_2: # %entry
20 ; CHECK-NOV-NEXT:    bge a2, a0, .LBB0_7
21 ; CHECK-NOV-NEXT:  .LBB0_3: # %entry
22 ; CHECK-NOV-NEXT:    bge a2, a1, .LBB0_8
23 ; CHECK-NOV-NEXT:  .LBB0_4: # %entry
24 ; CHECK-NOV-NEXT:    ret
25 ; CHECK-NOV-NEXT:  .LBB0_5: # %entry
26 ; CHECK-NOV-NEXT:    mv a1, a3
27 ; CHECK-NOV-NEXT:    blt a0, a3, .LBB0_2
28 ; CHECK-NOV-NEXT:  .LBB0_6: # %entry
29 ; CHECK-NOV-NEXT:    mv a0, a3
30 ; CHECK-NOV-NEXT:    blt a2, a3, .LBB0_3
31 ; CHECK-NOV-NEXT:  .LBB0_7: # %entry
32 ; CHECK-NOV-NEXT:    lui a0, 524288
33 ; CHECK-NOV-NEXT:    blt a2, a1, .LBB0_4
34 ; CHECK-NOV-NEXT:  .LBB0_8: # %entry
35 ; CHECK-NOV-NEXT:    lui a1, 524288
36 ; CHECK-NOV-NEXT:    ret
38 ; CHECK-V-LABEL: stest_f64i32:
39 ; CHECK-V:       # %bb.0: # %entry
40 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
41 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
42 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
43 ; CHECK-V-NEXT:    vnclip.wi v8, v8, 0
44 ; CHECK-V-NEXT:    ret
45 entry:
46   %conv = fptosi <2 x double> %x to <2 x i64>
47   %0 = icmp slt <2 x i64> %conv, <i64 2147483647, i64 2147483647>
48   %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 2147483647, i64 2147483647>
49   %1 = icmp sgt <2 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648>
50   %spec.store.select7 = select <2 x i1> %1, <2 x i64> %spec.store.select, <2 x i64> <i64 -2147483648, i64 -2147483648>
51   %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>
52   ret <2 x i32> %conv6
55 define <2 x i32> @utest_f64i32(<2 x double> %x) {
56 ; CHECK-NOV-LABEL: utest_f64i32:
57 ; CHECK-NOV:       # %bb.0: # %entry
58 ; CHECK-NOV-NEXT:    fcvt.lu.d a0, fa0, rtz
59 ; CHECK-NOV-NEXT:    li a2, -1
60 ; CHECK-NOV-NEXT:    srli a2, a2, 32
61 ; CHECK-NOV-NEXT:    fcvt.lu.d a1, fa1, rtz
62 ; CHECK-NOV-NEXT:    bgeu a0, a2, .LBB1_3
63 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
64 ; CHECK-NOV-NEXT:    bgeu a1, a2, .LBB1_4
65 ; CHECK-NOV-NEXT:  .LBB1_2: # %entry
66 ; CHECK-NOV-NEXT:    ret
67 ; CHECK-NOV-NEXT:  .LBB1_3: # %entry
68 ; CHECK-NOV-NEXT:    mv a0, a2
69 ; CHECK-NOV-NEXT:    bltu a1, a2, .LBB1_2
70 ; CHECK-NOV-NEXT:  .LBB1_4: # %entry
71 ; CHECK-NOV-NEXT:    mv a1, a2
72 ; CHECK-NOV-NEXT:    ret
74 ; CHECK-V-LABEL: utest_f64i32:
75 ; CHECK-V:       # %bb.0: # %entry
76 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
77 ; CHECK-V-NEXT:    vfcvt.rtz.xu.f.v v8, v8
78 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
79 ; CHECK-V-NEXT:    vnclipu.wi v8, v8, 0
80 ; CHECK-V-NEXT:    ret
81 entry:
82   %conv = fptoui <2 x double> %x to <2 x i64>
83   %0 = icmp ult <2 x i64> %conv, <i64 4294967295, i64 4294967295>
84   %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>
85   %conv6 = trunc <2 x i64> %spec.store.select to <2 x i32>
86   ret <2 x i32> %conv6
89 define <2 x i32> @ustest_f64i32(<2 x double> %x) {
90 ; CHECK-NOV-LABEL: ustest_f64i32:
91 ; CHECK-NOV:       # %bb.0: # %entry
92 ; CHECK-NOV-NEXT:    fcvt.l.d a1, fa1, rtz
93 ; CHECK-NOV-NEXT:    li a2, -1
94 ; CHECK-NOV-NEXT:    srli a2, a2, 32
95 ; CHECK-NOV-NEXT:    fcvt.l.d a0, fa0, rtz
96 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB2_2
97 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
98 ; CHECK-NOV-NEXT:    mv a1, a2
99 ; CHECK-NOV-NEXT:  .LBB2_2: # %entry
100 ; CHECK-NOV-NEXT:    blt a0, a2, .LBB2_4
101 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
102 ; CHECK-NOV-NEXT:    mv a0, a2
103 ; CHECK-NOV-NEXT:  .LBB2_4: # %entry
104 ; CHECK-NOV-NEXT:    sgtz a2, a1
105 ; CHECK-NOV-NEXT:    sgtz a3, a0
106 ; CHECK-NOV-NEXT:    neg a3, a3
107 ; CHECK-NOV-NEXT:    and a0, a3, a0
108 ; CHECK-NOV-NEXT:    neg a2, a2
109 ; CHECK-NOV-NEXT:    and a1, a2, a1
110 ; CHECK-NOV-NEXT:    ret
112 ; CHECK-V-LABEL: ustest_f64i32:
113 ; CHECK-V:       # %bb.0: # %entry
114 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
115 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
116 ; CHECK-V-NEXT:    li a0, -1
117 ; CHECK-V-NEXT:    srli a0, a0, 32
118 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
119 ; CHECK-V-NEXT:    vmax.vx v8, v8, zero
120 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
121 ; CHECK-V-NEXT:    vnsrl.wi v8, v8, 0
122 ; CHECK-V-NEXT:    ret
123 entry:
124   %conv = fptosi <2 x double> %x to <2 x i64>
125   %0 = icmp slt <2 x i64> %conv, <i64 4294967295, i64 4294967295>
126   %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>
127   %1 = icmp sgt <2 x i64> %spec.store.select, zeroinitializer
128   %spec.store.select7 = select <2 x i1> %1, <2 x i64> %spec.store.select, <2 x i64> zeroinitializer
129   %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>
130   ret <2 x i32> %conv6
133 define <4 x i32> @stest_f32i32(<4 x float> %x) {
134 ; CHECK-NOV-LABEL: stest_f32i32:
135 ; CHECK-NOV:       # %bb.0: # %entry
136 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fa3, rtz
137 ; CHECK-NOV-NEXT:    lui a3, 524288
138 ; CHECK-NOV-NEXT:    addiw a6, a3, -1
139 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fa2, rtz
140 ; CHECK-NOV-NEXT:    bge a1, a6, .LBB3_10
141 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
142 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fa1, rtz
143 ; CHECK-NOV-NEXT:    bge a2, a6, .LBB3_11
144 ; CHECK-NOV-NEXT:  .LBB3_2: # %entry
145 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
146 ; CHECK-NOV-NEXT:    bge a4, a6, .LBB3_12
147 ; CHECK-NOV-NEXT:  .LBB3_3: # %entry
148 ; CHECK-NOV-NEXT:    bge a5, a6, .LBB3_13
149 ; CHECK-NOV-NEXT:  .LBB3_4: # %entry
150 ; CHECK-NOV-NEXT:    bge a3, a5, .LBB3_14
151 ; CHECK-NOV-NEXT:  .LBB3_5: # %entry
152 ; CHECK-NOV-NEXT:    bge a3, a4, .LBB3_15
153 ; CHECK-NOV-NEXT:  .LBB3_6: # %entry
154 ; CHECK-NOV-NEXT:    bge a3, a2, .LBB3_16
155 ; CHECK-NOV-NEXT:  .LBB3_7: # %entry
156 ; CHECK-NOV-NEXT:    blt a3, a1, .LBB3_9
157 ; CHECK-NOV-NEXT:  .LBB3_8: # %entry
158 ; CHECK-NOV-NEXT:    lui a1, 524288
159 ; CHECK-NOV-NEXT:  .LBB3_9: # %entry
160 ; CHECK-NOV-NEXT:    sw a1, 12(a0)
161 ; CHECK-NOV-NEXT:    sw a2, 8(a0)
162 ; CHECK-NOV-NEXT:    sw a4, 4(a0)
163 ; CHECK-NOV-NEXT:    sw a5, 0(a0)
164 ; CHECK-NOV-NEXT:    ret
165 ; CHECK-NOV-NEXT:  .LBB3_10: # %entry
166 ; CHECK-NOV-NEXT:    mv a1, a6
167 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fa1, rtz
168 ; CHECK-NOV-NEXT:    blt a2, a6, .LBB3_2
169 ; CHECK-NOV-NEXT:  .LBB3_11: # %entry
170 ; CHECK-NOV-NEXT:    mv a2, a6
171 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
172 ; CHECK-NOV-NEXT:    blt a4, a6, .LBB3_3
173 ; CHECK-NOV-NEXT:  .LBB3_12: # %entry
174 ; CHECK-NOV-NEXT:    mv a4, a6
175 ; CHECK-NOV-NEXT:    blt a5, a6, .LBB3_4
176 ; CHECK-NOV-NEXT:  .LBB3_13: # %entry
177 ; CHECK-NOV-NEXT:    mv a5, a6
178 ; CHECK-NOV-NEXT:    blt a3, a6, .LBB3_5
179 ; CHECK-NOV-NEXT:  .LBB3_14: # %entry
180 ; CHECK-NOV-NEXT:    lui a5, 524288
181 ; CHECK-NOV-NEXT:    blt a3, a4, .LBB3_6
182 ; CHECK-NOV-NEXT:  .LBB3_15: # %entry
183 ; CHECK-NOV-NEXT:    lui a4, 524288
184 ; CHECK-NOV-NEXT:    blt a3, a2, .LBB3_7
185 ; CHECK-NOV-NEXT:  .LBB3_16: # %entry
186 ; CHECK-NOV-NEXT:    lui a2, 524288
187 ; CHECK-NOV-NEXT:    bge a3, a1, .LBB3_8
188 ; CHECK-NOV-NEXT:    j .LBB3_9
190 ; CHECK-V-LABEL: stest_f32i32:
191 ; CHECK-V:       # %bb.0: # %entry
192 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
193 ; CHECK-V-NEXT:    vfwcvt.rtz.x.f.v v10, v8
194 ; CHECK-V-NEXT:    vnclip.wi v8, v10, 0
195 ; CHECK-V-NEXT:    ret
196 entry:
197   %conv = fptosi <4 x float> %x to <4 x i64>
198   %0 = icmp slt <4 x i64> %conv, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
199   %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
200   %1 = icmp sgt <4 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
201   %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
202   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
203   ret <4 x i32> %conv6
206 define <4 x i32> @utest_f32i32(<4 x float> %x) {
207 ; CHECK-NOV-LABEL: utest_f32i32:
208 ; CHECK-NOV:       # %bb.0: # %entry
209 ; CHECK-NOV-NEXT:    fcvt.lu.s a1, fa0, rtz
210 ; CHECK-NOV-NEXT:    li a3, -1
211 ; CHECK-NOV-NEXT:    srli a3, a3, 32
212 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fa1, rtz
213 ; CHECK-NOV-NEXT:    bgeu a1, a3, .LBB4_6
214 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
215 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fa2, rtz
216 ; CHECK-NOV-NEXT:    bgeu a2, a3, .LBB4_7
217 ; CHECK-NOV-NEXT:  .LBB4_2: # %entry
218 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fa3, rtz
219 ; CHECK-NOV-NEXT:    bgeu a4, a3, .LBB4_8
220 ; CHECK-NOV-NEXT:  .LBB4_3: # %entry
221 ; CHECK-NOV-NEXT:    bltu a5, a3, .LBB4_5
222 ; CHECK-NOV-NEXT:  .LBB4_4: # %entry
223 ; CHECK-NOV-NEXT:    mv a5, a3
224 ; CHECK-NOV-NEXT:  .LBB4_5: # %entry
225 ; CHECK-NOV-NEXT:    sw a5, 12(a0)
226 ; CHECK-NOV-NEXT:    sw a4, 8(a0)
227 ; CHECK-NOV-NEXT:    sw a2, 4(a0)
228 ; CHECK-NOV-NEXT:    sw a1, 0(a0)
229 ; CHECK-NOV-NEXT:    ret
230 ; CHECK-NOV-NEXT:  .LBB4_6: # %entry
231 ; CHECK-NOV-NEXT:    mv a1, a3
232 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fa2, rtz
233 ; CHECK-NOV-NEXT:    bltu a2, a3, .LBB4_2
234 ; CHECK-NOV-NEXT:  .LBB4_7: # %entry
235 ; CHECK-NOV-NEXT:    mv a2, a3
236 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fa3, rtz
237 ; CHECK-NOV-NEXT:    bltu a4, a3, .LBB4_3
238 ; CHECK-NOV-NEXT:  .LBB4_8: # %entry
239 ; CHECK-NOV-NEXT:    mv a4, a3
240 ; CHECK-NOV-NEXT:    bgeu a5, a3, .LBB4_4
241 ; CHECK-NOV-NEXT:    j .LBB4_5
243 ; CHECK-V-LABEL: utest_f32i32:
244 ; CHECK-V:       # %bb.0: # %entry
245 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
246 ; CHECK-V-NEXT:    vfwcvt.rtz.xu.f.v v10, v8
247 ; CHECK-V-NEXT:    vnclipu.wi v8, v10, 0
248 ; CHECK-V-NEXT:    ret
249 entry:
250   %conv = fptoui <4 x float> %x to <4 x i64>
251   %0 = icmp ult <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
252   %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
253   %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>
254   ret <4 x i32> %conv6
257 define <4 x i32> @ustest_f32i32(<4 x float> %x) {
258 ; CHECK-NOV-LABEL: ustest_f32i32:
259 ; CHECK-NOV:       # %bb.0: # %entry
260 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fa3, rtz
261 ; CHECK-NOV-NEXT:    li a4, -1
262 ; CHECK-NOV-NEXT:    srli a4, a4, 32
263 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fa2, rtz
264 ; CHECK-NOV-NEXT:    bge a1, a4, .LBB5_6
265 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
266 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fa1, rtz
267 ; CHECK-NOV-NEXT:    bge a2, a4, .LBB5_7
268 ; CHECK-NOV-NEXT:  .LBB5_2: # %entry
269 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
270 ; CHECK-NOV-NEXT:    bge a3, a4, .LBB5_8
271 ; CHECK-NOV-NEXT:  .LBB5_3: # %entry
272 ; CHECK-NOV-NEXT:    blt a5, a4, .LBB5_5
273 ; CHECK-NOV-NEXT:  .LBB5_4: # %entry
274 ; CHECK-NOV-NEXT:    mv a5, a4
275 ; CHECK-NOV-NEXT:  .LBB5_5: # %entry
276 ; CHECK-NOV-NEXT:    sgtz a4, a1
277 ; CHECK-NOV-NEXT:    sgtz a6, a2
278 ; CHECK-NOV-NEXT:    sgtz a7, a3
279 ; CHECK-NOV-NEXT:    sgtz t0, a5
280 ; CHECK-NOV-NEXT:    negw t0, t0
281 ; CHECK-NOV-NEXT:    and a5, t0, a5
282 ; CHECK-NOV-NEXT:    negw a7, a7
283 ; CHECK-NOV-NEXT:    and a3, a7, a3
284 ; CHECK-NOV-NEXT:    negw a6, a6
285 ; CHECK-NOV-NEXT:    and a2, a6, a2
286 ; CHECK-NOV-NEXT:    negw a4, a4
287 ; CHECK-NOV-NEXT:    and a1, a4, a1
288 ; CHECK-NOV-NEXT:    sw a1, 12(a0)
289 ; CHECK-NOV-NEXT:    sw a2, 8(a0)
290 ; CHECK-NOV-NEXT:    sw a3, 4(a0)
291 ; CHECK-NOV-NEXT:    sw a5, 0(a0)
292 ; CHECK-NOV-NEXT:    ret
293 ; CHECK-NOV-NEXT:  .LBB5_6: # %entry
294 ; CHECK-NOV-NEXT:    mv a1, a4
295 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fa1, rtz
296 ; CHECK-NOV-NEXT:    blt a2, a4, .LBB5_2
297 ; CHECK-NOV-NEXT:  .LBB5_7: # %entry
298 ; CHECK-NOV-NEXT:    mv a2, a4
299 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
300 ; CHECK-NOV-NEXT:    blt a3, a4, .LBB5_3
301 ; CHECK-NOV-NEXT:  .LBB5_8: # %entry
302 ; CHECK-NOV-NEXT:    mv a3, a4
303 ; CHECK-NOV-NEXT:    bge a5, a4, .LBB5_4
304 ; CHECK-NOV-NEXT:    j .LBB5_5
306 ; CHECK-V-LABEL: ustest_f32i32:
307 ; CHECK-V:       # %bb.0: # %entry
308 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
309 ; CHECK-V-NEXT:    vfwcvt.rtz.x.f.v v10, v8
310 ; CHECK-V-NEXT:    li a0, -1
311 ; CHECK-V-NEXT:    srli a0, a0, 32
312 ; CHECK-V-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
313 ; CHECK-V-NEXT:    vmin.vx v8, v10, a0
314 ; CHECK-V-NEXT:    vmax.vx v10, v8, zero
315 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
316 ; CHECK-V-NEXT:    vnsrl.wi v8, v10, 0
317 ; CHECK-V-NEXT:    ret
318 entry:
319   %conv = fptosi <4 x float> %x to <4 x i64>
320   %0 = icmp slt <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
321   %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
322   %1 = icmp sgt <4 x i64> %spec.store.select, zeroinitializer
323   %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> zeroinitializer
324   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
325   ret <4 x i32> %conv6
328 define <4 x i32> @stest_f16i32(<4 x half> %x) {
329 ; CHECK-NOV-LABEL: stest_f16i32:
330 ; CHECK-NOV:       # %bb.0: # %entry
331 ; CHECK-NOV-NEXT:    addi sp, sp, -64
332 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 64
333 ; CHECK-NOV-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
334 ; CHECK-NOV-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
335 ; CHECK-NOV-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
336 ; CHECK-NOV-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
337 ; CHECK-NOV-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
338 ; CHECK-NOV-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
339 ; CHECK-NOV-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
340 ; CHECK-NOV-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
341 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
342 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
343 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
344 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
345 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
346 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -48
347 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -56
348 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -64
349 ; CHECK-NOV-NEXT:    lhu s1, 24(a1)
350 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
351 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
352 ; CHECK-NOV-NEXT:    lhu a1, 16(a1)
353 ; CHECK-NOV-NEXT:    mv s0, a0
354 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
355 ; CHECK-NOV-NEXT:    call __extendhfsf2
356 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
357 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
358 ; CHECK-NOV-NEXT:    call __extendhfsf2
359 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
360 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
361 ; CHECK-NOV-NEXT:    call __extendhfsf2
362 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
363 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
364 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs2, rtz
365 ; CHECK-NOV-NEXT:    call __extendhfsf2
366 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
367 ; CHECK-NOV-NEXT:    lui a1, 524288
368 ; CHECK-NOV-NEXT:    addiw a4, a1, -1
369 ; CHECK-NOV-NEXT:    bge a0, a4, .LBB6_10
370 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
371 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs1, rtz
372 ; CHECK-NOV-NEXT:    bge s1, a4, .LBB6_11
373 ; CHECK-NOV-NEXT:  .LBB6_2: # %entry
374 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
375 ; CHECK-NOV-NEXT:    bge a2, a4, .LBB6_12
376 ; CHECK-NOV-NEXT:  .LBB6_3: # %entry
377 ; CHECK-NOV-NEXT:    bge a3, a4, .LBB6_13
378 ; CHECK-NOV-NEXT:  .LBB6_4: # %entry
379 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB6_14
380 ; CHECK-NOV-NEXT:  .LBB6_5: # %entry
381 ; CHECK-NOV-NEXT:    bge a1, a2, .LBB6_15
382 ; CHECK-NOV-NEXT:  .LBB6_6: # %entry
383 ; CHECK-NOV-NEXT:    bge a1, s1, .LBB6_16
384 ; CHECK-NOV-NEXT:  .LBB6_7: # %entry
385 ; CHECK-NOV-NEXT:    blt a1, a0, .LBB6_9
386 ; CHECK-NOV-NEXT:  .LBB6_8: # %entry
387 ; CHECK-NOV-NEXT:    lui a0, 524288
388 ; CHECK-NOV-NEXT:  .LBB6_9: # %entry
389 ; CHECK-NOV-NEXT:    sw a0, 12(s0)
390 ; CHECK-NOV-NEXT:    sw s1, 8(s0)
391 ; CHECK-NOV-NEXT:    sw a2, 4(s0)
392 ; CHECK-NOV-NEXT:    sw a3, 0(s0)
393 ; CHECK-NOV-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
394 ; CHECK-NOV-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
395 ; CHECK-NOV-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
396 ; CHECK-NOV-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
397 ; CHECK-NOV-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
398 ; CHECK-NOV-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
399 ; CHECK-NOV-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
400 ; CHECK-NOV-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
401 ; CHECK-NOV-NEXT:    addi sp, sp, 64
402 ; CHECK-NOV-NEXT:    ret
403 ; CHECK-NOV-NEXT:  .LBB6_10: # %entry
404 ; CHECK-NOV-NEXT:    mv a0, a4
405 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs1, rtz
406 ; CHECK-NOV-NEXT:    blt s1, a4, .LBB6_2
407 ; CHECK-NOV-NEXT:  .LBB6_11: # %entry
408 ; CHECK-NOV-NEXT:    mv s1, a4
409 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
410 ; CHECK-NOV-NEXT:    blt a2, a4, .LBB6_3
411 ; CHECK-NOV-NEXT:  .LBB6_12: # %entry
412 ; CHECK-NOV-NEXT:    mv a2, a4
413 ; CHECK-NOV-NEXT:    blt a3, a4, .LBB6_4
414 ; CHECK-NOV-NEXT:  .LBB6_13: # %entry
415 ; CHECK-NOV-NEXT:    mv a3, a4
416 ; CHECK-NOV-NEXT:    blt a1, a4, .LBB6_5
417 ; CHECK-NOV-NEXT:  .LBB6_14: # %entry
418 ; CHECK-NOV-NEXT:    lui a3, 524288
419 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB6_6
420 ; CHECK-NOV-NEXT:  .LBB6_15: # %entry
421 ; CHECK-NOV-NEXT:    lui a2, 524288
422 ; CHECK-NOV-NEXT:    blt a1, s1, .LBB6_7
423 ; CHECK-NOV-NEXT:  .LBB6_16: # %entry
424 ; CHECK-NOV-NEXT:    lui s1, 524288
425 ; CHECK-NOV-NEXT:    bge a1, a0, .LBB6_8
426 ; CHECK-NOV-NEXT:    j .LBB6_9
428 ; CHECK-V-LABEL: stest_f16i32:
429 ; CHECK-V:       # %bb.0: # %entry
430 ; CHECK-V-NEXT:    addi sp, sp, -48
431 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 48
432 ; CHECK-V-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
433 ; CHECK-V-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
434 ; CHECK-V-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
435 ; CHECK-V-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
436 ; CHECK-V-NEXT:    .cfi_offset ra, -8
437 ; CHECK-V-NEXT:    .cfi_offset s0, -16
438 ; CHECK-V-NEXT:    .cfi_offset s1, -24
439 ; CHECK-V-NEXT:    .cfi_offset s2, -32
440 ; CHECK-V-NEXT:    csrr a1, vlenb
441 ; CHECK-V-NEXT:    slli a1, a1, 2
442 ; CHECK-V-NEXT:    sub sp, sp, a1
443 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 4 * vlenb
444 ; CHECK-V-NEXT:    lhu s0, 0(a0)
445 ; CHECK-V-NEXT:    lhu s1, 8(a0)
446 ; CHECK-V-NEXT:    lhu s2, 16(a0)
447 ; CHECK-V-NEXT:    lhu a0, 24(a0)
448 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
449 ; CHECK-V-NEXT:    call __extendhfsf2
450 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
451 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
452 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
453 ; CHECK-V-NEXT:    vmv.s.x v8, a0
454 ; CHECK-V-NEXT:    addi a0, sp, 16
455 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
456 ; CHECK-V-NEXT:    call __extendhfsf2
457 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
458 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
459 ; CHECK-V-NEXT:    vmv.s.x v8, a0
460 ; CHECK-V-NEXT:    addi a0, sp, 16
461 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
462 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
463 ; CHECK-V-NEXT:    csrr a0, vlenb
464 ; CHECK-V-NEXT:    add a0, sp, a0
465 ; CHECK-V-NEXT:    addi a0, a0, 16
466 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
467 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
468 ; CHECK-V-NEXT:    call __extendhfsf2
469 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
470 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
471 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
472 ; CHECK-V-NEXT:    vmv.s.x v8, a0
473 ; CHECK-V-NEXT:    addi a0, sp, 16
474 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
475 ; CHECK-V-NEXT:    call __extendhfsf2
476 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
477 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
478 ; CHECK-V-NEXT:    vmv.s.x v10, a0
479 ; CHECK-V-NEXT:    addi a0, sp, 16
480 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
481 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
482 ; CHECK-V-NEXT:    csrr a0, vlenb
483 ; CHECK-V-NEXT:    add a0, sp, a0
484 ; CHECK-V-NEXT:    addi a0, a0, 16
485 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
486 ; CHECK-V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
487 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
488 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
489 ; CHECK-V-NEXT:    vnclip.wi v8, v10, 0
490 ; CHECK-V-NEXT:    csrr a0, vlenb
491 ; CHECK-V-NEXT:    slli a0, a0, 2
492 ; CHECK-V-NEXT:    add sp, sp, a0
493 ; CHECK-V-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
494 ; CHECK-V-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
495 ; CHECK-V-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
496 ; CHECK-V-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
497 ; CHECK-V-NEXT:    addi sp, sp, 48
498 ; CHECK-V-NEXT:    ret
499 entry:
500   %conv = fptosi <4 x half> %x to <4 x i64>
501   %0 = icmp slt <4 x i64> %conv, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
502   %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
503   %1 = icmp sgt <4 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
504   %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
505   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
506   ret <4 x i32> %conv6
509 define <4 x i32> @utesth_f16i32(<4 x half> %x) {
510 ; CHECK-NOV-LABEL: utesth_f16i32:
511 ; CHECK-NOV:       # %bb.0: # %entry
512 ; CHECK-NOV-NEXT:    addi sp, sp, -64
513 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 64
514 ; CHECK-NOV-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
515 ; CHECK-NOV-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
516 ; CHECK-NOV-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
517 ; CHECK-NOV-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
518 ; CHECK-NOV-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
519 ; CHECK-NOV-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
520 ; CHECK-NOV-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
521 ; CHECK-NOV-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
522 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
523 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
524 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
525 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
526 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
527 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -48
528 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -56
529 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -64
530 ; CHECK-NOV-NEXT:    lhu s1, 0(a1)
531 ; CHECK-NOV-NEXT:    lhu s2, 24(a1)
532 ; CHECK-NOV-NEXT:    lhu s3, 16(a1)
533 ; CHECK-NOV-NEXT:    lhu a1, 8(a1)
534 ; CHECK-NOV-NEXT:    mv s0, a0
535 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
536 ; CHECK-NOV-NEXT:    call __extendhfsf2
537 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
538 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
539 ; CHECK-NOV-NEXT:    call __extendhfsf2
540 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
541 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
542 ; CHECK-NOV-NEXT:    call __extendhfsf2
543 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
544 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
545 ; CHECK-NOV-NEXT:    fcvt.lu.s s1, fs2, rtz
546 ; CHECK-NOV-NEXT:    call __extendhfsf2
547 ; CHECK-NOV-NEXT:    fcvt.lu.s a0, fa0, rtz
548 ; CHECK-NOV-NEXT:    li a1, -1
549 ; CHECK-NOV-NEXT:    srli a1, a1, 32
550 ; CHECK-NOV-NEXT:    bgeu a0, a1, .LBB7_6
551 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
552 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs1, rtz
553 ; CHECK-NOV-NEXT:    bgeu s1, a1, .LBB7_7
554 ; CHECK-NOV-NEXT:  .LBB7_2: # %entry
555 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs0, rtz
556 ; CHECK-NOV-NEXT:    bgeu a2, a1, .LBB7_8
557 ; CHECK-NOV-NEXT:  .LBB7_3: # %entry
558 ; CHECK-NOV-NEXT:    bltu a3, a1, .LBB7_5
559 ; CHECK-NOV-NEXT:  .LBB7_4: # %entry
560 ; CHECK-NOV-NEXT:    mv a3, a1
561 ; CHECK-NOV-NEXT:  .LBB7_5: # %entry
562 ; CHECK-NOV-NEXT:    sw a3, 12(s0)
563 ; CHECK-NOV-NEXT:    sw a2, 8(s0)
564 ; CHECK-NOV-NEXT:    sw s1, 4(s0)
565 ; CHECK-NOV-NEXT:    sw a0, 0(s0)
566 ; CHECK-NOV-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
567 ; CHECK-NOV-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
568 ; CHECK-NOV-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
569 ; CHECK-NOV-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
570 ; CHECK-NOV-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
571 ; CHECK-NOV-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
572 ; CHECK-NOV-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
573 ; CHECK-NOV-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
574 ; CHECK-NOV-NEXT:    addi sp, sp, 64
575 ; CHECK-NOV-NEXT:    ret
576 ; CHECK-NOV-NEXT:  .LBB7_6: # %entry
577 ; CHECK-NOV-NEXT:    mv a0, a1
578 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs1, rtz
579 ; CHECK-NOV-NEXT:    bltu s1, a1, .LBB7_2
580 ; CHECK-NOV-NEXT:  .LBB7_7: # %entry
581 ; CHECK-NOV-NEXT:    mv s1, a1
582 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs0, rtz
583 ; CHECK-NOV-NEXT:    bltu a2, a1, .LBB7_3
584 ; CHECK-NOV-NEXT:  .LBB7_8: # %entry
585 ; CHECK-NOV-NEXT:    mv a2, a1
586 ; CHECK-NOV-NEXT:    bgeu a3, a1, .LBB7_4
587 ; CHECK-NOV-NEXT:    j .LBB7_5
589 ; CHECK-V-LABEL: utesth_f16i32:
590 ; CHECK-V:       # %bb.0: # %entry
591 ; CHECK-V-NEXT:    addi sp, sp, -48
592 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 48
593 ; CHECK-V-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
594 ; CHECK-V-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
595 ; CHECK-V-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
596 ; CHECK-V-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
597 ; CHECK-V-NEXT:    .cfi_offset ra, -8
598 ; CHECK-V-NEXT:    .cfi_offset s0, -16
599 ; CHECK-V-NEXT:    .cfi_offset s1, -24
600 ; CHECK-V-NEXT:    .cfi_offset s2, -32
601 ; CHECK-V-NEXT:    csrr a1, vlenb
602 ; CHECK-V-NEXT:    slli a1, a1, 2
603 ; CHECK-V-NEXT:    sub sp, sp, a1
604 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 4 * vlenb
605 ; CHECK-V-NEXT:    lhu s0, 0(a0)
606 ; CHECK-V-NEXT:    lhu s1, 8(a0)
607 ; CHECK-V-NEXT:    lhu s2, 16(a0)
608 ; CHECK-V-NEXT:    lhu a0, 24(a0)
609 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
610 ; CHECK-V-NEXT:    call __extendhfsf2
611 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
612 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
613 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
614 ; CHECK-V-NEXT:    vmv.s.x v8, a0
615 ; CHECK-V-NEXT:    addi a0, sp, 16
616 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
617 ; CHECK-V-NEXT:    call __extendhfsf2
618 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
619 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
620 ; CHECK-V-NEXT:    vmv.s.x v8, a0
621 ; CHECK-V-NEXT:    addi a0, sp, 16
622 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
623 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
624 ; CHECK-V-NEXT:    csrr a0, vlenb
625 ; CHECK-V-NEXT:    add a0, sp, a0
626 ; CHECK-V-NEXT:    addi a0, a0, 16
627 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
628 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
629 ; CHECK-V-NEXT:    call __extendhfsf2
630 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
631 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
632 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
633 ; CHECK-V-NEXT:    vmv.s.x v8, a0
634 ; CHECK-V-NEXT:    addi a0, sp, 16
635 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
636 ; CHECK-V-NEXT:    call __extendhfsf2
637 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
638 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
639 ; CHECK-V-NEXT:    vmv.s.x v10, a0
640 ; CHECK-V-NEXT:    addi a0, sp, 16
641 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
642 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
643 ; CHECK-V-NEXT:    csrr a0, vlenb
644 ; CHECK-V-NEXT:    add a0, sp, a0
645 ; CHECK-V-NEXT:    addi a0, a0, 16
646 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
647 ; CHECK-V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
648 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
649 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
650 ; CHECK-V-NEXT:    vnclipu.wi v8, v10, 0
651 ; CHECK-V-NEXT:    csrr a0, vlenb
652 ; CHECK-V-NEXT:    slli a0, a0, 2
653 ; CHECK-V-NEXT:    add sp, sp, a0
654 ; CHECK-V-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
655 ; CHECK-V-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
656 ; CHECK-V-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
657 ; CHECK-V-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
658 ; CHECK-V-NEXT:    addi sp, sp, 48
659 ; CHECK-V-NEXT:    ret
660 entry:
661   %conv = fptoui <4 x half> %x to <4 x i64>
662   %0 = icmp ult <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
663   %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
664   %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>
665   ret <4 x i32> %conv6
668 define <4 x i32> @ustest_f16i32(<4 x half> %x) {
669 ; CHECK-NOV-LABEL: ustest_f16i32:
670 ; CHECK-NOV:       # %bb.0: # %entry
671 ; CHECK-NOV-NEXT:    addi sp, sp, -64
672 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 64
673 ; CHECK-NOV-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
674 ; CHECK-NOV-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
675 ; CHECK-NOV-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
676 ; CHECK-NOV-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
677 ; CHECK-NOV-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
678 ; CHECK-NOV-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
679 ; CHECK-NOV-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
680 ; CHECK-NOV-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
681 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
682 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
683 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
684 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
685 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
686 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -48
687 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -56
688 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -64
689 ; CHECK-NOV-NEXT:    lhu s1, 24(a1)
690 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
691 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
692 ; CHECK-NOV-NEXT:    lhu a1, 16(a1)
693 ; CHECK-NOV-NEXT:    mv s0, a0
694 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
695 ; CHECK-NOV-NEXT:    call __extendhfsf2
696 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
697 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
698 ; CHECK-NOV-NEXT:    call __extendhfsf2
699 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
700 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
701 ; CHECK-NOV-NEXT:    call __extendhfsf2
702 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
703 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
704 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs2, rtz
705 ; CHECK-NOV-NEXT:    call __extendhfsf2
706 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
707 ; CHECK-NOV-NEXT:    li a2, -1
708 ; CHECK-NOV-NEXT:    srli a2, a2, 32
709 ; CHECK-NOV-NEXT:    bge a0, a2, .LBB8_6
710 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
711 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs1, rtz
712 ; CHECK-NOV-NEXT:    bge s1, a2, .LBB8_7
713 ; CHECK-NOV-NEXT:  .LBB8_2: # %entry
714 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
715 ; CHECK-NOV-NEXT:    bge a1, a2, .LBB8_8
716 ; CHECK-NOV-NEXT:  .LBB8_3: # %entry
717 ; CHECK-NOV-NEXT:    blt a3, a2, .LBB8_5
718 ; CHECK-NOV-NEXT:  .LBB8_4: # %entry
719 ; CHECK-NOV-NEXT:    mv a3, a2
720 ; CHECK-NOV-NEXT:  .LBB8_5: # %entry
721 ; CHECK-NOV-NEXT:    sgtz a2, a0
722 ; CHECK-NOV-NEXT:    sgtz a4, s1
723 ; CHECK-NOV-NEXT:    sgtz a5, a1
724 ; CHECK-NOV-NEXT:    sgtz a6, a3
725 ; CHECK-NOV-NEXT:    negw a6, a6
726 ; CHECK-NOV-NEXT:    and a3, a6, a3
727 ; CHECK-NOV-NEXT:    negw a5, a5
728 ; CHECK-NOV-NEXT:    and a1, a5, a1
729 ; CHECK-NOV-NEXT:    negw a4, a4
730 ; CHECK-NOV-NEXT:    and a4, a4, s1
731 ; CHECK-NOV-NEXT:    negw a2, a2
732 ; CHECK-NOV-NEXT:    and a0, a2, a0
733 ; CHECK-NOV-NEXT:    sw a0, 12(s0)
734 ; CHECK-NOV-NEXT:    sw a4, 8(s0)
735 ; CHECK-NOV-NEXT:    sw a1, 4(s0)
736 ; CHECK-NOV-NEXT:    sw a3, 0(s0)
737 ; CHECK-NOV-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
738 ; CHECK-NOV-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
739 ; CHECK-NOV-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
740 ; CHECK-NOV-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
741 ; CHECK-NOV-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
742 ; CHECK-NOV-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
743 ; CHECK-NOV-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
744 ; CHECK-NOV-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
745 ; CHECK-NOV-NEXT:    addi sp, sp, 64
746 ; CHECK-NOV-NEXT:    ret
747 ; CHECK-NOV-NEXT:  .LBB8_6: # %entry
748 ; CHECK-NOV-NEXT:    mv a0, a2
749 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs1, rtz
750 ; CHECK-NOV-NEXT:    blt s1, a2, .LBB8_2
751 ; CHECK-NOV-NEXT:  .LBB8_7: # %entry
752 ; CHECK-NOV-NEXT:    mv s1, a2
753 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
754 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB8_3
755 ; CHECK-NOV-NEXT:  .LBB8_8: # %entry
756 ; CHECK-NOV-NEXT:    mv a1, a2
757 ; CHECK-NOV-NEXT:    bge a3, a2, .LBB8_4
758 ; CHECK-NOV-NEXT:    j .LBB8_5
760 ; CHECK-V-LABEL: ustest_f16i32:
761 ; CHECK-V:       # %bb.0: # %entry
762 ; CHECK-V-NEXT:    addi sp, sp, -48
763 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 48
764 ; CHECK-V-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
765 ; CHECK-V-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
766 ; CHECK-V-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
767 ; CHECK-V-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
768 ; CHECK-V-NEXT:    .cfi_offset ra, -8
769 ; CHECK-V-NEXT:    .cfi_offset s0, -16
770 ; CHECK-V-NEXT:    .cfi_offset s1, -24
771 ; CHECK-V-NEXT:    .cfi_offset s2, -32
772 ; CHECK-V-NEXT:    csrr a1, vlenb
773 ; CHECK-V-NEXT:    slli a1, a1, 2
774 ; CHECK-V-NEXT:    sub sp, sp, a1
775 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 4 * vlenb
776 ; CHECK-V-NEXT:    lhu s0, 0(a0)
777 ; CHECK-V-NEXT:    lhu s1, 8(a0)
778 ; CHECK-V-NEXT:    lhu s2, 16(a0)
779 ; CHECK-V-NEXT:    lhu a0, 24(a0)
780 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
781 ; CHECK-V-NEXT:    call __extendhfsf2
782 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
783 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
784 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
785 ; CHECK-V-NEXT:    vmv.s.x v8, a0
786 ; CHECK-V-NEXT:    addi a0, sp, 16
787 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
788 ; CHECK-V-NEXT:    call __extendhfsf2
789 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
790 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
791 ; CHECK-V-NEXT:    vmv.s.x v8, a0
792 ; CHECK-V-NEXT:    addi a0, sp, 16
793 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
794 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
795 ; CHECK-V-NEXT:    csrr a0, vlenb
796 ; CHECK-V-NEXT:    add a0, sp, a0
797 ; CHECK-V-NEXT:    addi a0, a0, 16
798 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
799 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
800 ; CHECK-V-NEXT:    call __extendhfsf2
801 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
802 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
803 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
804 ; CHECK-V-NEXT:    vmv.s.x v8, a0
805 ; CHECK-V-NEXT:    addi a0, sp, 16
806 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
807 ; CHECK-V-NEXT:    call __extendhfsf2
808 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
809 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
810 ; CHECK-V-NEXT:    vmv.s.x v8, a0
811 ; CHECK-V-NEXT:    addi a0, sp, 16
812 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
813 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
814 ; CHECK-V-NEXT:    csrr a0, vlenb
815 ; CHECK-V-NEXT:    add a0, sp, a0
816 ; CHECK-V-NEXT:    addi a0, a0, 16
817 ; CHECK-V-NEXT:    vl2r.v v10, (a0) # Unknown-size Folded Reload
818 ; CHECK-V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
819 ; CHECK-V-NEXT:    vslideup.vi v8, v10, 2
820 ; CHECK-V-NEXT:    li a0, -1
821 ; CHECK-V-NEXT:    srli a0, a0, 32
822 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
823 ; CHECK-V-NEXT:    vmax.vx v10, v8, zero
824 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
825 ; CHECK-V-NEXT:    vnsrl.wi v8, v10, 0
826 ; CHECK-V-NEXT:    csrr a0, vlenb
827 ; CHECK-V-NEXT:    slli a0, a0, 2
828 ; CHECK-V-NEXT:    add sp, sp, a0
829 ; CHECK-V-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
830 ; CHECK-V-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
831 ; CHECK-V-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
832 ; CHECK-V-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
833 ; CHECK-V-NEXT:    addi sp, sp, 48
834 ; CHECK-V-NEXT:    ret
835 entry:
836   %conv = fptosi <4 x half> %x to <4 x i64>
837   %0 = icmp slt <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
838   %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
839   %1 = icmp sgt <4 x i64> %spec.store.select, zeroinitializer
840   %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> zeroinitializer
841   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
842   ret <4 x i32> %conv6
845 ; i16 saturate
847 define <2 x i16> @stest_f64i16(<2 x double> %x) {
848 ; CHECK-NOV-LABEL: stest_f64i16:
849 ; CHECK-NOV:       # %bb.0: # %entry
850 ; CHECK-NOV-NEXT:    fcvt.w.d a1, fa1, rtz
851 ; CHECK-NOV-NEXT:    lui a2, 8
852 ; CHECK-NOV-NEXT:    addiw a2, a2, -1
853 ; CHECK-NOV-NEXT:    fcvt.w.d a0, fa0, rtz
854 ; CHECK-NOV-NEXT:    bge a1, a2, .LBB9_5
855 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
856 ; CHECK-NOV-NEXT:    bge a0, a2, .LBB9_6
857 ; CHECK-NOV-NEXT:  .LBB9_2: # %entry
858 ; CHECK-NOV-NEXT:    lui a2, 1048568
859 ; CHECK-NOV-NEXT:    bge a2, a0, .LBB9_7
860 ; CHECK-NOV-NEXT:  .LBB9_3: # %entry
861 ; CHECK-NOV-NEXT:    bge a2, a1, .LBB9_8
862 ; CHECK-NOV-NEXT:  .LBB9_4: # %entry
863 ; CHECK-NOV-NEXT:    ret
864 ; CHECK-NOV-NEXT:  .LBB9_5: # %entry
865 ; CHECK-NOV-NEXT:    mv a1, a2
866 ; CHECK-NOV-NEXT:    blt a0, a2, .LBB9_2
867 ; CHECK-NOV-NEXT:  .LBB9_6: # %entry
868 ; CHECK-NOV-NEXT:    mv a0, a2
869 ; CHECK-NOV-NEXT:    lui a2, 1048568
870 ; CHECK-NOV-NEXT:    blt a2, a0, .LBB9_3
871 ; CHECK-NOV-NEXT:  .LBB9_7: # %entry
872 ; CHECK-NOV-NEXT:    lui a0, 1048568
873 ; CHECK-NOV-NEXT:    blt a2, a1, .LBB9_4
874 ; CHECK-NOV-NEXT:  .LBB9_8: # %entry
875 ; CHECK-NOV-NEXT:    lui a1, 1048568
876 ; CHECK-NOV-NEXT:    ret
878 ; CHECK-V-LABEL: stest_f64i16:
879 ; CHECK-V:       # %bb.0: # %entry
880 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
881 ; CHECK-V-NEXT:    vfncvt.rtz.x.f.w v9, v8
882 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
883 ; CHECK-V-NEXT:    vnclip.wi v8, v9, 0
884 ; CHECK-V-NEXT:    ret
885 entry:
886   %conv = fptosi <2 x double> %x to <2 x i32>
887   %0 = icmp slt <2 x i32> %conv, <i32 32767, i32 32767>
888   %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 32767, i32 32767>
889   %1 = icmp sgt <2 x i32> %spec.store.select, <i32 -32768, i32 -32768>
890   %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> <i32 -32768, i32 -32768>
891   %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>
892   ret <2 x i16> %conv6
895 define <2 x i16> @utest_f64i16(<2 x double> %x) {
896 ; CHECK-NOV-LABEL: utest_f64i16:
897 ; CHECK-NOV:       # %bb.0: # %entry
898 ; CHECK-NOV-NEXT:    fcvt.wu.d a0, fa0, rtz
899 ; CHECK-NOV-NEXT:    lui a2, 16
900 ; CHECK-NOV-NEXT:    addiw a2, a2, -1
901 ; CHECK-NOV-NEXT:    fcvt.wu.d a1, fa1, rtz
902 ; CHECK-NOV-NEXT:    bgeu a0, a2, .LBB10_3
903 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
904 ; CHECK-NOV-NEXT:    bgeu a1, a2, .LBB10_4
905 ; CHECK-NOV-NEXT:  .LBB10_2: # %entry
906 ; CHECK-NOV-NEXT:    ret
907 ; CHECK-NOV-NEXT:  .LBB10_3: # %entry
908 ; CHECK-NOV-NEXT:    mv a0, a2
909 ; CHECK-NOV-NEXT:    bltu a1, a2, .LBB10_2
910 ; CHECK-NOV-NEXT:  .LBB10_4: # %entry
911 ; CHECK-NOV-NEXT:    mv a1, a2
912 ; CHECK-NOV-NEXT:    ret
914 ; CHECK-V-LABEL: utest_f64i16:
915 ; CHECK-V:       # %bb.0: # %entry
916 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
917 ; CHECK-V-NEXT:    vfncvt.rtz.xu.f.w v9, v8
918 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
919 ; CHECK-V-NEXT:    vnclipu.wi v8, v9, 0
920 ; CHECK-V-NEXT:    ret
921 entry:
922   %conv = fptoui <2 x double> %x to <2 x i32>
923   %0 = icmp ult <2 x i32> %conv, <i32 65535, i32 65535>
924   %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>
925   %conv6 = trunc <2 x i32> %spec.store.select to <2 x i16>
926   ret <2 x i16> %conv6
929 define <2 x i16> @ustest_f64i16(<2 x double> %x) {
930 ; CHECK-NOV-LABEL: ustest_f64i16:
931 ; CHECK-NOV:       # %bb.0: # %entry
932 ; CHECK-NOV-NEXT:    fcvt.w.d a1, fa1, rtz
933 ; CHECK-NOV-NEXT:    lui a2, 16
934 ; CHECK-NOV-NEXT:    addiw a2, a2, -1
935 ; CHECK-NOV-NEXT:    fcvt.w.d a0, fa0, rtz
936 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB11_2
937 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
938 ; CHECK-NOV-NEXT:    mv a1, a2
939 ; CHECK-NOV-NEXT:  .LBB11_2: # %entry
940 ; CHECK-NOV-NEXT:    blt a0, a2, .LBB11_4
941 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
942 ; CHECK-NOV-NEXT:    mv a0, a2
943 ; CHECK-NOV-NEXT:  .LBB11_4: # %entry
944 ; CHECK-NOV-NEXT:    sgtz a2, a1
945 ; CHECK-NOV-NEXT:    sgtz a3, a0
946 ; CHECK-NOV-NEXT:    neg a3, a3
947 ; CHECK-NOV-NEXT:    and a0, a3, a0
948 ; CHECK-NOV-NEXT:    neg a2, a2
949 ; CHECK-NOV-NEXT:    and a1, a2, a1
950 ; CHECK-NOV-NEXT:    ret
952 ; CHECK-V-LABEL: ustest_f64i16:
953 ; CHECK-V:       # %bb.0: # %entry
954 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
955 ; CHECK-V-NEXT:    vfncvt.rtz.x.f.w v9, v8
956 ; CHECK-V-NEXT:    lui a0, 16
957 ; CHECK-V-NEXT:    addi a0, a0, -1
958 ; CHECK-V-NEXT:    vmin.vx v8, v9, a0
959 ; CHECK-V-NEXT:    vmax.vx v8, v8, zero
960 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
961 ; CHECK-V-NEXT:    vnsrl.wi v8, v8, 0
962 ; CHECK-V-NEXT:    ret
963 entry:
964   %conv = fptosi <2 x double> %x to <2 x i32>
965   %0 = icmp slt <2 x i32> %conv, <i32 65535, i32 65535>
966   %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>
967   %1 = icmp sgt <2 x i32> %spec.store.select, zeroinitializer
968   %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> zeroinitializer
969   %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>
970   ret <2 x i16> %conv6
973 define <4 x i16> @stest_f32i16(<4 x float> %x) {
974 ; CHECK-NOV-LABEL: stest_f32i16:
975 ; CHECK-NOV:       # %bb.0: # %entry
976 ; CHECK-NOV-NEXT:    fcvt.w.s a1, fa3, rtz
977 ; CHECK-NOV-NEXT:    lui a5, 8
978 ; CHECK-NOV-NEXT:    addiw a5, a5, -1
979 ; CHECK-NOV-NEXT:    fcvt.w.s a2, fa2, rtz
980 ; CHECK-NOV-NEXT:    bge a1, a5, .LBB12_10
981 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
982 ; CHECK-NOV-NEXT:    fcvt.w.s a3, fa1, rtz
983 ; CHECK-NOV-NEXT:    bge a2, a5, .LBB12_11
984 ; CHECK-NOV-NEXT:  .LBB12_2: # %entry
985 ; CHECK-NOV-NEXT:    fcvt.w.s a4, fa0, rtz
986 ; CHECK-NOV-NEXT:    bge a3, a5, .LBB12_12
987 ; CHECK-NOV-NEXT:  .LBB12_3: # %entry
988 ; CHECK-NOV-NEXT:    bge a4, a5, .LBB12_13
989 ; CHECK-NOV-NEXT:  .LBB12_4: # %entry
990 ; CHECK-NOV-NEXT:    lui a5, 1048568
991 ; CHECK-NOV-NEXT:    bge a5, a4, .LBB12_14
992 ; CHECK-NOV-NEXT:  .LBB12_5: # %entry
993 ; CHECK-NOV-NEXT:    bge a5, a3, .LBB12_15
994 ; CHECK-NOV-NEXT:  .LBB12_6: # %entry
995 ; CHECK-NOV-NEXT:    bge a5, a2, .LBB12_16
996 ; CHECK-NOV-NEXT:  .LBB12_7: # %entry
997 ; CHECK-NOV-NEXT:    blt a5, a1, .LBB12_9
998 ; CHECK-NOV-NEXT:  .LBB12_8: # %entry
999 ; CHECK-NOV-NEXT:    lui a1, 1048568
1000 ; CHECK-NOV-NEXT:  .LBB12_9: # %entry
1001 ; CHECK-NOV-NEXT:    sh a1, 6(a0)
1002 ; CHECK-NOV-NEXT:    sh a2, 4(a0)
1003 ; CHECK-NOV-NEXT:    sh a3, 2(a0)
1004 ; CHECK-NOV-NEXT:    sh a4, 0(a0)
1005 ; CHECK-NOV-NEXT:    ret
1006 ; CHECK-NOV-NEXT:  .LBB12_10: # %entry
1007 ; CHECK-NOV-NEXT:    mv a1, a5
1008 ; CHECK-NOV-NEXT:    fcvt.w.s a3, fa1, rtz
1009 ; CHECK-NOV-NEXT:    blt a2, a5, .LBB12_2
1010 ; CHECK-NOV-NEXT:  .LBB12_11: # %entry
1011 ; CHECK-NOV-NEXT:    mv a2, a5
1012 ; CHECK-NOV-NEXT:    fcvt.w.s a4, fa0, rtz
1013 ; CHECK-NOV-NEXT:    blt a3, a5, .LBB12_3
1014 ; CHECK-NOV-NEXT:  .LBB12_12: # %entry
1015 ; CHECK-NOV-NEXT:    mv a3, a5
1016 ; CHECK-NOV-NEXT:    blt a4, a5, .LBB12_4
1017 ; CHECK-NOV-NEXT:  .LBB12_13: # %entry
1018 ; CHECK-NOV-NEXT:    mv a4, a5
1019 ; CHECK-NOV-NEXT:    lui a5, 1048568
1020 ; CHECK-NOV-NEXT:    blt a5, a4, .LBB12_5
1021 ; CHECK-NOV-NEXT:  .LBB12_14: # %entry
1022 ; CHECK-NOV-NEXT:    lui a4, 1048568
1023 ; CHECK-NOV-NEXT:    blt a5, a3, .LBB12_6
1024 ; CHECK-NOV-NEXT:  .LBB12_15: # %entry
1025 ; CHECK-NOV-NEXT:    lui a3, 1048568
1026 ; CHECK-NOV-NEXT:    blt a5, a2, .LBB12_7
1027 ; CHECK-NOV-NEXT:  .LBB12_16: # %entry
1028 ; CHECK-NOV-NEXT:    lui a2, 1048568
1029 ; CHECK-NOV-NEXT:    bge a5, a1, .LBB12_8
1030 ; CHECK-NOV-NEXT:    j .LBB12_9
1032 ; CHECK-V-LABEL: stest_f32i16:
1033 ; CHECK-V:       # %bb.0: # %entry
1034 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1035 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
1036 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1037 ; CHECK-V-NEXT:    vnclip.wi v8, v8, 0
1038 ; CHECK-V-NEXT:    ret
1039 entry:
1040   %conv = fptosi <4 x float> %x to <4 x i32>
1041   %0 = icmp slt <4 x i32> %conv, <i32 32767, i32 32767, i32 32767, i32 32767>
1042   %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>
1043   %1 = icmp sgt <4 x i32> %spec.store.select, <i32 -32768, i32 -32768, i32 -32768, i32 -32768>
1044   %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>
1045   %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>
1046   ret <4 x i16> %conv6
1049 define <4 x i16> @utest_f32i16(<4 x float> %x) {
1050 ; CHECK-NOV-LABEL: utest_f32i16:
1051 ; CHECK-NOV:       # %bb.0: # %entry
1052 ; CHECK-NOV-NEXT:    fcvt.wu.s a1, fa0, rtz
1053 ; CHECK-NOV-NEXT:    lui a3, 16
1054 ; CHECK-NOV-NEXT:    addiw a3, a3, -1
1055 ; CHECK-NOV-NEXT:    fcvt.wu.s a2, fa1, rtz
1056 ; CHECK-NOV-NEXT:    bgeu a1, a3, .LBB13_6
1057 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
1058 ; CHECK-NOV-NEXT:    fcvt.wu.s a4, fa2, rtz
1059 ; CHECK-NOV-NEXT:    bgeu a2, a3, .LBB13_7
1060 ; CHECK-NOV-NEXT:  .LBB13_2: # %entry
1061 ; CHECK-NOV-NEXT:    fcvt.wu.s a5, fa3, rtz
1062 ; CHECK-NOV-NEXT:    bgeu a4, a3, .LBB13_8
1063 ; CHECK-NOV-NEXT:  .LBB13_3: # %entry
1064 ; CHECK-NOV-NEXT:    bltu a5, a3, .LBB13_5
1065 ; CHECK-NOV-NEXT:  .LBB13_4: # %entry
1066 ; CHECK-NOV-NEXT:    mv a5, a3
1067 ; CHECK-NOV-NEXT:  .LBB13_5: # %entry
1068 ; CHECK-NOV-NEXT:    sh a5, 6(a0)
1069 ; CHECK-NOV-NEXT:    sh a4, 4(a0)
1070 ; CHECK-NOV-NEXT:    sh a2, 2(a0)
1071 ; CHECK-NOV-NEXT:    sh a1, 0(a0)
1072 ; CHECK-NOV-NEXT:    ret
1073 ; CHECK-NOV-NEXT:  .LBB13_6: # %entry
1074 ; CHECK-NOV-NEXT:    mv a1, a3
1075 ; CHECK-NOV-NEXT:    fcvt.wu.s a4, fa2, rtz
1076 ; CHECK-NOV-NEXT:    bltu a2, a3, .LBB13_2
1077 ; CHECK-NOV-NEXT:  .LBB13_7: # %entry
1078 ; CHECK-NOV-NEXT:    mv a2, a3
1079 ; CHECK-NOV-NEXT:    fcvt.wu.s a5, fa3, rtz
1080 ; CHECK-NOV-NEXT:    bltu a4, a3, .LBB13_3
1081 ; CHECK-NOV-NEXT:  .LBB13_8: # %entry
1082 ; CHECK-NOV-NEXT:    mv a4, a3
1083 ; CHECK-NOV-NEXT:    bgeu a5, a3, .LBB13_4
1084 ; CHECK-NOV-NEXT:    j .LBB13_5
1086 ; CHECK-V-LABEL: utest_f32i16:
1087 ; CHECK-V:       # %bb.0: # %entry
1088 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1089 ; CHECK-V-NEXT:    vfcvt.rtz.xu.f.v v8, v8
1090 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1091 ; CHECK-V-NEXT:    vnclipu.wi v8, v8, 0
1092 ; CHECK-V-NEXT:    ret
1093 entry:
1094   %conv = fptoui <4 x float> %x to <4 x i32>
1095   %0 = icmp ult <4 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535>
1096   %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>
1097   %conv6 = trunc <4 x i32> %spec.store.select to <4 x i16>
1098   ret <4 x i16> %conv6
1101 define <4 x i16> @ustest_f32i16(<4 x float> %x) {
1102 ; CHECK-NOV-LABEL: ustest_f32i16:
1103 ; CHECK-NOV:       # %bb.0: # %entry
1104 ; CHECK-NOV-NEXT:    fcvt.w.s a1, fa3, rtz
1105 ; CHECK-NOV-NEXT:    lui a4, 16
1106 ; CHECK-NOV-NEXT:    addiw a4, a4, -1
1107 ; CHECK-NOV-NEXT:    fcvt.w.s a2, fa2, rtz
1108 ; CHECK-NOV-NEXT:    bge a1, a4, .LBB14_6
1109 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
1110 ; CHECK-NOV-NEXT:    fcvt.w.s a3, fa1, rtz
1111 ; CHECK-NOV-NEXT:    bge a2, a4, .LBB14_7
1112 ; CHECK-NOV-NEXT:  .LBB14_2: # %entry
1113 ; CHECK-NOV-NEXT:    fcvt.w.s a5, fa0, rtz
1114 ; CHECK-NOV-NEXT:    bge a3, a4, .LBB14_8
1115 ; CHECK-NOV-NEXT:  .LBB14_3: # %entry
1116 ; CHECK-NOV-NEXT:    blt a5, a4, .LBB14_5
1117 ; CHECK-NOV-NEXT:  .LBB14_4: # %entry
1118 ; CHECK-NOV-NEXT:    mv a5, a4
1119 ; CHECK-NOV-NEXT:  .LBB14_5: # %entry
1120 ; CHECK-NOV-NEXT:    sgtz a4, a1
1121 ; CHECK-NOV-NEXT:    sgtz a6, a2
1122 ; CHECK-NOV-NEXT:    sgtz a7, a3
1123 ; CHECK-NOV-NEXT:    sgtz t0, a5
1124 ; CHECK-NOV-NEXT:    negw t0, t0
1125 ; CHECK-NOV-NEXT:    and a5, t0, a5
1126 ; CHECK-NOV-NEXT:    negw a7, a7
1127 ; CHECK-NOV-NEXT:    and a3, a7, a3
1128 ; CHECK-NOV-NEXT:    negw a6, a6
1129 ; CHECK-NOV-NEXT:    and a2, a6, a2
1130 ; CHECK-NOV-NEXT:    negw a4, a4
1131 ; CHECK-NOV-NEXT:    and a1, a4, a1
1132 ; CHECK-NOV-NEXT:    sh a1, 6(a0)
1133 ; CHECK-NOV-NEXT:    sh a2, 4(a0)
1134 ; CHECK-NOV-NEXT:    sh a3, 2(a0)
1135 ; CHECK-NOV-NEXT:    sh a5, 0(a0)
1136 ; CHECK-NOV-NEXT:    ret
1137 ; CHECK-NOV-NEXT:  .LBB14_6: # %entry
1138 ; CHECK-NOV-NEXT:    mv a1, a4
1139 ; CHECK-NOV-NEXT:    fcvt.w.s a3, fa1, rtz
1140 ; CHECK-NOV-NEXT:    blt a2, a4, .LBB14_2
1141 ; CHECK-NOV-NEXT:  .LBB14_7: # %entry
1142 ; CHECK-NOV-NEXT:    mv a2, a4
1143 ; CHECK-NOV-NEXT:    fcvt.w.s a5, fa0, rtz
1144 ; CHECK-NOV-NEXT:    blt a3, a4, .LBB14_3
1145 ; CHECK-NOV-NEXT:  .LBB14_8: # %entry
1146 ; CHECK-NOV-NEXT:    mv a3, a4
1147 ; CHECK-NOV-NEXT:    bge a5, a4, .LBB14_4
1148 ; CHECK-NOV-NEXT:    j .LBB14_5
1150 ; CHECK-V-LABEL: ustest_f32i16:
1151 ; CHECK-V:       # %bb.0: # %entry
1152 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1153 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
1154 ; CHECK-V-NEXT:    lui a0, 16
1155 ; CHECK-V-NEXT:    addi a0, a0, -1
1156 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
1157 ; CHECK-V-NEXT:    vmax.vx v8, v8, zero
1158 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1159 ; CHECK-V-NEXT:    vnsrl.wi v8, v8, 0
1160 ; CHECK-V-NEXT:    ret
1161 entry:
1162   %conv = fptosi <4 x float> %x to <4 x i32>
1163   %0 = icmp slt <4 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535>
1164   %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>
1165   %1 = icmp sgt <4 x i32> %spec.store.select, zeroinitializer
1166   %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> zeroinitializer
1167   %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>
1168   ret <4 x i16> %conv6
1171 define <8 x i16> @stest_f16i16(<8 x half> %x) {
1172 ; CHECK-NOV-LABEL: stest_f16i16:
1173 ; CHECK-NOV:       # %bb.0: # %entry
1174 ; CHECK-NOV-NEXT:    addi sp, sp, -128
1175 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 128
1176 ; CHECK-NOV-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
1177 ; CHECK-NOV-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
1178 ; CHECK-NOV-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
1179 ; CHECK-NOV-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
1180 ; CHECK-NOV-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
1181 ; CHECK-NOV-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
1182 ; CHECK-NOV-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
1183 ; CHECK-NOV-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
1184 ; CHECK-NOV-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
1185 ; CHECK-NOV-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
1186 ; CHECK-NOV-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
1187 ; CHECK-NOV-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
1188 ; CHECK-NOV-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
1189 ; CHECK-NOV-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
1190 ; CHECK-NOV-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
1191 ; CHECK-NOV-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
1192 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
1193 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
1194 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
1195 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
1196 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
1197 ; CHECK-NOV-NEXT:    .cfi_offset s4, -48
1198 ; CHECK-NOV-NEXT:    .cfi_offset s5, -56
1199 ; CHECK-NOV-NEXT:    .cfi_offset s6, -64
1200 ; CHECK-NOV-NEXT:    .cfi_offset s7, -72
1201 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -80
1202 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -88
1203 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -96
1204 ; CHECK-NOV-NEXT:    .cfi_offset fs3, -104
1205 ; CHECK-NOV-NEXT:    .cfi_offset fs4, -112
1206 ; CHECK-NOV-NEXT:    .cfi_offset fs5, -120
1207 ; CHECK-NOV-NEXT:    .cfi_offset fs6, -128
1208 ; CHECK-NOV-NEXT:    lhu s1, 56(a1)
1209 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
1210 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
1211 ; CHECK-NOV-NEXT:    lhu s4, 16(a1)
1212 ; CHECK-NOV-NEXT:    lhu s5, 24(a1)
1213 ; CHECK-NOV-NEXT:    lhu s6, 32(a1)
1214 ; CHECK-NOV-NEXT:    lhu s7, 40(a1)
1215 ; CHECK-NOV-NEXT:    lhu a1, 48(a1)
1216 ; CHECK-NOV-NEXT:    mv s0, a0
1217 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
1218 ; CHECK-NOV-NEXT:    call __extendhfsf2
1219 ; CHECK-NOV-NEXT:    fmv.s fs6, fa0
1220 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s7
1221 ; CHECK-NOV-NEXT:    call __extendhfsf2
1222 ; CHECK-NOV-NEXT:    fmv.s fs5, fa0
1223 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s6
1224 ; CHECK-NOV-NEXT:    call __extendhfsf2
1225 ; CHECK-NOV-NEXT:    fmv.s fs4, fa0
1226 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s5
1227 ; CHECK-NOV-NEXT:    call __extendhfsf2
1228 ; CHECK-NOV-NEXT:    fmv.s fs3, fa0
1229 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s4
1230 ; CHECK-NOV-NEXT:    call __extendhfsf2
1231 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
1232 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
1233 ; CHECK-NOV-NEXT:    call __extendhfsf2
1234 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
1235 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
1236 ; CHECK-NOV-NEXT:    call __extendhfsf2
1237 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
1238 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
1239 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs6, rtz
1240 ; CHECK-NOV-NEXT:    call __extendhfsf2
1241 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
1242 ; CHECK-NOV-NEXT:    lui a7, 8
1243 ; CHECK-NOV-NEXT:    addiw a7, a7, -1
1244 ; CHECK-NOV-NEXT:    bge a0, a7, .LBB15_18
1245 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
1246 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
1247 ; CHECK-NOV-NEXT:    bge s1, a7, .LBB15_19
1248 ; CHECK-NOV-NEXT:  .LBB15_2: # %entry
1249 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
1250 ; CHECK-NOV-NEXT:    bge a1, a7, .LBB15_20
1251 ; CHECK-NOV-NEXT:  .LBB15_3: # %entry
1252 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs3, rtz
1253 ; CHECK-NOV-NEXT:    bge a2, a7, .LBB15_21
1254 ; CHECK-NOV-NEXT:  .LBB15_4: # %entry
1255 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs2, rtz
1256 ; CHECK-NOV-NEXT:    bge a3, a7, .LBB15_22
1257 ; CHECK-NOV-NEXT:  .LBB15_5: # %entry
1258 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs1, rtz
1259 ; CHECK-NOV-NEXT:    bge a4, a7, .LBB15_23
1260 ; CHECK-NOV-NEXT:  .LBB15_6: # %entry
1261 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs0, rtz
1262 ; CHECK-NOV-NEXT:    bge a5, a7, .LBB15_24
1263 ; CHECK-NOV-NEXT:  .LBB15_7: # %entry
1264 ; CHECK-NOV-NEXT:    bge a6, a7, .LBB15_25
1265 ; CHECK-NOV-NEXT:  .LBB15_8: # %entry
1266 ; CHECK-NOV-NEXT:    lui a7, 1048568
1267 ; CHECK-NOV-NEXT:    bge a7, a6, .LBB15_26
1268 ; CHECK-NOV-NEXT:  .LBB15_9: # %entry
1269 ; CHECK-NOV-NEXT:    bge a7, a5, .LBB15_27
1270 ; CHECK-NOV-NEXT:  .LBB15_10: # %entry
1271 ; CHECK-NOV-NEXT:    bge a7, a4, .LBB15_28
1272 ; CHECK-NOV-NEXT:  .LBB15_11: # %entry
1273 ; CHECK-NOV-NEXT:    bge a7, a3, .LBB15_29
1274 ; CHECK-NOV-NEXT:  .LBB15_12: # %entry
1275 ; CHECK-NOV-NEXT:    bge a7, a2, .LBB15_30
1276 ; CHECK-NOV-NEXT:  .LBB15_13: # %entry
1277 ; CHECK-NOV-NEXT:    bge a7, a1, .LBB15_31
1278 ; CHECK-NOV-NEXT:  .LBB15_14: # %entry
1279 ; CHECK-NOV-NEXT:    bge a7, s1, .LBB15_32
1280 ; CHECK-NOV-NEXT:  .LBB15_15: # %entry
1281 ; CHECK-NOV-NEXT:    blt a7, a0, .LBB15_17
1282 ; CHECK-NOV-NEXT:  .LBB15_16: # %entry
1283 ; CHECK-NOV-NEXT:    lui a0, 1048568
1284 ; CHECK-NOV-NEXT:  .LBB15_17: # %entry
1285 ; CHECK-NOV-NEXT:    sh a0, 14(s0)
1286 ; CHECK-NOV-NEXT:    sh s1, 12(s0)
1287 ; CHECK-NOV-NEXT:    sh a1, 10(s0)
1288 ; CHECK-NOV-NEXT:    sh a2, 8(s0)
1289 ; CHECK-NOV-NEXT:    sh a3, 6(s0)
1290 ; CHECK-NOV-NEXT:    sh a4, 4(s0)
1291 ; CHECK-NOV-NEXT:    sh a5, 2(s0)
1292 ; CHECK-NOV-NEXT:    sh a6, 0(s0)
1293 ; CHECK-NOV-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
1294 ; CHECK-NOV-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
1295 ; CHECK-NOV-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
1296 ; CHECK-NOV-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
1297 ; CHECK-NOV-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
1298 ; CHECK-NOV-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
1299 ; CHECK-NOV-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
1300 ; CHECK-NOV-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
1301 ; CHECK-NOV-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
1302 ; CHECK-NOV-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
1303 ; CHECK-NOV-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
1304 ; CHECK-NOV-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
1305 ; CHECK-NOV-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
1306 ; CHECK-NOV-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
1307 ; CHECK-NOV-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
1308 ; CHECK-NOV-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
1309 ; CHECK-NOV-NEXT:    addi sp, sp, 128
1310 ; CHECK-NOV-NEXT:    ret
1311 ; CHECK-NOV-NEXT:  .LBB15_18: # %entry
1312 ; CHECK-NOV-NEXT:    mv a0, a7
1313 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
1314 ; CHECK-NOV-NEXT:    blt s1, a7, .LBB15_2
1315 ; CHECK-NOV-NEXT:  .LBB15_19: # %entry
1316 ; CHECK-NOV-NEXT:    mv s1, a7
1317 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
1318 ; CHECK-NOV-NEXT:    blt a1, a7, .LBB15_3
1319 ; CHECK-NOV-NEXT:  .LBB15_20: # %entry
1320 ; CHECK-NOV-NEXT:    mv a1, a7
1321 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs3, rtz
1322 ; CHECK-NOV-NEXT:    blt a2, a7, .LBB15_4
1323 ; CHECK-NOV-NEXT:  .LBB15_21: # %entry
1324 ; CHECK-NOV-NEXT:    mv a2, a7
1325 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs2, rtz
1326 ; CHECK-NOV-NEXT:    blt a3, a7, .LBB15_5
1327 ; CHECK-NOV-NEXT:  .LBB15_22: # %entry
1328 ; CHECK-NOV-NEXT:    mv a3, a7
1329 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs1, rtz
1330 ; CHECK-NOV-NEXT:    blt a4, a7, .LBB15_6
1331 ; CHECK-NOV-NEXT:  .LBB15_23: # %entry
1332 ; CHECK-NOV-NEXT:    mv a4, a7
1333 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs0, rtz
1334 ; CHECK-NOV-NEXT:    blt a5, a7, .LBB15_7
1335 ; CHECK-NOV-NEXT:  .LBB15_24: # %entry
1336 ; CHECK-NOV-NEXT:    mv a5, a7
1337 ; CHECK-NOV-NEXT:    blt a6, a7, .LBB15_8
1338 ; CHECK-NOV-NEXT:  .LBB15_25: # %entry
1339 ; CHECK-NOV-NEXT:    mv a6, a7
1340 ; CHECK-NOV-NEXT:    lui a7, 1048568
1341 ; CHECK-NOV-NEXT:    blt a7, a6, .LBB15_9
1342 ; CHECK-NOV-NEXT:  .LBB15_26: # %entry
1343 ; CHECK-NOV-NEXT:    lui a6, 1048568
1344 ; CHECK-NOV-NEXT:    blt a7, a5, .LBB15_10
1345 ; CHECK-NOV-NEXT:  .LBB15_27: # %entry
1346 ; CHECK-NOV-NEXT:    lui a5, 1048568
1347 ; CHECK-NOV-NEXT:    blt a7, a4, .LBB15_11
1348 ; CHECK-NOV-NEXT:  .LBB15_28: # %entry
1349 ; CHECK-NOV-NEXT:    lui a4, 1048568
1350 ; CHECK-NOV-NEXT:    blt a7, a3, .LBB15_12
1351 ; CHECK-NOV-NEXT:  .LBB15_29: # %entry
1352 ; CHECK-NOV-NEXT:    lui a3, 1048568
1353 ; CHECK-NOV-NEXT:    blt a7, a2, .LBB15_13
1354 ; CHECK-NOV-NEXT:  .LBB15_30: # %entry
1355 ; CHECK-NOV-NEXT:    lui a2, 1048568
1356 ; CHECK-NOV-NEXT:    blt a7, a1, .LBB15_14
1357 ; CHECK-NOV-NEXT:  .LBB15_31: # %entry
1358 ; CHECK-NOV-NEXT:    lui a1, 1048568
1359 ; CHECK-NOV-NEXT:    blt a7, s1, .LBB15_15
1360 ; CHECK-NOV-NEXT:  .LBB15_32: # %entry
1361 ; CHECK-NOV-NEXT:    lui s1, 1048568
1362 ; CHECK-NOV-NEXT:    bge a7, a0, .LBB15_16
1363 ; CHECK-NOV-NEXT:    j .LBB15_17
1365 ; CHECK-V-LABEL: stest_f16i16:
1366 ; CHECK-V:       # %bb.0: # %entry
1367 ; CHECK-V-NEXT:    addi sp, sp, -80
1368 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 80
1369 ; CHECK-V-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
1370 ; CHECK-V-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
1371 ; CHECK-V-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
1372 ; CHECK-V-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
1373 ; CHECK-V-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
1374 ; CHECK-V-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
1375 ; CHECK-V-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill
1376 ; CHECK-V-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill
1377 ; CHECK-V-NEXT:    .cfi_offset ra, -8
1378 ; CHECK-V-NEXT:    .cfi_offset s0, -16
1379 ; CHECK-V-NEXT:    .cfi_offset s1, -24
1380 ; CHECK-V-NEXT:    .cfi_offset s2, -32
1381 ; CHECK-V-NEXT:    .cfi_offset s3, -40
1382 ; CHECK-V-NEXT:    .cfi_offset s4, -48
1383 ; CHECK-V-NEXT:    .cfi_offset s5, -56
1384 ; CHECK-V-NEXT:    .cfi_offset s6, -64
1385 ; CHECK-V-NEXT:    csrr a1, vlenb
1386 ; CHECK-V-NEXT:    slli a1, a1, 2
1387 ; CHECK-V-NEXT:    sub sp, sp, a1
1388 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xd0, 0x00, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 80 + 4 * vlenb
1389 ; CHECK-V-NEXT:    lhu s0, 0(a0)
1390 ; CHECK-V-NEXT:    lhu s1, 8(a0)
1391 ; CHECK-V-NEXT:    lhu s2, 16(a0)
1392 ; CHECK-V-NEXT:    lhu s3, 24(a0)
1393 ; CHECK-V-NEXT:    lhu s4, 32(a0)
1394 ; CHECK-V-NEXT:    lhu s5, 40(a0)
1395 ; CHECK-V-NEXT:    lhu s6, 48(a0)
1396 ; CHECK-V-NEXT:    lhu a0, 56(a0)
1397 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
1398 ; CHECK-V-NEXT:    call __extendhfsf2
1399 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1400 ; CHECK-V-NEXT:    fmv.w.x fa0, s6
1401 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1402 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1403 ; CHECK-V-NEXT:    csrr a0, vlenb
1404 ; CHECK-V-NEXT:    slli a0, a0, 1
1405 ; CHECK-V-NEXT:    add a0, sp, a0
1406 ; CHECK-V-NEXT:    addi a0, a0, 16
1407 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1408 ; CHECK-V-NEXT:    call __extendhfsf2
1409 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1410 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1411 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1412 ; CHECK-V-NEXT:    csrr a0, vlenb
1413 ; CHECK-V-NEXT:    slli a0, a0, 1
1414 ; CHECK-V-NEXT:    add a0, sp, a0
1415 ; CHECK-V-NEXT:    addi a0, a0, 16
1416 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1417 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
1418 ; CHECK-V-NEXT:    csrr a0, vlenb
1419 ; CHECK-V-NEXT:    add a0, sp, a0
1420 ; CHECK-V-NEXT:    addi a0, a0, 16
1421 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1422 ; CHECK-V-NEXT:    fmv.w.x fa0, s5
1423 ; CHECK-V-NEXT:    call __extendhfsf2
1424 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1425 ; CHECK-V-NEXT:    fmv.w.x fa0, s4
1426 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1427 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1428 ; CHECK-V-NEXT:    csrr a0, vlenb
1429 ; CHECK-V-NEXT:    slli a0, a0, 1
1430 ; CHECK-V-NEXT:    add a0, sp, a0
1431 ; CHECK-V-NEXT:    addi a0, a0, 16
1432 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1433 ; CHECK-V-NEXT:    call __extendhfsf2
1434 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1435 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1436 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1437 ; CHECK-V-NEXT:    csrr a0, vlenb
1438 ; CHECK-V-NEXT:    slli a0, a0, 1
1439 ; CHECK-V-NEXT:    add a0, sp, a0
1440 ; CHECK-V-NEXT:    addi a0, a0, 16
1441 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1442 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
1443 ; CHECK-V-NEXT:    csrr a0, vlenb
1444 ; CHECK-V-NEXT:    add a0, sp, a0
1445 ; CHECK-V-NEXT:    addi a0, a0, 16
1446 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1447 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1448 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
1449 ; CHECK-V-NEXT:    csrr a0, vlenb
1450 ; CHECK-V-NEXT:    slli a0, a0, 1
1451 ; CHECK-V-NEXT:    add a0, sp, a0
1452 ; CHECK-V-NEXT:    addi a0, a0, 16
1453 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
1454 ; CHECK-V-NEXT:    fmv.w.x fa0, s3
1455 ; CHECK-V-NEXT:    call __extendhfsf2
1456 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1457 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
1458 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1459 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1460 ; CHECK-V-NEXT:    addi a0, sp, 16
1461 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1462 ; CHECK-V-NEXT:    call __extendhfsf2
1463 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1464 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1465 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1466 ; CHECK-V-NEXT:    addi a0, sp, 16
1467 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1468 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
1469 ; CHECK-V-NEXT:    csrr a0, vlenb
1470 ; CHECK-V-NEXT:    add a0, sp, a0
1471 ; CHECK-V-NEXT:    addi a0, a0, 16
1472 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1473 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
1474 ; CHECK-V-NEXT:    call __extendhfsf2
1475 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1476 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
1477 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1478 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1479 ; CHECK-V-NEXT:    addi a0, sp, 16
1480 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1481 ; CHECK-V-NEXT:    call __extendhfsf2
1482 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
1483 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1484 ; CHECK-V-NEXT:    vmv.s.x v10, a0
1485 ; CHECK-V-NEXT:    addi a0, sp, 16
1486 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
1487 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
1488 ; CHECK-V-NEXT:    csrr a0, vlenb
1489 ; CHECK-V-NEXT:    add a0, sp, a0
1490 ; CHECK-V-NEXT:    addi a0, a0, 16
1491 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
1492 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1493 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
1494 ; CHECK-V-NEXT:    csrr a0, vlenb
1495 ; CHECK-V-NEXT:    slli a0, a0, 1
1496 ; CHECK-V-NEXT:    add a0, sp, a0
1497 ; CHECK-V-NEXT:    addi a0, a0, 16
1498 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
1499 ; CHECK-V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1500 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 4
1501 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1502 ; CHECK-V-NEXT:    vnclip.wi v8, v10, 0
1503 ; CHECK-V-NEXT:    csrr a0, vlenb
1504 ; CHECK-V-NEXT:    slli a0, a0, 2
1505 ; CHECK-V-NEXT:    add sp, sp, a0
1506 ; CHECK-V-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
1507 ; CHECK-V-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
1508 ; CHECK-V-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
1509 ; CHECK-V-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
1510 ; CHECK-V-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
1511 ; CHECK-V-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
1512 ; CHECK-V-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload
1513 ; CHECK-V-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload
1514 ; CHECK-V-NEXT:    addi sp, sp, 80
1515 ; CHECK-V-NEXT:    ret
1516 entry:
1517   %conv = fptosi <8 x half> %x to <8 x i32>
1518   %0 = icmp slt <8 x i32> %conv, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>
1519   %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>
1520   %1 = icmp sgt <8 x i32> %spec.store.select, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>
1521   %spec.store.select7 = select <8 x i1> %1, <8 x i32> %spec.store.select, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>
1522   %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>
1523   ret <8 x i16> %conv6
1526 define <8 x i16> @utesth_f16i16(<8 x half> %x) {
1527 ; CHECK-NOV-LABEL: utesth_f16i16:
1528 ; CHECK-NOV:       # %bb.0: # %entry
1529 ; CHECK-NOV-NEXT:    addi sp, sp, -128
1530 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 128
1531 ; CHECK-NOV-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
1532 ; CHECK-NOV-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
1533 ; CHECK-NOV-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
1534 ; CHECK-NOV-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
1535 ; CHECK-NOV-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
1536 ; CHECK-NOV-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
1537 ; CHECK-NOV-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
1538 ; CHECK-NOV-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
1539 ; CHECK-NOV-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
1540 ; CHECK-NOV-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
1541 ; CHECK-NOV-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
1542 ; CHECK-NOV-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
1543 ; CHECK-NOV-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
1544 ; CHECK-NOV-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
1545 ; CHECK-NOV-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
1546 ; CHECK-NOV-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
1547 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
1548 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
1549 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
1550 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
1551 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
1552 ; CHECK-NOV-NEXT:    .cfi_offset s4, -48
1553 ; CHECK-NOV-NEXT:    .cfi_offset s5, -56
1554 ; CHECK-NOV-NEXT:    .cfi_offset s6, -64
1555 ; CHECK-NOV-NEXT:    .cfi_offset s7, -72
1556 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -80
1557 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -88
1558 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -96
1559 ; CHECK-NOV-NEXT:    .cfi_offset fs3, -104
1560 ; CHECK-NOV-NEXT:    .cfi_offset fs4, -112
1561 ; CHECK-NOV-NEXT:    .cfi_offset fs5, -120
1562 ; CHECK-NOV-NEXT:    .cfi_offset fs6, -128
1563 ; CHECK-NOV-NEXT:    lhu s1, 0(a1)
1564 ; CHECK-NOV-NEXT:    lhu s2, 56(a1)
1565 ; CHECK-NOV-NEXT:    lhu s3, 48(a1)
1566 ; CHECK-NOV-NEXT:    lhu s4, 40(a1)
1567 ; CHECK-NOV-NEXT:    lhu s5, 32(a1)
1568 ; CHECK-NOV-NEXT:    lhu s6, 24(a1)
1569 ; CHECK-NOV-NEXT:    lhu s7, 16(a1)
1570 ; CHECK-NOV-NEXT:    lhu a1, 8(a1)
1571 ; CHECK-NOV-NEXT:    mv s0, a0
1572 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
1573 ; CHECK-NOV-NEXT:    call __extendhfsf2
1574 ; CHECK-NOV-NEXT:    fmv.s fs6, fa0
1575 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s7
1576 ; CHECK-NOV-NEXT:    call __extendhfsf2
1577 ; CHECK-NOV-NEXT:    fmv.s fs5, fa0
1578 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s6
1579 ; CHECK-NOV-NEXT:    call __extendhfsf2
1580 ; CHECK-NOV-NEXT:    fmv.s fs4, fa0
1581 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s5
1582 ; CHECK-NOV-NEXT:    call __extendhfsf2
1583 ; CHECK-NOV-NEXT:    fmv.s fs3, fa0
1584 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s4
1585 ; CHECK-NOV-NEXT:    call __extendhfsf2
1586 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
1587 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
1588 ; CHECK-NOV-NEXT:    call __extendhfsf2
1589 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
1590 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
1591 ; CHECK-NOV-NEXT:    call __extendhfsf2
1592 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
1593 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
1594 ; CHECK-NOV-NEXT:    fcvt.lu.s s1, fs6, rtz
1595 ; CHECK-NOV-NEXT:    call __extendhfsf2
1596 ; CHECK-NOV-NEXT:    fcvt.lu.s a0, fa0, rtz
1597 ; CHECK-NOV-NEXT:    lui a1, 16
1598 ; CHECK-NOV-NEXT:    addiw a1, a1, -1
1599 ; CHECK-NOV-NEXT:    bgeu a0, a1, .LBB16_10
1600 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
1601 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs5, rtz
1602 ; CHECK-NOV-NEXT:    bgeu s1, a1, .LBB16_11
1603 ; CHECK-NOV-NEXT:  .LBB16_2: # %entry
1604 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs4, rtz
1605 ; CHECK-NOV-NEXT:    bgeu a2, a1, .LBB16_12
1606 ; CHECK-NOV-NEXT:  .LBB16_3: # %entry
1607 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fs3, rtz
1608 ; CHECK-NOV-NEXT:    bgeu a3, a1, .LBB16_13
1609 ; CHECK-NOV-NEXT:  .LBB16_4: # %entry
1610 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fs2, rtz
1611 ; CHECK-NOV-NEXT:    bgeu a4, a1, .LBB16_14
1612 ; CHECK-NOV-NEXT:  .LBB16_5: # %entry
1613 ; CHECK-NOV-NEXT:    fcvt.lu.s a6, fs1, rtz
1614 ; CHECK-NOV-NEXT:    bgeu a5, a1, .LBB16_15
1615 ; CHECK-NOV-NEXT:  .LBB16_6: # %entry
1616 ; CHECK-NOV-NEXT:    fcvt.lu.s a7, fs0, rtz
1617 ; CHECK-NOV-NEXT:    bgeu a6, a1, .LBB16_16
1618 ; CHECK-NOV-NEXT:  .LBB16_7: # %entry
1619 ; CHECK-NOV-NEXT:    bltu a7, a1, .LBB16_9
1620 ; CHECK-NOV-NEXT:  .LBB16_8: # %entry
1621 ; CHECK-NOV-NEXT:    mv a7, a1
1622 ; CHECK-NOV-NEXT:  .LBB16_9: # %entry
1623 ; CHECK-NOV-NEXT:    sh a7, 14(s0)
1624 ; CHECK-NOV-NEXT:    sh a6, 12(s0)
1625 ; CHECK-NOV-NEXT:    sh a5, 10(s0)
1626 ; CHECK-NOV-NEXT:    sh a4, 8(s0)
1627 ; CHECK-NOV-NEXT:    sh a3, 6(s0)
1628 ; CHECK-NOV-NEXT:    sh a2, 4(s0)
1629 ; CHECK-NOV-NEXT:    sh s1, 2(s0)
1630 ; CHECK-NOV-NEXT:    sh a0, 0(s0)
1631 ; CHECK-NOV-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
1632 ; CHECK-NOV-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
1633 ; CHECK-NOV-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
1634 ; CHECK-NOV-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
1635 ; CHECK-NOV-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
1636 ; CHECK-NOV-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
1637 ; CHECK-NOV-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
1638 ; CHECK-NOV-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
1639 ; CHECK-NOV-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
1640 ; CHECK-NOV-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
1641 ; CHECK-NOV-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
1642 ; CHECK-NOV-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
1643 ; CHECK-NOV-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
1644 ; CHECK-NOV-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
1645 ; CHECK-NOV-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
1646 ; CHECK-NOV-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
1647 ; CHECK-NOV-NEXT:    addi sp, sp, 128
1648 ; CHECK-NOV-NEXT:    ret
1649 ; CHECK-NOV-NEXT:  .LBB16_10: # %entry
1650 ; CHECK-NOV-NEXT:    mv a0, a1
1651 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs5, rtz
1652 ; CHECK-NOV-NEXT:    bltu s1, a1, .LBB16_2
1653 ; CHECK-NOV-NEXT:  .LBB16_11: # %entry
1654 ; CHECK-NOV-NEXT:    mv s1, a1
1655 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs4, rtz
1656 ; CHECK-NOV-NEXT:    bltu a2, a1, .LBB16_3
1657 ; CHECK-NOV-NEXT:  .LBB16_12: # %entry
1658 ; CHECK-NOV-NEXT:    mv a2, a1
1659 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fs3, rtz
1660 ; CHECK-NOV-NEXT:    bltu a3, a1, .LBB16_4
1661 ; CHECK-NOV-NEXT:  .LBB16_13: # %entry
1662 ; CHECK-NOV-NEXT:    mv a3, a1
1663 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fs2, rtz
1664 ; CHECK-NOV-NEXT:    bltu a4, a1, .LBB16_5
1665 ; CHECK-NOV-NEXT:  .LBB16_14: # %entry
1666 ; CHECK-NOV-NEXT:    mv a4, a1
1667 ; CHECK-NOV-NEXT:    fcvt.lu.s a6, fs1, rtz
1668 ; CHECK-NOV-NEXT:    bltu a5, a1, .LBB16_6
1669 ; CHECK-NOV-NEXT:  .LBB16_15: # %entry
1670 ; CHECK-NOV-NEXT:    mv a5, a1
1671 ; CHECK-NOV-NEXT:    fcvt.lu.s a7, fs0, rtz
1672 ; CHECK-NOV-NEXT:    bltu a6, a1, .LBB16_7
1673 ; CHECK-NOV-NEXT:  .LBB16_16: # %entry
1674 ; CHECK-NOV-NEXT:    mv a6, a1
1675 ; CHECK-NOV-NEXT:    bgeu a7, a1, .LBB16_8
1676 ; CHECK-NOV-NEXT:    j .LBB16_9
1678 ; CHECK-V-LABEL: utesth_f16i16:
1679 ; CHECK-V:       # %bb.0: # %entry
1680 ; CHECK-V-NEXT:    addi sp, sp, -80
1681 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 80
1682 ; CHECK-V-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
1683 ; CHECK-V-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
1684 ; CHECK-V-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
1685 ; CHECK-V-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
1686 ; CHECK-V-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
1687 ; CHECK-V-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
1688 ; CHECK-V-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill
1689 ; CHECK-V-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill
1690 ; CHECK-V-NEXT:    .cfi_offset ra, -8
1691 ; CHECK-V-NEXT:    .cfi_offset s0, -16
1692 ; CHECK-V-NEXT:    .cfi_offset s1, -24
1693 ; CHECK-V-NEXT:    .cfi_offset s2, -32
1694 ; CHECK-V-NEXT:    .cfi_offset s3, -40
1695 ; CHECK-V-NEXT:    .cfi_offset s4, -48
1696 ; CHECK-V-NEXT:    .cfi_offset s5, -56
1697 ; CHECK-V-NEXT:    .cfi_offset s6, -64
1698 ; CHECK-V-NEXT:    csrr a1, vlenb
1699 ; CHECK-V-NEXT:    slli a1, a1, 2
1700 ; CHECK-V-NEXT:    sub sp, sp, a1
1701 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xd0, 0x00, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 80 + 4 * vlenb
1702 ; CHECK-V-NEXT:    lhu s0, 0(a0)
1703 ; CHECK-V-NEXT:    lhu s1, 8(a0)
1704 ; CHECK-V-NEXT:    lhu s2, 16(a0)
1705 ; CHECK-V-NEXT:    lhu s3, 24(a0)
1706 ; CHECK-V-NEXT:    lhu s4, 32(a0)
1707 ; CHECK-V-NEXT:    lhu s5, 40(a0)
1708 ; CHECK-V-NEXT:    lhu s6, 48(a0)
1709 ; CHECK-V-NEXT:    lhu a0, 56(a0)
1710 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
1711 ; CHECK-V-NEXT:    call __extendhfsf2
1712 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1713 ; CHECK-V-NEXT:    fmv.w.x fa0, s6
1714 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1715 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1716 ; CHECK-V-NEXT:    csrr a0, vlenb
1717 ; CHECK-V-NEXT:    slli a0, a0, 1
1718 ; CHECK-V-NEXT:    add a0, sp, a0
1719 ; CHECK-V-NEXT:    addi a0, a0, 16
1720 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1721 ; CHECK-V-NEXT:    call __extendhfsf2
1722 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1723 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1724 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1725 ; CHECK-V-NEXT:    csrr a0, vlenb
1726 ; CHECK-V-NEXT:    slli a0, a0, 1
1727 ; CHECK-V-NEXT:    add a0, sp, a0
1728 ; CHECK-V-NEXT:    addi a0, a0, 16
1729 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1730 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
1731 ; CHECK-V-NEXT:    csrr a0, vlenb
1732 ; CHECK-V-NEXT:    add a0, sp, a0
1733 ; CHECK-V-NEXT:    addi a0, a0, 16
1734 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1735 ; CHECK-V-NEXT:    fmv.w.x fa0, s5
1736 ; CHECK-V-NEXT:    call __extendhfsf2
1737 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1738 ; CHECK-V-NEXT:    fmv.w.x fa0, s4
1739 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1740 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1741 ; CHECK-V-NEXT:    csrr a0, vlenb
1742 ; CHECK-V-NEXT:    slli a0, a0, 1
1743 ; CHECK-V-NEXT:    add a0, sp, a0
1744 ; CHECK-V-NEXT:    addi a0, a0, 16
1745 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1746 ; CHECK-V-NEXT:    call __extendhfsf2
1747 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1748 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1749 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1750 ; CHECK-V-NEXT:    csrr a0, vlenb
1751 ; CHECK-V-NEXT:    slli a0, a0, 1
1752 ; CHECK-V-NEXT:    add a0, sp, a0
1753 ; CHECK-V-NEXT:    addi a0, a0, 16
1754 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1755 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
1756 ; CHECK-V-NEXT:    csrr a0, vlenb
1757 ; CHECK-V-NEXT:    add a0, sp, a0
1758 ; CHECK-V-NEXT:    addi a0, a0, 16
1759 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1760 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1761 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
1762 ; CHECK-V-NEXT:    csrr a0, vlenb
1763 ; CHECK-V-NEXT:    slli a0, a0, 1
1764 ; CHECK-V-NEXT:    add a0, sp, a0
1765 ; CHECK-V-NEXT:    addi a0, a0, 16
1766 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
1767 ; CHECK-V-NEXT:    fmv.w.x fa0, s3
1768 ; CHECK-V-NEXT:    call __extendhfsf2
1769 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1770 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
1771 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1772 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1773 ; CHECK-V-NEXT:    addi a0, sp, 16
1774 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1775 ; CHECK-V-NEXT:    call __extendhfsf2
1776 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1777 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1778 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1779 ; CHECK-V-NEXT:    addi a0, sp, 16
1780 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
1781 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
1782 ; CHECK-V-NEXT:    csrr a0, vlenb
1783 ; CHECK-V-NEXT:    add a0, sp, a0
1784 ; CHECK-V-NEXT:    addi a0, a0, 16
1785 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1786 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
1787 ; CHECK-V-NEXT:    call __extendhfsf2
1788 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1789 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
1790 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
1791 ; CHECK-V-NEXT:    vmv.s.x v8, a0
1792 ; CHECK-V-NEXT:    addi a0, sp, 16
1793 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
1794 ; CHECK-V-NEXT:    call __extendhfsf2
1795 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
1796 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1797 ; CHECK-V-NEXT:    vmv.s.x v10, a0
1798 ; CHECK-V-NEXT:    addi a0, sp, 16
1799 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
1800 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
1801 ; CHECK-V-NEXT:    csrr a0, vlenb
1802 ; CHECK-V-NEXT:    add a0, sp, a0
1803 ; CHECK-V-NEXT:    addi a0, a0, 16
1804 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
1805 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1806 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
1807 ; CHECK-V-NEXT:    csrr a0, vlenb
1808 ; CHECK-V-NEXT:    slli a0, a0, 1
1809 ; CHECK-V-NEXT:    add a0, sp, a0
1810 ; CHECK-V-NEXT:    addi a0, a0, 16
1811 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
1812 ; CHECK-V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1813 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 4
1814 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1815 ; CHECK-V-NEXT:    vnclipu.wi v8, v10, 0
1816 ; CHECK-V-NEXT:    csrr a0, vlenb
1817 ; CHECK-V-NEXT:    slli a0, a0, 2
1818 ; CHECK-V-NEXT:    add sp, sp, a0
1819 ; CHECK-V-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
1820 ; CHECK-V-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
1821 ; CHECK-V-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
1822 ; CHECK-V-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
1823 ; CHECK-V-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
1824 ; CHECK-V-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
1825 ; CHECK-V-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload
1826 ; CHECK-V-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload
1827 ; CHECK-V-NEXT:    addi sp, sp, 80
1828 ; CHECK-V-NEXT:    ret
1829 entry:
1830   %conv = fptoui <8 x half> %x to <8 x i32>
1831   %0 = icmp ult <8 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
1832   %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
1833   %conv6 = trunc <8 x i32> %spec.store.select to <8 x i16>
1834   ret <8 x i16> %conv6
1837 define <8 x i16> @ustest_f16i16(<8 x half> %x) {
1838 ; CHECK-NOV-LABEL: ustest_f16i16:
1839 ; CHECK-NOV:       # %bb.0: # %entry
1840 ; CHECK-NOV-NEXT:    addi sp, sp, -128
1841 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 128
1842 ; CHECK-NOV-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
1843 ; CHECK-NOV-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
1844 ; CHECK-NOV-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
1845 ; CHECK-NOV-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
1846 ; CHECK-NOV-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
1847 ; CHECK-NOV-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
1848 ; CHECK-NOV-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
1849 ; CHECK-NOV-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
1850 ; CHECK-NOV-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
1851 ; CHECK-NOV-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
1852 ; CHECK-NOV-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
1853 ; CHECK-NOV-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
1854 ; CHECK-NOV-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
1855 ; CHECK-NOV-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
1856 ; CHECK-NOV-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
1857 ; CHECK-NOV-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
1858 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
1859 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
1860 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
1861 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
1862 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
1863 ; CHECK-NOV-NEXT:    .cfi_offset s4, -48
1864 ; CHECK-NOV-NEXT:    .cfi_offset s5, -56
1865 ; CHECK-NOV-NEXT:    .cfi_offset s6, -64
1866 ; CHECK-NOV-NEXT:    .cfi_offset s7, -72
1867 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -80
1868 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -88
1869 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -96
1870 ; CHECK-NOV-NEXT:    .cfi_offset fs3, -104
1871 ; CHECK-NOV-NEXT:    .cfi_offset fs4, -112
1872 ; CHECK-NOV-NEXT:    .cfi_offset fs5, -120
1873 ; CHECK-NOV-NEXT:    .cfi_offset fs6, -128
1874 ; CHECK-NOV-NEXT:    lhu s1, 56(a1)
1875 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
1876 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
1877 ; CHECK-NOV-NEXT:    lhu s4, 16(a1)
1878 ; CHECK-NOV-NEXT:    lhu s5, 24(a1)
1879 ; CHECK-NOV-NEXT:    lhu s6, 32(a1)
1880 ; CHECK-NOV-NEXT:    lhu s7, 40(a1)
1881 ; CHECK-NOV-NEXT:    lhu a1, 48(a1)
1882 ; CHECK-NOV-NEXT:    mv s0, a0
1883 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
1884 ; CHECK-NOV-NEXT:    call __extendhfsf2
1885 ; CHECK-NOV-NEXT:    fmv.s fs6, fa0
1886 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s7
1887 ; CHECK-NOV-NEXT:    call __extendhfsf2
1888 ; CHECK-NOV-NEXT:    fmv.s fs5, fa0
1889 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s6
1890 ; CHECK-NOV-NEXT:    call __extendhfsf2
1891 ; CHECK-NOV-NEXT:    fmv.s fs4, fa0
1892 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s5
1893 ; CHECK-NOV-NEXT:    call __extendhfsf2
1894 ; CHECK-NOV-NEXT:    fmv.s fs3, fa0
1895 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s4
1896 ; CHECK-NOV-NEXT:    call __extendhfsf2
1897 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
1898 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
1899 ; CHECK-NOV-NEXT:    call __extendhfsf2
1900 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
1901 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
1902 ; CHECK-NOV-NEXT:    call __extendhfsf2
1903 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
1904 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
1905 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs6, rtz
1906 ; CHECK-NOV-NEXT:    call __extendhfsf2
1907 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
1908 ; CHECK-NOV-NEXT:    lui a3, 16
1909 ; CHECK-NOV-NEXT:    addiw a3, a3, -1
1910 ; CHECK-NOV-NEXT:    bge a0, a3, .LBB17_10
1911 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
1912 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
1913 ; CHECK-NOV-NEXT:    bge s1, a3, .LBB17_11
1914 ; CHECK-NOV-NEXT:  .LBB17_2: # %entry
1915 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
1916 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB17_12
1917 ; CHECK-NOV-NEXT:  .LBB17_3: # %entry
1918 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs3, rtz
1919 ; CHECK-NOV-NEXT:    bge a2, a3, .LBB17_13
1920 ; CHECK-NOV-NEXT:  .LBB17_4: # %entry
1921 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs2, rtz
1922 ; CHECK-NOV-NEXT:    bge a4, a3, .LBB17_14
1923 ; CHECK-NOV-NEXT:  .LBB17_5: # %entry
1924 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs1, rtz
1925 ; CHECK-NOV-NEXT:    bge a5, a3, .LBB17_15
1926 ; CHECK-NOV-NEXT:  .LBB17_6: # %entry
1927 ; CHECK-NOV-NEXT:    fcvt.l.s a7, fs0, rtz
1928 ; CHECK-NOV-NEXT:    bge a6, a3, .LBB17_16
1929 ; CHECK-NOV-NEXT:  .LBB17_7: # %entry
1930 ; CHECK-NOV-NEXT:    blt a7, a3, .LBB17_9
1931 ; CHECK-NOV-NEXT:  .LBB17_8: # %entry
1932 ; CHECK-NOV-NEXT:    mv a7, a3
1933 ; CHECK-NOV-NEXT:  .LBB17_9: # %entry
1934 ; CHECK-NOV-NEXT:    sgtz a3, a0
1935 ; CHECK-NOV-NEXT:    sgtz t0, s1
1936 ; CHECK-NOV-NEXT:    sgtz t1, a1
1937 ; CHECK-NOV-NEXT:    sgtz t2, a2
1938 ; CHECK-NOV-NEXT:    sgtz t3, a4
1939 ; CHECK-NOV-NEXT:    sgtz t4, a5
1940 ; CHECK-NOV-NEXT:    sgtz t5, a6
1941 ; CHECK-NOV-NEXT:    sgtz t6, a7
1942 ; CHECK-NOV-NEXT:    negw t6, t6
1943 ; CHECK-NOV-NEXT:    and a7, t6, a7
1944 ; CHECK-NOV-NEXT:    negw t5, t5
1945 ; CHECK-NOV-NEXT:    and a6, t5, a6
1946 ; CHECK-NOV-NEXT:    negw t4, t4
1947 ; CHECK-NOV-NEXT:    and a5, t4, a5
1948 ; CHECK-NOV-NEXT:    negw t3, t3
1949 ; CHECK-NOV-NEXT:    and a4, t3, a4
1950 ; CHECK-NOV-NEXT:    negw t2, t2
1951 ; CHECK-NOV-NEXT:    and a2, t2, a2
1952 ; CHECK-NOV-NEXT:    negw t1, t1
1953 ; CHECK-NOV-NEXT:    and a1, t1, a1
1954 ; CHECK-NOV-NEXT:    negw t0, t0
1955 ; CHECK-NOV-NEXT:    and t0, t0, s1
1956 ; CHECK-NOV-NEXT:    negw a3, a3
1957 ; CHECK-NOV-NEXT:    and a0, a3, a0
1958 ; CHECK-NOV-NEXT:    sh a0, 14(s0)
1959 ; CHECK-NOV-NEXT:    sh t0, 12(s0)
1960 ; CHECK-NOV-NEXT:    sh a1, 10(s0)
1961 ; CHECK-NOV-NEXT:    sh a2, 8(s0)
1962 ; CHECK-NOV-NEXT:    sh a4, 6(s0)
1963 ; CHECK-NOV-NEXT:    sh a5, 4(s0)
1964 ; CHECK-NOV-NEXT:    sh a6, 2(s0)
1965 ; CHECK-NOV-NEXT:    sh a7, 0(s0)
1966 ; CHECK-NOV-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
1967 ; CHECK-NOV-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
1968 ; CHECK-NOV-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
1969 ; CHECK-NOV-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
1970 ; CHECK-NOV-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
1971 ; CHECK-NOV-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
1972 ; CHECK-NOV-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
1973 ; CHECK-NOV-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
1974 ; CHECK-NOV-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
1975 ; CHECK-NOV-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
1976 ; CHECK-NOV-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
1977 ; CHECK-NOV-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
1978 ; CHECK-NOV-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
1979 ; CHECK-NOV-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
1980 ; CHECK-NOV-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
1981 ; CHECK-NOV-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
1982 ; CHECK-NOV-NEXT:    addi sp, sp, 128
1983 ; CHECK-NOV-NEXT:    ret
1984 ; CHECK-NOV-NEXT:  .LBB17_10: # %entry
1985 ; CHECK-NOV-NEXT:    mv a0, a3
1986 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
1987 ; CHECK-NOV-NEXT:    blt s1, a3, .LBB17_2
1988 ; CHECK-NOV-NEXT:  .LBB17_11: # %entry
1989 ; CHECK-NOV-NEXT:    mv s1, a3
1990 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
1991 ; CHECK-NOV-NEXT:    blt a1, a3, .LBB17_3
1992 ; CHECK-NOV-NEXT:  .LBB17_12: # %entry
1993 ; CHECK-NOV-NEXT:    mv a1, a3
1994 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs3, rtz
1995 ; CHECK-NOV-NEXT:    blt a2, a3, .LBB17_4
1996 ; CHECK-NOV-NEXT:  .LBB17_13: # %entry
1997 ; CHECK-NOV-NEXT:    mv a2, a3
1998 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs2, rtz
1999 ; CHECK-NOV-NEXT:    blt a4, a3, .LBB17_5
2000 ; CHECK-NOV-NEXT:  .LBB17_14: # %entry
2001 ; CHECK-NOV-NEXT:    mv a4, a3
2002 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs1, rtz
2003 ; CHECK-NOV-NEXT:    blt a5, a3, .LBB17_6
2004 ; CHECK-NOV-NEXT:  .LBB17_15: # %entry
2005 ; CHECK-NOV-NEXT:    mv a5, a3
2006 ; CHECK-NOV-NEXT:    fcvt.l.s a7, fs0, rtz
2007 ; CHECK-NOV-NEXT:    blt a6, a3, .LBB17_7
2008 ; CHECK-NOV-NEXT:  .LBB17_16: # %entry
2009 ; CHECK-NOV-NEXT:    mv a6, a3
2010 ; CHECK-NOV-NEXT:    bge a7, a3, .LBB17_8
2011 ; CHECK-NOV-NEXT:    j .LBB17_9
2013 ; CHECK-V-LABEL: ustest_f16i16:
2014 ; CHECK-V:       # %bb.0: # %entry
2015 ; CHECK-V-NEXT:    addi sp, sp, -80
2016 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 80
2017 ; CHECK-V-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
2018 ; CHECK-V-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
2019 ; CHECK-V-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
2020 ; CHECK-V-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
2021 ; CHECK-V-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
2022 ; CHECK-V-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
2023 ; CHECK-V-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill
2024 ; CHECK-V-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill
2025 ; CHECK-V-NEXT:    .cfi_offset ra, -8
2026 ; CHECK-V-NEXT:    .cfi_offset s0, -16
2027 ; CHECK-V-NEXT:    .cfi_offset s1, -24
2028 ; CHECK-V-NEXT:    .cfi_offset s2, -32
2029 ; CHECK-V-NEXT:    .cfi_offset s3, -40
2030 ; CHECK-V-NEXT:    .cfi_offset s4, -48
2031 ; CHECK-V-NEXT:    .cfi_offset s5, -56
2032 ; CHECK-V-NEXT:    .cfi_offset s6, -64
2033 ; CHECK-V-NEXT:    csrr a1, vlenb
2034 ; CHECK-V-NEXT:    slli a1, a1, 2
2035 ; CHECK-V-NEXT:    sub sp, sp, a1
2036 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xd0, 0x00, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 80 + 4 * vlenb
2037 ; CHECK-V-NEXT:    lhu s0, 0(a0)
2038 ; CHECK-V-NEXT:    lhu s1, 8(a0)
2039 ; CHECK-V-NEXT:    lhu s2, 16(a0)
2040 ; CHECK-V-NEXT:    lhu s3, 24(a0)
2041 ; CHECK-V-NEXT:    lhu s4, 32(a0)
2042 ; CHECK-V-NEXT:    lhu s5, 40(a0)
2043 ; CHECK-V-NEXT:    lhu s6, 48(a0)
2044 ; CHECK-V-NEXT:    lhu a0, 56(a0)
2045 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
2046 ; CHECK-V-NEXT:    call __extendhfsf2
2047 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2048 ; CHECK-V-NEXT:    fmv.w.x fa0, s6
2049 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2050 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2051 ; CHECK-V-NEXT:    csrr a0, vlenb
2052 ; CHECK-V-NEXT:    slli a0, a0, 1
2053 ; CHECK-V-NEXT:    add a0, sp, a0
2054 ; CHECK-V-NEXT:    addi a0, a0, 16
2055 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2056 ; CHECK-V-NEXT:    call __extendhfsf2
2057 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2058 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
2059 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2060 ; CHECK-V-NEXT:    csrr a0, vlenb
2061 ; CHECK-V-NEXT:    slli a0, a0, 1
2062 ; CHECK-V-NEXT:    add a0, sp, a0
2063 ; CHECK-V-NEXT:    addi a0, a0, 16
2064 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
2065 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2066 ; CHECK-V-NEXT:    csrr a0, vlenb
2067 ; CHECK-V-NEXT:    add a0, sp, a0
2068 ; CHECK-V-NEXT:    addi a0, a0, 16
2069 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2070 ; CHECK-V-NEXT:    fmv.w.x fa0, s5
2071 ; CHECK-V-NEXT:    call __extendhfsf2
2072 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2073 ; CHECK-V-NEXT:    fmv.w.x fa0, s4
2074 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2075 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2076 ; CHECK-V-NEXT:    csrr a0, vlenb
2077 ; CHECK-V-NEXT:    slli a0, a0, 1
2078 ; CHECK-V-NEXT:    add a0, sp, a0
2079 ; CHECK-V-NEXT:    addi a0, a0, 16
2080 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2081 ; CHECK-V-NEXT:    call __extendhfsf2
2082 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2083 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
2084 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2085 ; CHECK-V-NEXT:    csrr a0, vlenb
2086 ; CHECK-V-NEXT:    slli a0, a0, 1
2087 ; CHECK-V-NEXT:    add a0, sp, a0
2088 ; CHECK-V-NEXT:    addi a0, a0, 16
2089 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
2090 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2091 ; CHECK-V-NEXT:    csrr a0, vlenb
2092 ; CHECK-V-NEXT:    add a0, sp, a0
2093 ; CHECK-V-NEXT:    addi a0, a0, 16
2094 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
2095 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
2096 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
2097 ; CHECK-V-NEXT:    csrr a0, vlenb
2098 ; CHECK-V-NEXT:    slli a0, a0, 1
2099 ; CHECK-V-NEXT:    add a0, sp, a0
2100 ; CHECK-V-NEXT:    addi a0, a0, 16
2101 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
2102 ; CHECK-V-NEXT:    fmv.w.x fa0, s3
2103 ; CHECK-V-NEXT:    call __extendhfsf2
2104 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2105 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
2106 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2107 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2108 ; CHECK-V-NEXT:    addi a0, sp, 16
2109 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2110 ; CHECK-V-NEXT:    call __extendhfsf2
2111 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2112 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
2113 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2114 ; CHECK-V-NEXT:    addi a0, sp, 16
2115 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
2116 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2117 ; CHECK-V-NEXT:    csrr a0, vlenb
2118 ; CHECK-V-NEXT:    add a0, sp, a0
2119 ; CHECK-V-NEXT:    addi a0, a0, 16
2120 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2121 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
2122 ; CHECK-V-NEXT:    call __extendhfsf2
2123 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2124 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
2125 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2126 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2127 ; CHECK-V-NEXT:    addi a0, sp, 16
2128 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2129 ; CHECK-V-NEXT:    call __extendhfsf2
2130 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
2131 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
2132 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2133 ; CHECK-V-NEXT:    addi a0, sp, 16
2134 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
2135 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2136 ; CHECK-V-NEXT:    csrr a0, vlenb
2137 ; CHECK-V-NEXT:    add a0, sp, a0
2138 ; CHECK-V-NEXT:    addi a0, a0, 16
2139 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
2140 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
2141 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
2142 ; CHECK-V-NEXT:    csrr a0, vlenb
2143 ; CHECK-V-NEXT:    slli a0, a0, 1
2144 ; CHECK-V-NEXT:    add a0, sp, a0
2145 ; CHECK-V-NEXT:    addi a0, a0, 16
2146 ; CHECK-V-NEXT:    vl2r.v v10, (a0) # Unknown-size Folded Reload
2147 ; CHECK-V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
2148 ; CHECK-V-NEXT:    vslideup.vi v8, v10, 4
2149 ; CHECK-V-NEXT:    lui a0, 16
2150 ; CHECK-V-NEXT:    addi a0, a0, -1
2151 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
2152 ; CHECK-V-NEXT:    vmax.vx v10, v8, zero
2153 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
2154 ; CHECK-V-NEXT:    vnsrl.wi v8, v10, 0
2155 ; CHECK-V-NEXT:    csrr a0, vlenb
2156 ; CHECK-V-NEXT:    slli a0, a0, 2
2157 ; CHECK-V-NEXT:    add sp, sp, a0
2158 ; CHECK-V-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
2159 ; CHECK-V-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
2160 ; CHECK-V-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
2161 ; CHECK-V-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
2162 ; CHECK-V-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
2163 ; CHECK-V-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
2164 ; CHECK-V-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload
2165 ; CHECK-V-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload
2166 ; CHECK-V-NEXT:    addi sp, sp, 80
2167 ; CHECK-V-NEXT:    ret
2168 entry:
2169   %conv = fptosi <8 x half> %x to <8 x i32>
2170   %0 = icmp slt <8 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
2171   %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
2172   %1 = icmp sgt <8 x i32> %spec.store.select, zeroinitializer
2173   %spec.store.select7 = select <8 x i1> %1, <8 x i32> %spec.store.select, <8 x i32> zeroinitializer
2174   %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>
2175   ret <8 x i16> %conv6
2178 ; i64 saturate
2180 define <2 x i64> @stest_f64i64(<2 x double> %x) {
2181 ; CHECK-NOV-LABEL: stest_f64i64:
2182 ; CHECK-NOV:       # %bb.0: # %entry
2183 ; CHECK-NOV-NEXT:    addi sp, sp, -32
2184 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
2185 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
2186 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
2187 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
2188 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2189 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
2190 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
2191 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
2192 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
2193 ; CHECK-NOV-NEXT:    fmv.d fs0, fa1
2194 ; CHECK-NOV-NEXT:    call __fixdfti
2195 ; CHECK-NOV-NEXT:    mv s0, a0
2196 ; CHECK-NOV-NEXT:    mv s1, a1
2197 ; CHECK-NOV-NEXT:    fmv.d fa0, fs0
2198 ; CHECK-NOV-NEXT:    call __fixdfti
2199 ; CHECK-NOV-NEXT:    mv a2, a0
2200 ; CHECK-NOV-NEXT:    li a0, -1
2201 ; CHECK-NOV-NEXT:    srli a3, a0, 1
2202 ; CHECK-NOV-NEXT:    beqz a1, .LBB18_3
2203 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
2204 ; CHECK-NOV-NEXT:    slti a4, a1, 0
2205 ; CHECK-NOV-NEXT:    bnez s1, .LBB18_4
2206 ; CHECK-NOV-NEXT:  .LBB18_2:
2207 ; CHECK-NOV-NEXT:    sltu a5, s0, a3
2208 ; CHECK-NOV-NEXT:    beqz a5, .LBB18_5
2209 ; CHECK-NOV-NEXT:    j .LBB18_6
2210 ; CHECK-NOV-NEXT:  .LBB18_3:
2211 ; CHECK-NOV-NEXT:    sltu a4, a2, a3
2212 ; CHECK-NOV-NEXT:    beqz s1, .LBB18_2
2213 ; CHECK-NOV-NEXT:  .LBB18_4: # %entry
2214 ; CHECK-NOV-NEXT:    slti a5, s1, 0
2215 ; CHECK-NOV-NEXT:    bnez a5, .LBB18_6
2216 ; CHECK-NOV-NEXT:  .LBB18_5: # %entry
2217 ; CHECK-NOV-NEXT:    mv s0, a3
2218 ; CHECK-NOV-NEXT:  .LBB18_6: # %entry
2219 ; CHECK-NOV-NEXT:    neg a6, a5
2220 ; CHECK-NOV-NEXT:    neg a5, a4
2221 ; CHECK-NOV-NEXT:    and a5, a5, a1
2222 ; CHECK-NOV-NEXT:    bnez a4, .LBB18_8
2223 ; CHECK-NOV-NEXT:  # %bb.7: # %entry
2224 ; CHECK-NOV-NEXT:    mv a2, a3
2225 ; CHECK-NOV-NEXT:  .LBB18_8: # %entry
2226 ; CHECK-NOV-NEXT:    and a4, a6, s1
2227 ; CHECK-NOV-NEXT:    slli a1, a0, 63
2228 ; CHECK-NOV-NEXT:    beq a5, a0, .LBB18_11
2229 ; CHECK-NOV-NEXT:  # %bb.9: # %entry
2230 ; CHECK-NOV-NEXT:    slti a3, a5, 0
2231 ; CHECK-NOV-NEXT:    xori a3, a3, 1
2232 ; CHECK-NOV-NEXT:    bne a4, a0, .LBB18_12
2233 ; CHECK-NOV-NEXT:  .LBB18_10:
2234 ; CHECK-NOV-NEXT:    sltu a0, a1, s0
2235 ; CHECK-NOV-NEXT:    beqz a0, .LBB18_13
2236 ; CHECK-NOV-NEXT:    j .LBB18_14
2237 ; CHECK-NOV-NEXT:  .LBB18_11:
2238 ; CHECK-NOV-NEXT:    sltu a3, a1, a2
2239 ; CHECK-NOV-NEXT:    beq a4, a0, .LBB18_10
2240 ; CHECK-NOV-NEXT:  .LBB18_12: # %entry
2241 ; CHECK-NOV-NEXT:    slti a0, a4, 0
2242 ; CHECK-NOV-NEXT:    xori a0, a0, 1
2243 ; CHECK-NOV-NEXT:    bnez a0, .LBB18_14
2244 ; CHECK-NOV-NEXT:  .LBB18_13: # %entry
2245 ; CHECK-NOV-NEXT:    mv s0, a1
2246 ; CHECK-NOV-NEXT:  .LBB18_14: # %entry
2247 ; CHECK-NOV-NEXT:    bnez a3, .LBB18_16
2248 ; CHECK-NOV-NEXT:  # %bb.15: # %entry
2249 ; CHECK-NOV-NEXT:    mv a2, a1
2250 ; CHECK-NOV-NEXT:  .LBB18_16: # %entry
2251 ; CHECK-NOV-NEXT:    mv a0, s0
2252 ; CHECK-NOV-NEXT:    mv a1, a2
2253 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
2254 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
2255 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
2256 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2257 ; CHECK-NOV-NEXT:    addi sp, sp, 32
2258 ; CHECK-NOV-NEXT:    ret
2260 ; CHECK-V-LABEL: stest_f64i64:
2261 ; CHECK-V:       # %bb.0: # %entry
2262 ; CHECK-V-NEXT:    addi sp, sp, -64
2263 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
2264 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
2265 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
2266 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
2267 ; CHECK-V-NEXT:    .cfi_offset ra, -8
2268 ; CHECK-V-NEXT:    .cfi_offset s0, -16
2269 ; CHECK-V-NEXT:    .cfi_offset s1, -24
2270 ; CHECK-V-NEXT:    csrr a0, vlenb
2271 ; CHECK-V-NEXT:    slli a0, a0, 1
2272 ; CHECK-V-NEXT:    sub sp, sp, a0
2273 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
2274 ; CHECK-V-NEXT:    addi a0, sp, 32
2275 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2276 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2277 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
2278 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
2279 ; CHECK-V-NEXT:    call __fixdfti
2280 ; CHECK-V-NEXT:    mv s0, a0
2281 ; CHECK-V-NEXT:    mv s1, a1
2282 ; CHECK-V-NEXT:    addi a0, sp, 32
2283 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
2284 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2285 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
2286 ; CHECK-V-NEXT:    call __fixdfti
2287 ; CHECK-V-NEXT:    li a2, -1
2288 ; CHECK-V-NEXT:    srli a3, a2, 1
2289 ; CHECK-V-NEXT:    beqz a1, .LBB18_3
2290 ; CHECK-V-NEXT:  # %bb.1: # %entry
2291 ; CHECK-V-NEXT:    slti a4, a1, 0
2292 ; CHECK-V-NEXT:    bnez s1, .LBB18_4
2293 ; CHECK-V-NEXT:  .LBB18_2:
2294 ; CHECK-V-NEXT:    sltu a5, s0, a3
2295 ; CHECK-V-NEXT:    beqz a5, .LBB18_5
2296 ; CHECK-V-NEXT:    j .LBB18_6
2297 ; CHECK-V-NEXT:  .LBB18_3:
2298 ; CHECK-V-NEXT:    sltu a4, a0, a3
2299 ; CHECK-V-NEXT:    beqz s1, .LBB18_2
2300 ; CHECK-V-NEXT:  .LBB18_4: # %entry
2301 ; CHECK-V-NEXT:    slti a5, s1, 0
2302 ; CHECK-V-NEXT:    bnez a5, .LBB18_6
2303 ; CHECK-V-NEXT:  .LBB18_5: # %entry
2304 ; CHECK-V-NEXT:    mv s0, a3
2305 ; CHECK-V-NEXT:  .LBB18_6: # %entry
2306 ; CHECK-V-NEXT:    neg a6, a5
2307 ; CHECK-V-NEXT:    neg a5, a4
2308 ; CHECK-V-NEXT:    and a5, a5, a1
2309 ; CHECK-V-NEXT:    bnez a4, .LBB18_8
2310 ; CHECK-V-NEXT:  # %bb.7: # %entry
2311 ; CHECK-V-NEXT:    mv a0, a3
2312 ; CHECK-V-NEXT:  .LBB18_8: # %entry
2313 ; CHECK-V-NEXT:    and a4, a6, s1
2314 ; CHECK-V-NEXT:    slli a1, a2, 63
2315 ; CHECK-V-NEXT:    beq a5, a2, .LBB18_11
2316 ; CHECK-V-NEXT:  # %bb.9: # %entry
2317 ; CHECK-V-NEXT:    slti a3, a5, 0
2318 ; CHECK-V-NEXT:    xori a3, a3, 1
2319 ; CHECK-V-NEXT:    bne a4, a2, .LBB18_12
2320 ; CHECK-V-NEXT:  .LBB18_10:
2321 ; CHECK-V-NEXT:    sltu a2, a1, s0
2322 ; CHECK-V-NEXT:    beqz a2, .LBB18_13
2323 ; CHECK-V-NEXT:    j .LBB18_14
2324 ; CHECK-V-NEXT:  .LBB18_11:
2325 ; CHECK-V-NEXT:    sltu a3, a1, a0
2326 ; CHECK-V-NEXT:    beq a4, a2, .LBB18_10
2327 ; CHECK-V-NEXT:  .LBB18_12: # %entry
2328 ; CHECK-V-NEXT:    slti a2, a4, 0
2329 ; CHECK-V-NEXT:    xori a2, a2, 1
2330 ; CHECK-V-NEXT:    bnez a2, .LBB18_14
2331 ; CHECK-V-NEXT:  .LBB18_13: # %entry
2332 ; CHECK-V-NEXT:    mv s0, a1
2333 ; CHECK-V-NEXT:  .LBB18_14: # %entry
2334 ; CHECK-V-NEXT:    bnez a3, .LBB18_16
2335 ; CHECK-V-NEXT:  # %bb.15: # %entry
2336 ; CHECK-V-NEXT:    mv a0, a1
2337 ; CHECK-V-NEXT:  .LBB18_16: # %entry
2338 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
2339 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2340 ; CHECK-V-NEXT:    vmv.s.x v9, s0
2341 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2342 ; CHECK-V-NEXT:    csrr a0, vlenb
2343 ; CHECK-V-NEXT:    slli a0, a0, 1
2344 ; CHECK-V-NEXT:    add sp, sp, a0
2345 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
2346 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
2347 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
2348 ; CHECK-V-NEXT:    addi sp, sp, 64
2349 ; CHECK-V-NEXT:    ret
2350 entry:
2351   %conv = fptosi <2 x double> %x to <2 x i128>
2352   %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>
2353   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>
2354   %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>
2355   %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>
2356   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
2357   ret <2 x i64> %conv6
2360 define <2 x i64> @utest_f64i64(<2 x double> %x) {
2361 ; CHECK-NOV-LABEL: utest_f64i64:
2362 ; CHECK-NOV:       # %bb.0: # %entry
2363 ; CHECK-NOV-NEXT:    addi sp, sp, -32
2364 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
2365 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
2366 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
2367 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
2368 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2369 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
2370 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
2371 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
2372 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
2373 ; CHECK-NOV-NEXT:    fmv.d fs0, fa1
2374 ; CHECK-NOV-NEXT:    call __fixunsdfti
2375 ; CHECK-NOV-NEXT:    mv s0, a0
2376 ; CHECK-NOV-NEXT:    mv s1, a1
2377 ; CHECK-NOV-NEXT:    fmv.d fa0, fs0
2378 ; CHECK-NOV-NEXT:    call __fixunsdfti
2379 ; CHECK-NOV-NEXT:    snez a1, a1
2380 ; CHECK-NOV-NEXT:    snez a2, s1
2381 ; CHECK-NOV-NEXT:    addi a2, a2, -1
2382 ; CHECK-NOV-NEXT:    and a2, a2, s0
2383 ; CHECK-NOV-NEXT:    addi a1, a1, -1
2384 ; CHECK-NOV-NEXT:    and a1, a1, a0
2385 ; CHECK-NOV-NEXT:    mv a0, a2
2386 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
2387 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
2388 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
2389 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2390 ; CHECK-NOV-NEXT:    addi sp, sp, 32
2391 ; CHECK-NOV-NEXT:    ret
2393 ; CHECK-V-LABEL: utest_f64i64:
2394 ; CHECK-V:       # %bb.0: # %entry
2395 ; CHECK-V-NEXT:    addi sp, sp, -64
2396 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
2397 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
2398 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
2399 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
2400 ; CHECK-V-NEXT:    .cfi_offset ra, -8
2401 ; CHECK-V-NEXT:    .cfi_offset s0, -16
2402 ; CHECK-V-NEXT:    .cfi_offset s1, -24
2403 ; CHECK-V-NEXT:    csrr a0, vlenb
2404 ; CHECK-V-NEXT:    slli a0, a0, 1
2405 ; CHECK-V-NEXT:    sub sp, sp, a0
2406 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
2407 ; CHECK-V-NEXT:    addi a0, sp, 32
2408 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2409 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2410 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
2411 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
2412 ; CHECK-V-NEXT:    call __fixunsdfti
2413 ; CHECK-V-NEXT:    mv s0, a0
2414 ; CHECK-V-NEXT:    mv s1, a1
2415 ; CHECK-V-NEXT:    addi a0, sp, 32
2416 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
2417 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2418 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
2419 ; CHECK-V-NEXT:    call __fixunsdfti
2420 ; CHECK-V-NEXT:    snez a1, a1
2421 ; CHECK-V-NEXT:    snez a2, s1
2422 ; CHECK-V-NEXT:    addi a2, a2, -1
2423 ; CHECK-V-NEXT:    and a2, a2, s0
2424 ; CHECK-V-NEXT:    addi a1, a1, -1
2425 ; CHECK-V-NEXT:    and a0, a1, a0
2426 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
2427 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2428 ; CHECK-V-NEXT:    vmv.s.x v9, a2
2429 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2430 ; CHECK-V-NEXT:    csrr a0, vlenb
2431 ; CHECK-V-NEXT:    slli a0, a0, 1
2432 ; CHECK-V-NEXT:    add sp, sp, a0
2433 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
2434 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
2435 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
2436 ; CHECK-V-NEXT:    addi sp, sp, 64
2437 ; CHECK-V-NEXT:    ret
2438 entry:
2439   %conv = fptoui <2 x double> %x to <2 x i128>
2440   %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>
2441   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>
2442   %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>
2443   ret <2 x i64> %conv6
2446 define <2 x i64> @ustest_f64i64(<2 x double> %x) {
2447 ; CHECK-NOV-LABEL: ustest_f64i64:
2448 ; CHECK-NOV:       # %bb.0: # %entry
2449 ; CHECK-NOV-NEXT:    addi sp, sp, -32
2450 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
2451 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
2452 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
2453 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
2454 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2455 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
2456 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
2457 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
2458 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
2459 ; CHECK-NOV-NEXT:    fmv.d fs0, fa1
2460 ; CHECK-NOV-NEXT:    call __fixdfti
2461 ; CHECK-NOV-NEXT:    mv s0, a0
2462 ; CHECK-NOV-NEXT:    mv s1, a1
2463 ; CHECK-NOV-NEXT:    fmv.d fa0, fs0
2464 ; CHECK-NOV-NEXT:    call __fixdfti
2465 ; CHECK-NOV-NEXT:    mv a2, s1
2466 ; CHECK-NOV-NEXT:    blez s1, .LBB20_2
2467 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
2468 ; CHECK-NOV-NEXT:    li a2, 1
2469 ; CHECK-NOV-NEXT:  .LBB20_2: # %entry
2470 ; CHECK-NOV-NEXT:    slti a3, a1, 1
2471 ; CHECK-NOV-NEXT:    slti a4, s1, 1
2472 ; CHECK-NOV-NEXT:    blez a1, .LBB20_4
2473 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
2474 ; CHECK-NOV-NEXT:    li a1, 1
2475 ; CHECK-NOV-NEXT:  .LBB20_4: # %entry
2476 ; CHECK-NOV-NEXT:    neg a4, a4
2477 ; CHECK-NOV-NEXT:    neg a3, a3
2478 ; CHECK-NOV-NEXT:    and a3, a3, a0
2479 ; CHECK-NOV-NEXT:    beqz a1, .LBB20_7
2480 ; CHECK-NOV-NEXT:  # %bb.5: # %entry
2481 ; CHECK-NOV-NEXT:    sgtz a1, a1
2482 ; CHECK-NOV-NEXT:    and a4, a4, s0
2483 ; CHECK-NOV-NEXT:    bnez a2, .LBB20_8
2484 ; CHECK-NOV-NEXT:  .LBB20_6:
2485 ; CHECK-NOV-NEXT:    snez a0, a4
2486 ; CHECK-NOV-NEXT:    j .LBB20_9
2487 ; CHECK-NOV-NEXT:  .LBB20_7:
2488 ; CHECK-NOV-NEXT:    snez a1, a3
2489 ; CHECK-NOV-NEXT:    and a4, a4, s0
2490 ; CHECK-NOV-NEXT:    beqz a2, .LBB20_6
2491 ; CHECK-NOV-NEXT:  .LBB20_8: # %entry
2492 ; CHECK-NOV-NEXT:    sgtz a0, a2
2493 ; CHECK-NOV-NEXT:  .LBB20_9: # %entry
2494 ; CHECK-NOV-NEXT:    neg a0, a0
2495 ; CHECK-NOV-NEXT:    and a0, a0, a4
2496 ; CHECK-NOV-NEXT:    neg a1, a1
2497 ; CHECK-NOV-NEXT:    and a1, a1, a3
2498 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
2499 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
2500 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
2501 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2502 ; CHECK-NOV-NEXT:    addi sp, sp, 32
2503 ; CHECK-NOV-NEXT:    ret
2505 ; CHECK-V-LABEL: ustest_f64i64:
2506 ; CHECK-V:       # %bb.0: # %entry
2507 ; CHECK-V-NEXT:    addi sp, sp, -64
2508 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
2509 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
2510 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
2511 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
2512 ; CHECK-V-NEXT:    .cfi_offset ra, -8
2513 ; CHECK-V-NEXT:    .cfi_offset s0, -16
2514 ; CHECK-V-NEXT:    .cfi_offset s1, -24
2515 ; CHECK-V-NEXT:    csrr a0, vlenb
2516 ; CHECK-V-NEXT:    slli a0, a0, 1
2517 ; CHECK-V-NEXT:    sub sp, sp, a0
2518 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
2519 ; CHECK-V-NEXT:    addi a0, sp, 32
2520 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2521 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2522 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
2523 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
2524 ; CHECK-V-NEXT:    call __fixdfti
2525 ; CHECK-V-NEXT:    mv s0, a0
2526 ; CHECK-V-NEXT:    mv s1, a1
2527 ; CHECK-V-NEXT:    addi a0, sp, 32
2528 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
2529 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
2530 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
2531 ; CHECK-V-NEXT:    call __fixdfti
2532 ; CHECK-V-NEXT:    mv a2, s1
2533 ; CHECK-V-NEXT:    blez s1, .LBB20_2
2534 ; CHECK-V-NEXT:  # %bb.1: # %entry
2535 ; CHECK-V-NEXT:    li a2, 1
2536 ; CHECK-V-NEXT:  .LBB20_2: # %entry
2537 ; CHECK-V-NEXT:    slti a4, a1, 1
2538 ; CHECK-V-NEXT:    slti a3, s1, 1
2539 ; CHECK-V-NEXT:    blez a1, .LBB20_4
2540 ; CHECK-V-NEXT:  # %bb.3: # %entry
2541 ; CHECK-V-NEXT:    li a1, 1
2542 ; CHECK-V-NEXT:  .LBB20_4: # %entry
2543 ; CHECK-V-NEXT:    neg a3, a3
2544 ; CHECK-V-NEXT:    neg a4, a4
2545 ; CHECK-V-NEXT:    and a0, a4, a0
2546 ; CHECK-V-NEXT:    beqz a1, .LBB20_7
2547 ; CHECK-V-NEXT:  # %bb.5: # %entry
2548 ; CHECK-V-NEXT:    sgtz a1, a1
2549 ; CHECK-V-NEXT:    and a3, a3, s0
2550 ; CHECK-V-NEXT:    bnez a2, .LBB20_8
2551 ; CHECK-V-NEXT:  .LBB20_6:
2552 ; CHECK-V-NEXT:    snez a2, a3
2553 ; CHECK-V-NEXT:    j .LBB20_9
2554 ; CHECK-V-NEXT:  .LBB20_7:
2555 ; CHECK-V-NEXT:    snez a1, a0
2556 ; CHECK-V-NEXT:    and a3, a3, s0
2557 ; CHECK-V-NEXT:    beqz a2, .LBB20_6
2558 ; CHECK-V-NEXT:  .LBB20_8: # %entry
2559 ; CHECK-V-NEXT:    sgtz a2, a2
2560 ; CHECK-V-NEXT:  .LBB20_9: # %entry
2561 ; CHECK-V-NEXT:    neg a2, a2
2562 ; CHECK-V-NEXT:    and a2, a2, a3
2563 ; CHECK-V-NEXT:    neg a1, a1
2564 ; CHECK-V-NEXT:    and a0, a1, a0
2565 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
2566 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2567 ; CHECK-V-NEXT:    vmv.s.x v9, a2
2568 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2569 ; CHECK-V-NEXT:    csrr a0, vlenb
2570 ; CHECK-V-NEXT:    slli a0, a0, 1
2571 ; CHECK-V-NEXT:    add sp, sp, a0
2572 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
2573 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
2574 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
2575 ; CHECK-V-NEXT:    addi sp, sp, 64
2576 ; CHECK-V-NEXT:    ret
2577 entry:
2578   %conv = fptosi <2 x double> %x to <2 x i128>
2579   %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>
2580   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>
2581   %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer
2582   %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer
2583   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
2584   ret <2 x i64> %conv6
2587 define <2 x i64> @stest_f32i64(<2 x float> %x) {
2588 ; CHECK-NOV-LABEL: stest_f32i64:
2589 ; CHECK-NOV:       # %bb.0: # %entry
2590 ; CHECK-NOV-NEXT:    addi sp, sp, -32
2591 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
2592 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
2593 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
2594 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
2595 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2596 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
2597 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
2598 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
2599 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
2600 ; CHECK-NOV-NEXT:    fmv.s fs0, fa1
2601 ; CHECK-NOV-NEXT:    call __fixsfti
2602 ; CHECK-NOV-NEXT:    mv s0, a0
2603 ; CHECK-NOV-NEXT:    mv s1, a1
2604 ; CHECK-NOV-NEXT:    fmv.s fa0, fs0
2605 ; CHECK-NOV-NEXT:    call __fixsfti
2606 ; CHECK-NOV-NEXT:    mv a2, a0
2607 ; CHECK-NOV-NEXT:    li a0, -1
2608 ; CHECK-NOV-NEXT:    srli a3, a0, 1
2609 ; CHECK-NOV-NEXT:    beqz a1, .LBB21_3
2610 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
2611 ; CHECK-NOV-NEXT:    slti a4, a1, 0
2612 ; CHECK-NOV-NEXT:    bnez s1, .LBB21_4
2613 ; CHECK-NOV-NEXT:  .LBB21_2:
2614 ; CHECK-NOV-NEXT:    sltu a5, s0, a3
2615 ; CHECK-NOV-NEXT:    beqz a5, .LBB21_5
2616 ; CHECK-NOV-NEXT:    j .LBB21_6
2617 ; CHECK-NOV-NEXT:  .LBB21_3:
2618 ; CHECK-NOV-NEXT:    sltu a4, a2, a3
2619 ; CHECK-NOV-NEXT:    beqz s1, .LBB21_2
2620 ; CHECK-NOV-NEXT:  .LBB21_4: # %entry
2621 ; CHECK-NOV-NEXT:    slti a5, s1, 0
2622 ; CHECK-NOV-NEXT:    bnez a5, .LBB21_6
2623 ; CHECK-NOV-NEXT:  .LBB21_5: # %entry
2624 ; CHECK-NOV-NEXT:    mv s0, a3
2625 ; CHECK-NOV-NEXT:  .LBB21_6: # %entry
2626 ; CHECK-NOV-NEXT:    neg a6, a5
2627 ; CHECK-NOV-NEXT:    neg a5, a4
2628 ; CHECK-NOV-NEXT:    and a5, a5, a1
2629 ; CHECK-NOV-NEXT:    bnez a4, .LBB21_8
2630 ; CHECK-NOV-NEXT:  # %bb.7: # %entry
2631 ; CHECK-NOV-NEXT:    mv a2, a3
2632 ; CHECK-NOV-NEXT:  .LBB21_8: # %entry
2633 ; CHECK-NOV-NEXT:    and a4, a6, s1
2634 ; CHECK-NOV-NEXT:    slli a1, a0, 63
2635 ; CHECK-NOV-NEXT:    beq a5, a0, .LBB21_11
2636 ; CHECK-NOV-NEXT:  # %bb.9: # %entry
2637 ; CHECK-NOV-NEXT:    slti a3, a5, 0
2638 ; CHECK-NOV-NEXT:    xori a3, a3, 1
2639 ; CHECK-NOV-NEXT:    bne a4, a0, .LBB21_12
2640 ; CHECK-NOV-NEXT:  .LBB21_10:
2641 ; CHECK-NOV-NEXT:    sltu a0, a1, s0
2642 ; CHECK-NOV-NEXT:    beqz a0, .LBB21_13
2643 ; CHECK-NOV-NEXT:    j .LBB21_14
2644 ; CHECK-NOV-NEXT:  .LBB21_11:
2645 ; CHECK-NOV-NEXT:    sltu a3, a1, a2
2646 ; CHECK-NOV-NEXT:    beq a4, a0, .LBB21_10
2647 ; CHECK-NOV-NEXT:  .LBB21_12: # %entry
2648 ; CHECK-NOV-NEXT:    slti a0, a4, 0
2649 ; CHECK-NOV-NEXT:    xori a0, a0, 1
2650 ; CHECK-NOV-NEXT:    bnez a0, .LBB21_14
2651 ; CHECK-NOV-NEXT:  .LBB21_13: # %entry
2652 ; CHECK-NOV-NEXT:    mv s0, a1
2653 ; CHECK-NOV-NEXT:  .LBB21_14: # %entry
2654 ; CHECK-NOV-NEXT:    bnez a3, .LBB21_16
2655 ; CHECK-NOV-NEXT:  # %bb.15: # %entry
2656 ; CHECK-NOV-NEXT:    mv a2, a1
2657 ; CHECK-NOV-NEXT:  .LBB21_16: # %entry
2658 ; CHECK-NOV-NEXT:    mv a0, s0
2659 ; CHECK-NOV-NEXT:    mv a1, a2
2660 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
2661 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
2662 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
2663 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2664 ; CHECK-NOV-NEXT:    addi sp, sp, 32
2665 ; CHECK-NOV-NEXT:    ret
2667 ; CHECK-V-LABEL: stest_f32i64:
2668 ; CHECK-V:       # %bb.0: # %entry
2669 ; CHECK-V-NEXT:    addi sp, sp, -64
2670 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
2671 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
2672 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
2673 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
2674 ; CHECK-V-NEXT:    .cfi_offset ra, -8
2675 ; CHECK-V-NEXT:    .cfi_offset s0, -16
2676 ; CHECK-V-NEXT:    .cfi_offset s1, -24
2677 ; CHECK-V-NEXT:    csrr a0, vlenb
2678 ; CHECK-V-NEXT:    slli a0, a0, 1
2679 ; CHECK-V-NEXT:    sub sp, sp, a0
2680 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
2681 ; CHECK-V-NEXT:    addi a0, sp, 32
2682 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2683 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
2684 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
2685 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
2686 ; CHECK-V-NEXT:    call __fixsfti
2687 ; CHECK-V-NEXT:    mv s0, a0
2688 ; CHECK-V-NEXT:    mv s1, a1
2689 ; CHECK-V-NEXT:    addi a0, sp, 32
2690 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
2691 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
2692 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
2693 ; CHECK-V-NEXT:    call __fixsfti
2694 ; CHECK-V-NEXT:    li a2, -1
2695 ; CHECK-V-NEXT:    srli a3, a2, 1
2696 ; CHECK-V-NEXT:    beqz a1, .LBB21_3
2697 ; CHECK-V-NEXT:  # %bb.1: # %entry
2698 ; CHECK-V-NEXT:    slti a4, a1, 0
2699 ; CHECK-V-NEXT:    bnez s1, .LBB21_4
2700 ; CHECK-V-NEXT:  .LBB21_2:
2701 ; CHECK-V-NEXT:    sltu a5, s0, a3
2702 ; CHECK-V-NEXT:    beqz a5, .LBB21_5
2703 ; CHECK-V-NEXT:    j .LBB21_6
2704 ; CHECK-V-NEXT:  .LBB21_3:
2705 ; CHECK-V-NEXT:    sltu a4, a0, a3
2706 ; CHECK-V-NEXT:    beqz s1, .LBB21_2
2707 ; CHECK-V-NEXT:  .LBB21_4: # %entry
2708 ; CHECK-V-NEXT:    slti a5, s1, 0
2709 ; CHECK-V-NEXT:    bnez a5, .LBB21_6
2710 ; CHECK-V-NEXT:  .LBB21_5: # %entry
2711 ; CHECK-V-NEXT:    mv s0, a3
2712 ; CHECK-V-NEXT:  .LBB21_6: # %entry
2713 ; CHECK-V-NEXT:    neg a6, a5
2714 ; CHECK-V-NEXT:    neg a5, a4
2715 ; CHECK-V-NEXT:    and a5, a5, a1
2716 ; CHECK-V-NEXT:    bnez a4, .LBB21_8
2717 ; CHECK-V-NEXT:  # %bb.7: # %entry
2718 ; CHECK-V-NEXT:    mv a0, a3
2719 ; CHECK-V-NEXT:  .LBB21_8: # %entry
2720 ; CHECK-V-NEXT:    and a4, a6, s1
2721 ; CHECK-V-NEXT:    slli a1, a2, 63
2722 ; CHECK-V-NEXT:    beq a5, a2, .LBB21_11
2723 ; CHECK-V-NEXT:  # %bb.9: # %entry
2724 ; CHECK-V-NEXT:    slti a3, a5, 0
2725 ; CHECK-V-NEXT:    xori a3, a3, 1
2726 ; CHECK-V-NEXT:    bne a4, a2, .LBB21_12
2727 ; CHECK-V-NEXT:  .LBB21_10:
2728 ; CHECK-V-NEXT:    sltu a2, a1, s0
2729 ; CHECK-V-NEXT:    beqz a2, .LBB21_13
2730 ; CHECK-V-NEXT:    j .LBB21_14
2731 ; CHECK-V-NEXT:  .LBB21_11:
2732 ; CHECK-V-NEXT:    sltu a3, a1, a0
2733 ; CHECK-V-NEXT:    beq a4, a2, .LBB21_10
2734 ; CHECK-V-NEXT:  .LBB21_12: # %entry
2735 ; CHECK-V-NEXT:    slti a2, a4, 0
2736 ; CHECK-V-NEXT:    xori a2, a2, 1
2737 ; CHECK-V-NEXT:    bnez a2, .LBB21_14
2738 ; CHECK-V-NEXT:  .LBB21_13: # %entry
2739 ; CHECK-V-NEXT:    mv s0, a1
2740 ; CHECK-V-NEXT:  .LBB21_14: # %entry
2741 ; CHECK-V-NEXT:    bnez a3, .LBB21_16
2742 ; CHECK-V-NEXT:  # %bb.15: # %entry
2743 ; CHECK-V-NEXT:    mv a0, a1
2744 ; CHECK-V-NEXT:  .LBB21_16: # %entry
2745 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
2746 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2747 ; CHECK-V-NEXT:    vmv.s.x v9, s0
2748 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2749 ; CHECK-V-NEXT:    csrr a0, vlenb
2750 ; CHECK-V-NEXT:    slli a0, a0, 1
2751 ; CHECK-V-NEXT:    add sp, sp, a0
2752 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
2753 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
2754 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
2755 ; CHECK-V-NEXT:    addi sp, sp, 64
2756 ; CHECK-V-NEXT:    ret
2757 entry:
2758   %conv = fptosi <2 x float> %x to <2 x i128>
2759   %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>
2760   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>
2761   %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>
2762   %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>
2763   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
2764   ret <2 x i64> %conv6
2767 define <2 x i64> @utest_f32i64(<2 x float> %x) {
2768 ; CHECK-NOV-LABEL: utest_f32i64:
2769 ; CHECK-NOV:       # %bb.0: # %entry
2770 ; CHECK-NOV-NEXT:    addi sp, sp, -32
2771 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
2772 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
2773 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
2774 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
2775 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2776 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
2777 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
2778 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
2779 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
2780 ; CHECK-NOV-NEXT:    fmv.s fs0, fa1
2781 ; CHECK-NOV-NEXT:    call __fixunssfti
2782 ; CHECK-NOV-NEXT:    mv s0, a0
2783 ; CHECK-NOV-NEXT:    mv s1, a1
2784 ; CHECK-NOV-NEXT:    fmv.s fa0, fs0
2785 ; CHECK-NOV-NEXT:    call __fixunssfti
2786 ; CHECK-NOV-NEXT:    snez a1, a1
2787 ; CHECK-NOV-NEXT:    snez a2, s1
2788 ; CHECK-NOV-NEXT:    addi a2, a2, -1
2789 ; CHECK-NOV-NEXT:    and a2, a2, s0
2790 ; CHECK-NOV-NEXT:    addi a1, a1, -1
2791 ; CHECK-NOV-NEXT:    and a1, a1, a0
2792 ; CHECK-NOV-NEXT:    mv a0, a2
2793 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
2794 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
2795 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
2796 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2797 ; CHECK-NOV-NEXT:    addi sp, sp, 32
2798 ; CHECK-NOV-NEXT:    ret
2800 ; CHECK-V-LABEL: utest_f32i64:
2801 ; CHECK-V:       # %bb.0: # %entry
2802 ; CHECK-V-NEXT:    addi sp, sp, -64
2803 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
2804 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
2805 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
2806 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
2807 ; CHECK-V-NEXT:    .cfi_offset ra, -8
2808 ; CHECK-V-NEXT:    .cfi_offset s0, -16
2809 ; CHECK-V-NEXT:    .cfi_offset s1, -24
2810 ; CHECK-V-NEXT:    csrr a0, vlenb
2811 ; CHECK-V-NEXT:    slli a0, a0, 1
2812 ; CHECK-V-NEXT:    sub sp, sp, a0
2813 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
2814 ; CHECK-V-NEXT:    addi a0, sp, 32
2815 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2816 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
2817 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
2818 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
2819 ; CHECK-V-NEXT:    call __fixunssfti
2820 ; CHECK-V-NEXT:    mv s0, a0
2821 ; CHECK-V-NEXT:    mv s1, a1
2822 ; CHECK-V-NEXT:    addi a0, sp, 32
2823 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
2824 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
2825 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
2826 ; CHECK-V-NEXT:    call __fixunssfti
2827 ; CHECK-V-NEXT:    snez a1, a1
2828 ; CHECK-V-NEXT:    snez a2, s1
2829 ; CHECK-V-NEXT:    addi a2, a2, -1
2830 ; CHECK-V-NEXT:    and a2, a2, s0
2831 ; CHECK-V-NEXT:    addi a1, a1, -1
2832 ; CHECK-V-NEXT:    and a0, a1, a0
2833 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
2834 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2835 ; CHECK-V-NEXT:    vmv.s.x v9, a2
2836 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2837 ; CHECK-V-NEXT:    csrr a0, vlenb
2838 ; CHECK-V-NEXT:    slli a0, a0, 1
2839 ; CHECK-V-NEXT:    add sp, sp, a0
2840 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
2841 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
2842 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
2843 ; CHECK-V-NEXT:    addi sp, sp, 64
2844 ; CHECK-V-NEXT:    ret
2845 entry:
2846   %conv = fptoui <2 x float> %x to <2 x i128>
2847   %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>
2848   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>
2849   %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>
2850   ret <2 x i64> %conv6
2853 define <2 x i64> @ustest_f32i64(<2 x float> %x) {
2854 ; CHECK-NOV-LABEL: ustest_f32i64:
2855 ; CHECK-NOV:       # %bb.0: # %entry
2856 ; CHECK-NOV-NEXT:    addi sp, sp, -32
2857 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
2858 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
2859 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
2860 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
2861 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2862 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
2863 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
2864 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
2865 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
2866 ; CHECK-NOV-NEXT:    fmv.s fs0, fa1
2867 ; CHECK-NOV-NEXT:    call __fixsfti
2868 ; CHECK-NOV-NEXT:    mv s0, a0
2869 ; CHECK-NOV-NEXT:    mv s1, a1
2870 ; CHECK-NOV-NEXT:    fmv.s fa0, fs0
2871 ; CHECK-NOV-NEXT:    call __fixsfti
2872 ; CHECK-NOV-NEXT:    mv a2, s1
2873 ; CHECK-NOV-NEXT:    blez s1, .LBB23_2
2874 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
2875 ; CHECK-NOV-NEXT:    li a2, 1
2876 ; CHECK-NOV-NEXT:  .LBB23_2: # %entry
2877 ; CHECK-NOV-NEXT:    slti a3, a1, 1
2878 ; CHECK-NOV-NEXT:    slti a4, s1, 1
2879 ; CHECK-NOV-NEXT:    blez a1, .LBB23_4
2880 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
2881 ; CHECK-NOV-NEXT:    li a1, 1
2882 ; CHECK-NOV-NEXT:  .LBB23_4: # %entry
2883 ; CHECK-NOV-NEXT:    neg a4, a4
2884 ; CHECK-NOV-NEXT:    neg a3, a3
2885 ; CHECK-NOV-NEXT:    and a3, a3, a0
2886 ; CHECK-NOV-NEXT:    beqz a1, .LBB23_7
2887 ; CHECK-NOV-NEXT:  # %bb.5: # %entry
2888 ; CHECK-NOV-NEXT:    sgtz a1, a1
2889 ; CHECK-NOV-NEXT:    and a4, a4, s0
2890 ; CHECK-NOV-NEXT:    bnez a2, .LBB23_8
2891 ; CHECK-NOV-NEXT:  .LBB23_6:
2892 ; CHECK-NOV-NEXT:    snez a0, a4
2893 ; CHECK-NOV-NEXT:    j .LBB23_9
2894 ; CHECK-NOV-NEXT:  .LBB23_7:
2895 ; CHECK-NOV-NEXT:    snez a1, a3
2896 ; CHECK-NOV-NEXT:    and a4, a4, s0
2897 ; CHECK-NOV-NEXT:    beqz a2, .LBB23_6
2898 ; CHECK-NOV-NEXT:  .LBB23_8: # %entry
2899 ; CHECK-NOV-NEXT:    sgtz a0, a2
2900 ; CHECK-NOV-NEXT:  .LBB23_9: # %entry
2901 ; CHECK-NOV-NEXT:    neg a0, a0
2902 ; CHECK-NOV-NEXT:    and a0, a0, a4
2903 ; CHECK-NOV-NEXT:    neg a1, a1
2904 ; CHECK-NOV-NEXT:    and a1, a1, a3
2905 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
2906 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
2907 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
2908 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2909 ; CHECK-NOV-NEXT:    addi sp, sp, 32
2910 ; CHECK-NOV-NEXT:    ret
2912 ; CHECK-V-LABEL: ustest_f32i64:
2913 ; CHECK-V:       # %bb.0: # %entry
2914 ; CHECK-V-NEXT:    addi sp, sp, -64
2915 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
2916 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
2917 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
2918 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
2919 ; CHECK-V-NEXT:    .cfi_offset ra, -8
2920 ; CHECK-V-NEXT:    .cfi_offset s0, -16
2921 ; CHECK-V-NEXT:    .cfi_offset s1, -24
2922 ; CHECK-V-NEXT:    csrr a0, vlenb
2923 ; CHECK-V-NEXT:    slli a0, a0, 1
2924 ; CHECK-V-NEXT:    sub sp, sp, a0
2925 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
2926 ; CHECK-V-NEXT:    addi a0, sp, 32
2927 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
2928 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
2929 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
2930 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
2931 ; CHECK-V-NEXT:    call __fixsfti
2932 ; CHECK-V-NEXT:    mv s0, a0
2933 ; CHECK-V-NEXT:    mv s1, a1
2934 ; CHECK-V-NEXT:    addi a0, sp, 32
2935 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
2936 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
2937 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
2938 ; CHECK-V-NEXT:    call __fixsfti
2939 ; CHECK-V-NEXT:    mv a2, s1
2940 ; CHECK-V-NEXT:    blez s1, .LBB23_2
2941 ; CHECK-V-NEXT:  # %bb.1: # %entry
2942 ; CHECK-V-NEXT:    li a2, 1
2943 ; CHECK-V-NEXT:  .LBB23_2: # %entry
2944 ; CHECK-V-NEXT:    slti a4, a1, 1
2945 ; CHECK-V-NEXT:    slti a3, s1, 1
2946 ; CHECK-V-NEXT:    blez a1, .LBB23_4
2947 ; CHECK-V-NEXT:  # %bb.3: # %entry
2948 ; CHECK-V-NEXT:    li a1, 1
2949 ; CHECK-V-NEXT:  .LBB23_4: # %entry
2950 ; CHECK-V-NEXT:    neg a3, a3
2951 ; CHECK-V-NEXT:    neg a4, a4
2952 ; CHECK-V-NEXT:    and a0, a4, a0
2953 ; CHECK-V-NEXT:    beqz a1, .LBB23_7
2954 ; CHECK-V-NEXT:  # %bb.5: # %entry
2955 ; CHECK-V-NEXT:    sgtz a1, a1
2956 ; CHECK-V-NEXT:    and a3, a3, s0
2957 ; CHECK-V-NEXT:    bnez a2, .LBB23_8
2958 ; CHECK-V-NEXT:  .LBB23_6:
2959 ; CHECK-V-NEXT:    snez a2, a3
2960 ; CHECK-V-NEXT:    j .LBB23_9
2961 ; CHECK-V-NEXT:  .LBB23_7:
2962 ; CHECK-V-NEXT:    snez a1, a0
2963 ; CHECK-V-NEXT:    and a3, a3, s0
2964 ; CHECK-V-NEXT:    beqz a2, .LBB23_6
2965 ; CHECK-V-NEXT:  .LBB23_8: # %entry
2966 ; CHECK-V-NEXT:    sgtz a2, a2
2967 ; CHECK-V-NEXT:  .LBB23_9: # %entry
2968 ; CHECK-V-NEXT:    neg a2, a2
2969 ; CHECK-V-NEXT:    and a2, a2, a3
2970 ; CHECK-V-NEXT:    neg a1, a1
2971 ; CHECK-V-NEXT:    and a0, a1, a0
2972 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
2973 ; CHECK-V-NEXT:    vmv.s.x v8, a0
2974 ; CHECK-V-NEXT:    vmv.s.x v9, a2
2975 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
2976 ; CHECK-V-NEXT:    csrr a0, vlenb
2977 ; CHECK-V-NEXT:    slli a0, a0, 1
2978 ; CHECK-V-NEXT:    add sp, sp, a0
2979 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
2980 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
2981 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
2982 ; CHECK-V-NEXT:    addi sp, sp, 64
2983 ; CHECK-V-NEXT:    ret
2984 entry:
2985   %conv = fptosi <2 x float> %x to <2 x i128>
2986   %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>
2987   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>
2988   %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer
2989   %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer
2990   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
2991   ret <2 x i64> %conv6
2994 define <2 x i64> @stest_f16i64(<2 x half> %x) {
2995 ; CHECK-NOV-LABEL: stest_f16i64:
2996 ; CHECK-NOV:       # %bb.0: # %entry
2997 ; CHECK-NOV-NEXT:    addi sp, sp, -32
2998 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
2999 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3000 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3001 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3002 ; CHECK-NOV-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
3003 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
3004 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
3005 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
3006 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
3007 ; CHECK-NOV-NEXT:    mv s2, a1
3008 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a0
3009 ; CHECK-NOV-NEXT:    call __extendhfsf2
3010 ; CHECK-NOV-NEXT:    call __fixsfti
3011 ; CHECK-NOV-NEXT:    mv s0, a0
3012 ; CHECK-NOV-NEXT:    mv s1, a1
3013 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
3014 ; CHECK-NOV-NEXT:    call __extendhfsf2
3015 ; CHECK-NOV-NEXT:    call __fixsfti
3016 ; CHECK-NOV-NEXT:    mv a2, a0
3017 ; CHECK-NOV-NEXT:    li a0, -1
3018 ; CHECK-NOV-NEXT:    srli a3, a0, 1
3019 ; CHECK-NOV-NEXT:    beqz a1, .LBB24_3
3020 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3021 ; CHECK-NOV-NEXT:    slti a4, a1, 0
3022 ; CHECK-NOV-NEXT:    bnez s1, .LBB24_4
3023 ; CHECK-NOV-NEXT:  .LBB24_2:
3024 ; CHECK-NOV-NEXT:    sltu a5, s0, a3
3025 ; CHECK-NOV-NEXT:    beqz a5, .LBB24_5
3026 ; CHECK-NOV-NEXT:    j .LBB24_6
3027 ; CHECK-NOV-NEXT:  .LBB24_3:
3028 ; CHECK-NOV-NEXT:    sltu a4, a2, a3
3029 ; CHECK-NOV-NEXT:    beqz s1, .LBB24_2
3030 ; CHECK-NOV-NEXT:  .LBB24_4: # %entry
3031 ; CHECK-NOV-NEXT:    slti a5, s1, 0
3032 ; CHECK-NOV-NEXT:    bnez a5, .LBB24_6
3033 ; CHECK-NOV-NEXT:  .LBB24_5: # %entry
3034 ; CHECK-NOV-NEXT:    mv s0, a3
3035 ; CHECK-NOV-NEXT:  .LBB24_6: # %entry
3036 ; CHECK-NOV-NEXT:    neg a6, a5
3037 ; CHECK-NOV-NEXT:    neg a5, a4
3038 ; CHECK-NOV-NEXT:    and a5, a5, a1
3039 ; CHECK-NOV-NEXT:    bnez a4, .LBB24_8
3040 ; CHECK-NOV-NEXT:  # %bb.7: # %entry
3041 ; CHECK-NOV-NEXT:    mv a2, a3
3042 ; CHECK-NOV-NEXT:  .LBB24_8: # %entry
3043 ; CHECK-NOV-NEXT:    and a4, a6, s1
3044 ; CHECK-NOV-NEXT:    slli a1, a0, 63
3045 ; CHECK-NOV-NEXT:    beq a5, a0, .LBB24_11
3046 ; CHECK-NOV-NEXT:  # %bb.9: # %entry
3047 ; CHECK-NOV-NEXT:    slti a3, a5, 0
3048 ; CHECK-NOV-NEXT:    xori a3, a3, 1
3049 ; CHECK-NOV-NEXT:    bne a4, a0, .LBB24_12
3050 ; CHECK-NOV-NEXT:  .LBB24_10:
3051 ; CHECK-NOV-NEXT:    sltu a0, a1, s0
3052 ; CHECK-NOV-NEXT:    beqz a0, .LBB24_13
3053 ; CHECK-NOV-NEXT:    j .LBB24_14
3054 ; CHECK-NOV-NEXT:  .LBB24_11:
3055 ; CHECK-NOV-NEXT:    sltu a3, a1, a2
3056 ; CHECK-NOV-NEXT:    beq a4, a0, .LBB24_10
3057 ; CHECK-NOV-NEXT:  .LBB24_12: # %entry
3058 ; CHECK-NOV-NEXT:    slti a0, a4, 0
3059 ; CHECK-NOV-NEXT:    xori a0, a0, 1
3060 ; CHECK-NOV-NEXT:    bnez a0, .LBB24_14
3061 ; CHECK-NOV-NEXT:  .LBB24_13: # %entry
3062 ; CHECK-NOV-NEXT:    mv s0, a1
3063 ; CHECK-NOV-NEXT:  .LBB24_14: # %entry
3064 ; CHECK-NOV-NEXT:    bnez a3, .LBB24_16
3065 ; CHECK-NOV-NEXT:  # %bb.15: # %entry
3066 ; CHECK-NOV-NEXT:    mv a2, a1
3067 ; CHECK-NOV-NEXT:  .LBB24_16: # %entry
3068 ; CHECK-NOV-NEXT:    mv a0, s0
3069 ; CHECK-NOV-NEXT:    mv a1, a2
3070 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3071 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3072 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3073 ; CHECK-NOV-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
3074 ; CHECK-NOV-NEXT:    addi sp, sp, 32
3075 ; CHECK-NOV-NEXT:    ret
3077 ; CHECK-V-LABEL: stest_f16i64:
3078 ; CHECK-V:       # %bb.0: # %entry
3079 ; CHECK-V-NEXT:    addi sp, sp, -32
3080 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 32
3081 ; CHECK-V-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3082 ; CHECK-V-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3083 ; CHECK-V-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3084 ; CHECK-V-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
3085 ; CHECK-V-NEXT:    .cfi_offset ra, -8
3086 ; CHECK-V-NEXT:    .cfi_offset s0, -16
3087 ; CHECK-V-NEXT:    .cfi_offset s1, -24
3088 ; CHECK-V-NEXT:    .cfi_offset s2, -32
3089 ; CHECK-V-NEXT:    mv s2, a1
3090 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
3091 ; CHECK-V-NEXT:    call __extendhfsf2
3092 ; CHECK-V-NEXT:    call __fixsfti
3093 ; CHECK-V-NEXT:    mv s0, a0
3094 ; CHECK-V-NEXT:    mv s1, a1
3095 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
3096 ; CHECK-V-NEXT:    call __extendhfsf2
3097 ; CHECK-V-NEXT:    call __fixsfti
3098 ; CHECK-V-NEXT:    li a2, -1
3099 ; CHECK-V-NEXT:    srli a3, a2, 1
3100 ; CHECK-V-NEXT:    beqz a1, .LBB24_3
3101 ; CHECK-V-NEXT:  # %bb.1: # %entry
3102 ; CHECK-V-NEXT:    slti a4, a1, 0
3103 ; CHECK-V-NEXT:    bnez s1, .LBB24_4
3104 ; CHECK-V-NEXT:  .LBB24_2:
3105 ; CHECK-V-NEXT:    sltu a5, s0, a3
3106 ; CHECK-V-NEXT:    beqz a5, .LBB24_5
3107 ; CHECK-V-NEXT:    j .LBB24_6
3108 ; CHECK-V-NEXT:  .LBB24_3:
3109 ; CHECK-V-NEXT:    sltu a4, a0, a3
3110 ; CHECK-V-NEXT:    beqz s1, .LBB24_2
3111 ; CHECK-V-NEXT:  .LBB24_4: # %entry
3112 ; CHECK-V-NEXT:    slti a5, s1, 0
3113 ; CHECK-V-NEXT:    bnez a5, .LBB24_6
3114 ; CHECK-V-NEXT:  .LBB24_5: # %entry
3115 ; CHECK-V-NEXT:    mv s0, a3
3116 ; CHECK-V-NEXT:  .LBB24_6: # %entry
3117 ; CHECK-V-NEXT:    neg a6, a5
3118 ; CHECK-V-NEXT:    neg a5, a4
3119 ; CHECK-V-NEXT:    and a5, a5, a1
3120 ; CHECK-V-NEXT:    bnez a4, .LBB24_8
3121 ; CHECK-V-NEXT:  # %bb.7: # %entry
3122 ; CHECK-V-NEXT:    mv a0, a3
3123 ; CHECK-V-NEXT:  .LBB24_8: # %entry
3124 ; CHECK-V-NEXT:    and a4, a6, s1
3125 ; CHECK-V-NEXT:    slli a1, a2, 63
3126 ; CHECK-V-NEXT:    beq a5, a2, .LBB24_11
3127 ; CHECK-V-NEXT:  # %bb.9: # %entry
3128 ; CHECK-V-NEXT:    slti a3, a5, 0
3129 ; CHECK-V-NEXT:    xori a3, a3, 1
3130 ; CHECK-V-NEXT:    bne a4, a2, .LBB24_12
3131 ; CHECK-V-NEXT:  .LBB24_10:
3132 ; CHECK-V-NEXT:    sltu a2, a1, s0
3133 ; CHECK-V-NEXT:    beqz a2, .LBB24_13
3134 ; CHECK-V-NEXT:    j .LBB24_14
3135 ; CHECK-V-NEXT:  .LBB24_11:
3136 ; CHECK-V-NEXT:    sltu a3, a1, a0
3137 ; CHECK-V-NEXT:    beq a4, a2, .LBB24_10
3138 ; CHECK-V-NEXT:  .LBB24_12: # %entry
3139 ; CHECK-V-NEXT:    slti a2, a4, 0
3140 ; CHECK-V-NEXT:    xori a2, a2, 1
3141 ; CHECK-V-NEXT:    bnez a2, .LBB24_14
3142 ; CHECK-V-NEXT:  .LBB24_13: # %entry
3143 ; CHECK-V-NEXT:    mv s0, a1
3144 ; CHECK-V-NEXT:  .LBB24_14: # %entry
3145 ; CHECK-V-NEXT:    bnez a3, .LBB24_16
3146 ; CHECK-V-NEXT:  # %bb.15: # %entry
3147 ; CHECK-V-NEXT:    mv a0, a1
3148 ; CHECK-V-NEXT:  .LBB24_16: # %entry
3149 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3150 ; CHECK-V-NEXT:    vmv.s.x v9, a0
3151 ; CHECK-V-NEXT:    vmv.s.x v8, s0
3152 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
3153 ; CHECK-V-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3154 ; CHECK-V-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3155 ; CHECK-V-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3156 ; CHECK-V-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
3157 ; CHECK-V-NEXT:    addi sp, sp, 32
3158 ; CHECK-V-NEXT:    ret
3159 entry:
3160   %conv = fptosi <2 x half> %x to <2 x i128>
3161   %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>
3162   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>
3163   %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>
3164   %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>
3165   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
3166   ret <2 x i64> %conv6
3169 define <2 x i64> @utesth_f16i64(<2 x half> %x) {
3170 ; CHECK-NOV-LABEL: utesth_f16i64:
3171 ; CHECK-NOV:       # %bb.0: # %entry
3172 ; CHECK-NOV-NEXT:    addi sp, sp, -32
3173 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
3174 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3175 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3176 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3177 ; CHECK-NOV-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
3178 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
3179 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
3180 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
3181 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
3182 ; CHECK-NOV-NEXT:    mv s0, a1
3183 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a0
3184 ; CHECK-NOV-NEXT:    call __extendhfsf2
3185 ; CHECK-NOV-NEXT:    call __fixunssfti
3186 ; CHECK-NOV-NEXT:    mv s1, a0
3187 ; CHECK-NOV-NEXT:    mv s2, a1
3188 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s0
3189 ; CHECK-NOV-NEXT:    call __extendhfsf2
3190 ; CHECK-NOV-NEXT:    call __fixunssfti
3191 ; CHECK-NOV-NEXT:    snez a1, a1
3192 ; CHECK-NOV-NEXT:    snez a2, s2
3193 ; CHECK-NOV-NEXT:    addi a2, a2, -1
3194 ; CHECK-NOV-NEXT:    and a2, a2, s1
3195 ; CHECK-NOV-NEXT:    addi a1, a1, -1
3196 ; CHECK-NOV-NEXT:    and a1, a1, a0
3197 ; CHECK-NOV-NEXT:    mv a0, a2
3198 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3199 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3200 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3201 ; CHECK-NOV-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
3202 ; CHECK-NOV-NEXT:    addi sp, sp, 32
3203 ; CHECK-NOV-NEXT:    ret
3205 ; CHECK-V-LABEL: utesth_f16i64:
3206 ; CHECK-V:       # %bb.0: # %entry
3207 ; CHECK-V-NEXT:    addi sp, sp, -32
3208 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 32
3209 ; CHECK-V-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3210 ; CHECK-V-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3211 ; CHECK-V-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3212 ; CHECK-V-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
3213 ; CHECK-V-NEXT:    .cfi_offset ra, -8
3214 ; CHECK-V-NEXT:    .cfi_offset s0, -16
3215 ; CHECK-V-NEXT:    .cfi_offset s1, -24
3216 ; CHECK-V-NEXT:    .cfi_offset s2, -32
3217 ; CHECK-V-NEXT:    mv s0, a1
3218 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
3219 ; CHECK-V-NEXT:    call __extendhfsf2
3220 ; CHECK-V-NEXT:    call __fixunssfti
3221 ; CHECK-V-NEXT:    mv s1, a0
3222 ; CHECK-V-NEXT:    mv s2, a1
3223 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
3224 ; CHECK-V-NEXT:    call __extendhfsf2
3225 ; CHECK-V-NEXT:    call __fixunssfti
3226 ; CHECK-V-NEXT:    snez a1, a1
3227 ; CHECK-V-NEXT:    snez a2, s2
3228 ; CHECK-V-NEXT:    addi a2, a2, -1
3229 ; CHECK-V-NEXT:    and a2, a2, s1
3230 ; CHECK-V-NEXT:    addi a1, a1, -1
3231 ; CHECK-V-NEXT:    and a0, a1, a0
3232 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3233 ; CHECK-V-NEXT:    vmv.s.x v9, a0
3234 ; CHECK-V-NEXT:    vmv.s.x v8, a2
3235 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
3236 ; CHECK-V-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3237 ; CHECK-V-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3238 ; CHECK-V-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3239 ; CHECK-V-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
3240 ; CHECK-V-NEXT:    addi sp, sp, 32
3241 ; CHECK-V-NEXT:    ret
3242 entry:
3243   %conv = fptoui <2 x half> %x to <2 x i128>
3244   %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>
3245   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>
3246   %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>
3247   ret <2 x i64> %conv6
3250 define <2 x i64> @ustest_f16i64(<2 x half> %x) {
3251 ; CHECK-NOV-LABEL: ustest_f16i64:
3252 ; CHECK-NOV:       # %bb.0: # %entry
3253 ; CHECK-NOV-NEXT:    addi sp, sp, -32
3254 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
3255 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3256 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3257 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3258 ; CHECK-NOV-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
3259 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
3260 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
3261 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
3262 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
3263 ; CHECK-NOV-NEXT:    mv s2, a1
3264 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a0
3265 ; CHECK-NOV-NEXT:    call __extendhfsf2
3266 ; CHECK-NOV-NEXT:    call __fixsfti
3267 ; CHECK-NOV-NEXT:    mv s0, a0
3268 ; CHECK-NOV-NEXT:    mv s1, a1
3269 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
3270 ; CHECK-NOV-NEXT:    call __extendhfsf2
3271 ; CHECK-NOV-NEXT:    call __fixsfti
3272 ; CHECK-NOV-NEXT:    mv a2, s1
3273 ; CHECK-NOV-NEXT:    blez s1, .LBB26_2
3274 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3275 ; CHECK-NOV-NEXT:    li a2, 1
3276 ; CHECK-NOV-NEXT:  .LBB26_2: # %entry
3277 ; CHECK-NOV-NEXT:    slti a3, a1, 1
3278 ; CHECK-NOV-NEXT:    slti a4, s1, 1
3279 ; CHECK-NOV-NEXT:    blez a1, .LBB26_4
3280 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
3281 ; CHECK-NOV-NEXT:    li a1, 1
3282 ; CHECK-NOV-NEXT:  .LBB26_4: # %entry
3283 ; CHECK-NOV-NEXT:    neg a4, a4
3284 ; CHECK-NOV-NEXT:    neg a3, a3
3285 ; CHECK-NOV-NEXT:    and a3, a3, a0
3286 ; CHECK-NOV-NEXT:    beqz a1, .LBB26_7
3287 ; CHECK-NOV-NEXT:  # %bb.5: # %entry
3288 ; CHECK-NOV-NEXT:    sgtz a1, a1
3289 ; CHECK-NOV-NEXT:    and a4, a4, s0
3290 ; CHECK-NOV-NEXT:    bnez a2, .LBB26_8
3291 ; CHECK-NOV-NEXT:  .LBB26_6:
3292 ; CHECK-NOV-NEXT:    snez a0, a4
3293 ; CHECK-NOV-NEXT:    j .LBB26_9
3294 ; CHECK-NOV-NEXT:  .LBB26_7:
3295 ; CHECK-NOV-NEXT:    snez a1, a3
3296 ; CHECK-NOV-NEXT:    and a4, a4, s0
3297 ; CHECK-NOV-NEXT:    beqz a2, .LBB26_6
3298 ; CHECK-NOV-NEXT:  .LBB26_8: # %entry
3299 ; CHECK-NOV-NEXT:    sgtz a0, a2
3300 ; CHECK-NOV-NEXT:  .LBB26_9: # %entry
3301 ; CHECK-NOV-NEXT:    neg a0, a0
3302 ; CHECK-NOV-NEXT:    and a0, a0, a4
3303 ; CHECK-NOV-NEXT:    neg a1, a1
3304 ; CHECK-NOV-NEXT:    and a1, a1, a3
3305 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3306 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3307 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3308 ; CHECK-NOV-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
3309 ; CHECK-NOV-NEXT:    addi sp, sp, 32
3310 ; CHECK-NOV-NEXT:    ret
3312 ; CHECK-V-LABEL: ustest_f16i64:
3313 ; CHECK-V:       # %bb.0: # %entry
3314 ; CHECK-V-NEXT:    addi sp, sp, -32
3315 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 32
3316 ; CHECK-V-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3317 ; CHECK-V-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3318 ; CHECK-V-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3319 ; CHECK-V-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
3320 ; CHECK-V-NEXT:    .cfi_offset ra, -8
3321 ; CHECK-V-NEXT:    .cfi_offset s0, -16
3322 ; CHECK-V-NEXT:    .cfi_offset s1, -24
3323 ; CHECK-V-NEXT:    .cfi_offset s2, -32
3324 ; CHECK-V-NEXT:    mv s2, a1
3325 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
3326 ; CHECK-V-NEXT:    call __extendhfsf2
3327 ; CHECK-V-NEXT:    call __fixsfti
3328 ; CHECK-V-NEXT:    mv s0, a0
3329 ; CHECK-V-NEXT:    mv s1, a1
3330 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
3331 ; CHECK-V-NEXT:    call __extendhfsf2
3332 ; CHECK-V-NEXT:    call __fixsfti
3333 ; CHECK-V-NEXT:    mv a2, s1
3334 ; CHECK-V-NEXT:    blez s1, .LBB26_2
3335 ; CHECK-V-NEXT:  # %bb.1: # %entry
3336 ; CHECK-V-NEXT:    li a2, 1
3337 ; CHECK-V-NEXT:  .LBB26_2: # %entry
3338 ; CHECK-V-NEXT:    slti a4, a1, 1
3339 ; CHECK-V-NEXT:    slti a3, s1, 1
3340 ; CHECK-V-NEXT:    blez a1, .LBB26_4
3341 ; CHECK-V-NEXT:  # %bb.3: # %entry
3342 ; CHECK-V-NEXT:    li a1, 1
3343 ; CHECK-V-NEXT:  .LBB26_4: # %entry
3344 ; CHECK-V-NEXT:    neg a3, a3
3345 ; CHECK-V-NEXT:    neg a4, a4
3346 ; CHECK-V-NEXT:    and a0, a4, a0
3347 ; CHECK-V-NEXT:    beqz a1, .LBB26_7
3348 ; CHECK-V-NEXT:  # %bb.5: # %entry
3349 ; CHECK-V-NEXT:    sgtz a1, a1
3350 ; CHECK-V-NEXT:    and a3, a3, s0
3351 ; CHECK-V-NEXT:    bnez a2, .LBB26_8
3352 ; CHECK-V-NEXT:  .LBB26_6:
3353 ; CHECK-V-NEXT:    snez a2, a3
3354 ; CHECK-V-NEXT:    j .LBB26_9
3355 ; CHECK-V-NEXT:  .LBB26_7:
3356 ; CHECK-V-NEXT:    snez a1, a0
3357 ; CHECK-V-NEXT:    and a3, a3, s0
3358 ; CHECK-V-NEXT:    beqz a2, .LBB26_6
3359 ; CHECK-V-NEXT:  .LBB26_8: # %entry
3360 ; CHECK-V-NEXT:    sgtz a2, a2
3361 ; CHECK-V-NEXT:  .LBB26_9: # %entry
3362 ; CHECK-V-NEXT:    neg a2, a2
3363 ; CHECK-V-NEXT:    and a2, a2, a3
3364 ; CHECK-V-NEXT:    neg a1, a1
3365 ; CHECK-V-NEXT:    and a0, a1, a0
3366 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3367 ; CHECK-V-NEXT:    vmv.s.x v9, a0
3368 ; CHECK-V-NEXT:    vmv.s.x v8, a2
3369 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
3370 ; CHECK-V-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3371 ; CHECK-V-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3372 ; CHECK-V-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3373 ; CHECK-V-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
3374 ; CHECK-V-NEXT:    addi sp, sp, 32
3375 ; CHECK-V-NEXT:    ret
3376 entry:
3377   %conv = fptosi <2 x half> %x to <2 x i128>
3378   %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>
3379   %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>
3380   %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer
3381   %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer
3382   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
3383   ret <2 x i64> %conv6
3388 ; i32 saturate
3390 define <2 x i32> @stest_f64i32_mm(<2 x double> %x) {
3391 ; CHECK-NOV-LABEL: stest_f64i32_mm:
3392 ; CHECK-NOV:       # %bb.0: # %entry
3393 ; CHECK-NOV-NEXT:    fcvt.l.d a1, fa1, rtz
3394 ; CHECK-NOV-NEXT:    lui a2, 524288
3395 ; CHECK-NOV-NEXT:    addiw a3, a2, -1
3396 ; CHECK-NOV-NEXT:    fcvt.l.d a0, fa0, rtz
3397 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB27_5
3398 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3399 ; CHECK-NOV-NEXT:    bge a0, a3, .LBB27_6
3400 ; CHECK-NOV-NEXT:  .LBB27_2: # %entry
3401 ; CHECK-NOV-NEXT:    bge a2, a0, .LBB27_7
3402 ; CHECK-NOV-NEXT:  .LBB27_3: # %entry
3403 ; CHECK-NOV-NEXT:    bge a2, a1, .LBB27_8
3404 ; CHECK-NOV-NEXT:  .LBB27_4: # %entry
3405 ; CHECK-NOV-NEXT:    ret
3406 ; CHECK-NOV-NEXT:  .LBB27_5: # %entry
3407 ; CHECK-NOV-NEXT:    mv a1, a3
3408 ; CHECK-NOV-NEXT:    blt a0, a3, .LBB27_2
3409 ; CHECK-NOV-NEXT:  .LBB27_6: # %entry
3410 ; CHECK-NOV-NEXT:    mv a0, a3
3411 ; CHECK-NOV-NEXT:    blt a2, a3, .LBB27_3
3412 ; CHECK-NOV-NEXT:  .LBB27_7: # %entry
3413 ; CHECK-NOV-NEXT:    lui a0, 524288
3414 ; CHECK-NOV-NEXT:    blt a2, a1, .LBB27_4
3415 ; CHECK-NOV-NEXT:  .LBB27_8: # %entry
3416 ; CHECK-NOV-NEXT:    lui a1, 524288
3417 ; CHECK-NOV-NEXT:    ret
3419 ; CHECK-V-LABEL: stest_f64i32_mm:
3420 ; CHECK-V:       # %bb.0: # %entry
3421 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3422 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
3423 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3424 ; CHECK-V-NEXT:    vnclip.wi v8, v8, 0
3425 ; CHECK-V-NEXT:    ret
3426 entry:
3427   %conv = fptosi <2 x double> %x to <2 x i64>
3428   %spec.store.select = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %conv, <2 x i64> <i64 2147483647, i64 2147483647>)
3429   %spec.store.select7 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %spec.store.select, <2 x i64> <i64 -2147483648, i64 -2147483648>)
3430   %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>
3431   ret <2 x i32> %conv6
3434 define <2 x i32> @utest_f64i32_mm(<2 x double> %x) {
3435 ; CHECK-NOV-LABEL: utest_f64i32_mm:
3436 ; CHECK-NOV:       # %bb.0: # %entry
3437 ; CHECK-NOV-NEXT:    fcvt.lu.d a0, fa0, rtz
3438 ; CHECK-NOV-NEXT:    li a2, -1
3439 ; CHECK-NOV-NEXT:    srli a2, a2, 32
3440 ; CHECK-NOV-NEXT:    fcvt.lu.d a1, fa1, rtz
3441 ; CHECK-NOV-NEXT:    bgeu a0, a2, .LBB28_3
3442 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3443 ; CHECK-NOV-NEXT:    bgeu a1, a2, .LBB28_4
3444 ; CHECK-NOV-NEXT:  .LBB28_2: # %entry
3445 ; CHECK-NOV-NEXT:    ret
3446 ; CHECK-NOV-NEXT:  .LBB28_3: # %entry
3447 ; CHECK-NOV-NEXT:    mv a0, a2
3448 ; CHECK-NOV-NEXT:    bltu a1, a2, .LBB28_2
3449 ; CHECK-NOV-NEXT:  .LBB28_4: # %entry
3450 ; CHECK-NOV-NEXT:    mv a1, a2
3451 ; CHECK-NOV-NEXT:    ret
3453 ; CHECK-V-LABEL: utest_f64i32_mm:
3454 ; CHECK-V:       # %bb.0: # %entry
3455 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3456 ; CHECK-V-NEXT:    vfcvt.rtz.xu.f.v v8, v8
3457 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3458 ; CHECK-V-NEXT:    vnclipu.wi v8, v8, 0
3459 ; CHECK-V-NEXT:    ret
3460 entry:
3461   %conv = fptoui <2 x double> %x to <2 x i64>
3462   %spec.store.select = call <2 x i64> @llvm.umin.v2i64(<2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>)
3463   %conv6 = trunc <2 x i64> %spec.store.select to <2 x i32>
3464   ret <2 x i32> %conv6
3467 define <2 x i32> @ustest_f64i32_mm(<2 x double> %x) {
3468 ; CHECK-NOV-LABEL: ustest_f64i32_mm:
3469 ; CHECK-NOV:       # %bb.0: # %entry
3470 ; CHECK-NOV-NEXT:    fcvt.l.d a1, fa1, rtz
3471 ; CHECK-NOV-NEXT:    li a2, -1
3472 ; CHECK-NOV-NEXT:    srli a2, a2, 32
3473 ; CHECK-NOV-NEXT:    fcvt.l.d a0, fa0, rtz
3474 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB29_2
3475 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3476 ; CHECK-NOV-NEXT:    mv a1, a2
3477 ; CHECK-NOV-NEXT:  .LBB29_2: # %entry
3478 ; CHECK-NOV-NEXT:    blt a0, a2, .LBB29_4
3479 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
3480 ; CHECK-NOV-NEXT:    mv a0, a2
3481 ; CHECK-NOV-NEXT:  .LBB29_4: # %entry
3482 ; CHECK-NOV-NEXT:    sgtz a2, a0
3483 ; CHECK-NOV-NEXT:    neg a2, a2
3484 ; CHECK-NOV-NEXT:    and a0, a2, a0
3485 ; CHECK-NOV-NEXT:    sgtz a2, a1
3486 ; CHECK-NOV-NEXT:    neg a2, a2
3487 ; CHECK-NOV-NEXT:    and a1, a2, a1
3488 ; CHECK-NOV-NEXT:    ret
3490 ; CHECK-V-LABEL: ustest_f64i32_mm:
3491 ; CHECK-V:       # %bb.0: # %entry
3492 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3493 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
3494 ; CHECK-V-NEXT:    li a0, -1
3495 ; CHECK-V-NEXT:    srli a0, a0, 32
3496 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
3497 ; CHECK-V-NEXT:    vmax.vx v8, v8, zero
3498 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3499 ; CHECK-V-NEXT:    vnsrl.wi v8, v8, 0
3500 ; CHECK-V-NEXT:    ret
3501 entry:
3502   %conv = fptosi <2 x double> %x to <2 x i64>
3503   %spec.store.select = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>)
3504   %spec.store.select7 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %spec.store.select, <2 x i64> zeroinitializer)
3505   %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>
3506   ret <2 x i32> %conv6
3509 define <4 x i32> @stest_f32i32_mm(<4 x float> %x) {
3510 ; CHECK-NOV-LABEL: stest_f32i32_mm:
3511 ; CHECK-NOV:       # %bb.0: # %entry
3512 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fa3, rtz
3513 ; CHECK-NOV-NEXT:    lui a3, 524288
3514 ; CHECK-NOV-NEXT:    addiw a6, a3, -1
3515 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fa2, rtz
3516 ; CHECK-NOV-NEXT:    bge a1, a6, .LBB30_10
3517 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3518 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fa1, rtz
3519 ; CHECK-NOV-NEXT:    bge a2, a6, .LBB30_11
3520 ; CHECK-NOV-NEXT:  .LBB30_2: # %entry
3521 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
3522 ; CHECK-NOV-NEXT:    bge a4, a6, .LBB30_12
3523 ; CHECK-NOV-NEXT:  .LBB30_3: # %entry
3524 ; CHECK-NOV-NEXT:    bge a5, a6, .LBB30_13
3525 ; CHECK-NOV-NEXT:  .LBB30_4: # %entry
3526 ; CHECK-NOV-NEXT:    bge a3, a5, .LBB30_14
3527 ; CHECK-NOV-NEXT:  .LBB30_5: # %entry
3528 ; CHECK-NOV-NEXT:    bge a3, a4, .LBB30_15
3529 ; CHECK-NOV-NEXT:  .LBB30_6: # %entry
3530 ; CHECK-NOV-NEXT:    bge a3, a2, .LBB30_16
3531 ; CHECK-NOV-NEXT:  .LBB30_7: # %entry
3532 ; CHECK-NOV-NEXT:    blt a3, a1, .LBB30_9
3533 ; CHECK-NOV-NEXT:  .LBB30_8: # %entry
3534 ; CHECK-NOV-NEXT:    lui a1, 524288
3535 ; CHECK-NOV-NEXT:  .LBB30_9: # %entry
3536 ; CHECK-NOV-NEXT:    sw a1, 12(a0)
3537 ; CHECK-NOV-NEXT:    sw a2, 8(a0)
3538 ; CHECK-NOV-NEXT:    sw a4, 4(a0)
3539 ; CHECK-NOV-NEXT:    sw a5, 0(a0)
3540 ; CHECK-NOV-NEXT:    ret
3541 ; CHECK-NOV-NEXT:  .LBB30_10: # %entry
3542 ; CHECK-NOV-NEXT:    mv a1, a6
3543 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fa1, rtz
3544 ; CHECK-NOV-NEXT:    blt a2, a6, .LBB30_2
3545 ; CHECK-NOV-NEXT:  .LBB30_11: # %entry
3546 ; CHECK-NOV-NEXT:    mv a2, a6
3547 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
3548 ; CHECK-NOV-NEXT:    blt a4, a6, .LBB30_3
3549 ; CHECK-NOV-NEXT:  .LBB30_12: # %entry
3550 ; CHECK-NOV-NEXT:    mv a4, a6
3551 ; CHECK-NOV-NEXT:    blt a5, a6, .LBB30_4
3552 ; CHECK-NOV-NEXT:  .LBB30_13: # %entry
3553 ; CHECK-NOV-NEXT:    mv a5, a6
3554 ; CHECK-NOV-NEXT:    blt a3, a6, .LBB30_5
3555 ; CHECK-NOV-NEXT:  .LBB30_14: # %entry
3556 ; CHECK-NOV-NEXT:    lui a5, 524288
3557 ; CHECK-NOV-NEXT:    blt a3, a4, .LBB30_6
3558 ; CHECK-NOV-NEXT:  .LBB30_15: # %entry
3559 ; CHECK-NOV-NEXT:    lui a4, 524288
3560 ; CHECK-NOV-NEXT:    blt a3, a2, .LBB30_7
3561 ; CHECK-NOV-NEXT:  .LBB30_16: # %entry
3562 ; CHECK-NOV-NEXT:    lui a2, 524288
3563 ; CHECK-NOV-NEXT:    bge a3, a1, .LBB30_8
3564 ; CHECK-NOV-NEXT:    j .LBB30_9
3566 ; CHECK-V-LABEL: stest_f32i32_mm:
3567 ; CHECK-V:       # %bb.0: # %entry
3568 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
3569 ; CHECK-V-NEXT:    vfwcvt.rtz.x.f.v v10, v8
3570 ; CHECK-V-NEXT:    vnclip.wi v8, v10, 0
3571 ; CHECK-V-NEXT:    ret
3572 entry:
3573   %conv = fptosi <4 x float> %x to <4 x i64>
3574   %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>)
3575   %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>)
3576   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
3577   ret <4 x i32> %conv6
3580 define <4 x i32> @utest_f32i32_mm(<4 x float> %x) {
3581 ; CHECK-NOV-LABEL: utest_f32i32_mm:
3582 ; CHECK-NOV:       # %bb.0: # %entry
3583 ; CHECK-NOV-NEXT:    fcvt.lu.s a1, fa0, rtz
3584 ; CHECK-NOV-NEXT:    li a3, -1
3585 ; CHECK-NOV-NEXT:    srli a3, a3, 32
3586 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fa1, rtz
3587 ; CHECK-NOV-NEXT:    bgeu a1, a3, .LBB31_6
3588 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3589 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fa2, rtz
3590 ; CHECK-NOV-NEXT:    bgeu a2, a3, .LBB31_7
3591 ; CHECK-NOV-NEXT:  .LBB31_2: # %entry
3592 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fa3, rtz
3593 ; CHECK-NOV-NEXT:    bgeu a4, a3, .LBB31_8
3594 ; CHECK-NOV-NEXT:  .LBB31_3: # %entry
3595 ; CHECK-NOV-NEXT:    bltu a5, a3, .LBB31_5
3596 ; CHECK-NOV-NEXT:  .LBB31_4: # %entry
3597 ; CHECK-NOV-NEXT:    mv a5, a3
3598 ; CHECK-NOV-NEXT:  .LBB31_5: # %entry
3599 ; CHECK-NOV-NEXT:    sw a5, 12(a0)
3600 ; CHECK-NOV-NEXT:    sw a4, 8(a0)
3601 ; CHECK-NOV-NEXT:    sw a2, 4(a0)
3602 ; CHECK-NOV-NEXT:    sw a1, 0(a0)
3603 ; CHECK-NOV-NEXT:    ret
3604 ; CHECK-NOV-NEXT:  .LBB31_6: # %entry
3605 ; CHECK-NOV-NEXT:    mv a1, a3
3606 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fa2, rtz
3607 ; CHECK-NOV-NEXT:    bltu a2, a3, .LBB31_2
3608 ; CHECK-NOV-NEXT:  .LBB31_7: # %entry
3609 ; CHECK-NOV-NEXT:    mv a2, a3
3610 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fa3, rtz
3611 ; CHECK-NOV-NEXT:    bltu a4, a3, .LBB31_3
3612 ; CHECK-NOV-NEXT:  .LBB31_8: # %entry
3613 ; CHECK-NOV-NEXT:    mv a4, a3
3614 ; CHECK-NOV-NEXT:    bgeu a5, a3, .LBB31_4
3615 ; CHECK-NOV-NEXT:    j .LBB31_5
3617 ; CHECK-V-LABEL: utest_f32i32_mm:
3618 ; CHECK-V:       # %bb.0: # %entry
3619 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
3620 ; CHECK-V-NEXT:    vfwcvt.rtz.xu.f.v v10, v8
3621 ; CHECK-V-NEXT:    vnclipu.wi v8, v10, 0
3622 ; CHECK-V-NEXT:    ret
3623 entry:
3624   %conv = fptoui <4 x float> %x to <4 x i64>
3625   %spec.store.select = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)
3626   %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>
3627   ret <4 x i32> %conv6
3630 define <4 x i32> @ustest_f32i32_mm(<4 x float> %x) {
3631 ; CHECK-NOV-LABEL: ustest_f32i32_mm:
3632 ; CHECK-NOV:       # %bb.0: # %entry
3633 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fa3, rtz
3634 ; CHECK-NOV-NEXT:    li a3, -1
3635 ; CHECK-NOV-NEXT:    srli a3, a3, 32
3636 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fa2, rtz
3637 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB32_6
3638 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3639 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fa1, rtz
3640 ; CHECK-NOV-NEXT:    bge a2, a3, .LBB32_7
3641 ; CHECK-NOV-NEXT:  .LBB32_2: # %entry
3642 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
3643 ; CHECK-NOV-NEXT:    bge a4, a3, .LBB32_8
3644 ; CHECK-NOV-NEXT:  .LBB32_3: # %entry
3645 ; CHECK-NOV-NEXT:    blt a5, a3, .LBB32_5
3646 ; CHECK-NOV-NEXT:  .LBB32_4: # %entry
3647 ; CHECK-NOV-NEXT:    mv a5, a3
3648 ; CHECK-NOV-NEXT:  .LBB32_5: # %entry
3649 ; CHECK-NOV-NEXT:    sgtz a3, a5
3650 ; CHECK-NOV-NEXT:    negw a3, a3
3651 ; CHECK-NOV-NEXT:    and a3, a3, a5
3652 ; CHECK-NOV-NEXT:    sgtz a5, a4
3653 ; CHECK-NOV-NEXT:    negw a5, a5
3654 ; CHECK-NOV-NEXT:    and a4, a5, a4
3655 ; CHECK-NOV-NEXT:    sgtz a5, a2
3656 ; CHECK-NOV-NEXT:    negw a5, a5
3657 ; CHECK-NOV-NEXT:    and a2, a5, a2
3658 ; CHECK-NOV-NEXT:    sgtz a5, a1
3659 ; CHECK-NOV-NEXT:    negw a5, a5
3660 ; CHECK-NOV-NEXT:    and a1, a5, a1
3661 ; CHECK-NOV-NEXT:    sw a1, 12(a0)
3662 ; CHECK-NOV-NEXT:    sw a2, 8(a0)
3663 ; CHECK-NOV-NEXT:    sw a4, 4(a0)
3664 ; CHECK-NOV-NEXT:    sw a3, 0(a0)
3665 ; CHECK-NOV-NEXT:    ret
3666 ; CHECK-NOV-NEXT:  .LBB32_6: # %entry
3667 ; CHECK-NOV-NEXT:    mv a1, a3
3668 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fa1, rtz
3669 ; CHECK-NOV-NEXT:    blt a2, a3, .LBB32_2
3670 ; CHECK-NOV-NEXT:  .LBB32_7: # %entry
3671 ; CHECK-NOV-NEXT:    mv a2, a3
3672 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fa0, rtz
3673 ; CHECK-NOV-NEXT:    blt a4, a3, .LBB32_3
3674 ; CHECK-NOV-NEXT:  .LBB32_8: # %entry
3675 ; CHECK-NOV-NEXT:    mv a4, a3
3676 ; CHECK-NOV-NEXT:    bge a5, a3, .LBB32_4
3677 ; CHECK-NOV-NEXT:    j .LBB32_5
3679 ; CHECK-V-LABEL: ustest_f32i32_mm:
3680 ; CHECK-V:       # %bb.0: # %entry
3681 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
3682 ; CHECK-V-NEXT:    vfwcvt.rtz.x.f.v v10, v8
3683 ; CHECK-V-NEXT:    li a0, -1
3684 ; CHECK-V-NEXT:    srli a0, a0, 32
3685 ; CHECK-V-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
3686 ; CHECK-V-NEXT:    vmin.vx v8, v10, a0
3687 ; CHECK-V-NEXT:    vmax.vx v10, v8, zero
3688 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3689 ; CHECK-V-NEXT:    vnsrl.wi v8, v10, 0
3690 ; CHECK-V-NEXT:    ret
3691 entry:
3692   %conv = fptosi <4 x float> %x to <4 x i64>
3693   %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)
3694   %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> zeroinitializer)
3695   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
3696   ret <4 x i32> %conv6
3699 define <4 x i32> @stest_f16i32_mm(<4 x half> %x) {
3700 ; CHECK-NOV-LABEL: stest_f16i32_mm:
3701 ; CHECK-NOV:       # %bb.0: # %entry
3702 ; CHECK-NOV-NEXT:    addi sp, sp, -64
3703 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 64
3704 ; CHECK-NOV-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
3705 ; CHECK-NOV-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
3706 ; CHECK-NOV-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
3707 ; CHECK-NOV-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
3708 ; CHECK-NOV-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
3709 ; CHECK-NOV-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
3710 ; CHECK-NOV-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
3711 ; CHECK-NOV-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
3712 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
3713 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
3714 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
3715 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
3716 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
3717 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -48
3718 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -56
3719 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -64
3720 ; CHECK-NOV-NEXT:    lhu s1, 24(a1)
3721 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
3722 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
3723 ; CHECK-NOV-NEXT:    lhu a1, 16(a1)
3724 ; CHECK-NOV-NEXT:    mv s0, a0
3725 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
3726 ; CHECK-NOV-NEXT:    call __extendhfsf2
3727 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
3728 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
3729 ; CHECK-NOV-NEXT:    call __extendhfsf2
3730 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
3731 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
3732 ; CHECK-NOV-NEXT:    call __extendhfsf2
3733 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
3734 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
3735 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs2, rtz
3736 ; CHECK-NOV-NEXT:    call __extendhfsf2
3737 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
3738 ; CHECK-NOV-NEXT:    lui a1, 524288
3739 ; CHECK-NOV-NEXT:    addiw a4, a1, -1
3740 ; CHECK-NOV-NEXT:    bge a0, a4, .LBB33_10
3741 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3742 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs1, rtz
3743 ; CHECK-NOV-NEXT:    bge s1, a4, .LBB33_11
3744 ; CHECK-NOV-NEXT:  .LBB33_2: # %entry
3745 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
3746 ; CHECK-NOV-NEXT:    bge a2, a4, .LBB33_12
3747 ; CHECK-NOV-NEXT:  .LBB33_3: # %entry
3748 ; CHECK-NOV-NEXT:    bge a3, a4, .LBB33_13
3749 ; CHECK-NOV-NEXT:  .LBB33_4: # %entry
3750 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB33_14
3751 ; CHECK-NOV-NEXT:  .LBB33_5: # %entry
3752 ; CHECK-NOV-NEXT:    bge a1, a2, .LBB33_15
3753 ; CHECK-NOV-NEXT:  .LBB33_6: # %entry
3754 ; CHECK-NOV-NEXT:    bge a1, s1, .LBB33_16
3755 ; CHECK-NOV-NEXT:  .LBB33_7: # %entry
3756 ; CHECK-NOV-NEXT:    blt a1, a0, .LBB33_9
3757 ; CHECK-NOV-NEXT:  .LBB33_8: # %entry
3758 ; CHECK-NOV-NEXT:    lui a0, 524288
3759 ; CHECK-NOV-NEXT:  .LBB33_9: # %entry
3760 ; CHECK-NOV-NEXT:    sw a0, 12(s0)
3761 ; CHECK-NOV-NEXT:    sw s1, 8(s0)
3762 ; CHECK-NOV-NEXT:    sw a2, 4(s0)
3763 ; CHECK-NOV-NEXT:    sw a3, 0(s0)
3764 ; CHECK-NOV-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
3765 ; CHECK-NOV-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
3766 ; CHECK-NOV-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
3767 ; CHECK-NOV-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
3768 ; CHECK-NOV-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
3769 ; CHECK-NOV-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
3770 ; CHECK-NOV-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
3771 ; CHECK-NOV-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
3772 ; CHECK-NOV-NEXT:    addi sp, sp, 64
3773 ; CHECK-NOV-NEXT:    ret
3774 ; CHECK-NOV-NEXT:  .LBB33_10: # %entry
3775 ; CHECK-NOV-NEXT:    mv a0, a4
3776 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs1, rtz
3777 ; CHECK-NOV-NEXT:    blt s1, a4, .LBB33_2
3778 ; CHECK-NOV-NEXT:  .LBB33_11: # %entry
3779 ; CHECK-NOV-NEXT:    mv s1, a4
3780 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
3781 ; CHECK-NOV-NEXT:    blt a2, a4, .LBB33_3
3782 ; CHECK-NOV-NEXT:  .LBB33_12: # %entry
3783 ; CHECK-NOV-NEXT:    mv a2, a4
3784 ; CHECK-NOV-NEXT:    blt a3, a4, .LBB33_4
3785 ; CHECK-NOV-NEXT:  .LBB33_13: # %entry
3786 ; CHECK-NOV-NEXT:    mv a3, a4
3787 ; CHECK-NOV-NEXT:    blt a1, a4, .LBB33_5
3788 ; CHECK-NOV-NEXT:  .LBB33_14: # %entry
3789 ; CHECK-NOV-NEXT:    lui a3, 524288
3790 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB33_6
3791 ; CHECK-NOV-NEXT:  .LBB33_15: # %entry
3792 ; CHECK-NOV-NEXT:    lui a2, 524288
3793 ; CHECK-NOV-NEXT:    blt a1, s1, .LBB33_7
3794 ; CHECK-NOV-NEXT:  .LBB33_16: # %entry
3795 ; CHECK-NOV-NEXT:    lui s1, 524288
3796 ; CHECK-NOV-NEXT:    bge a1, a0, .LBB33_8
3797 ; CHECK-NOV-NEXT:    j .LBB33_9
3799 ; CHECK-V-LABEL: stest_f16i32_mm:
3800 ; CHECK-V:       # %bb.0: # %entry
3801 ; CHECK-V-NEXT:    addi sp, sp, -48
3802 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 48
3803 ; CHECK-V-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
3804 ; CHECK-V-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
3805 ; CHECK-V-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
3806 ; CHECK-V-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
3807 ; CHECK-V-NEXT:    .cfi_offset ra, -8
3808 ; CHECK-V-NEXT:    .cfi_offset s0, -16
3809 ; CHECK-V-NEXT:    .cfi_offset s1, -24
3810 ; CHECK-V-NEXT:    .cfi_offset s2, -32
3811 ; CHECK-V-NEXT:    csrr a1, vlenb
3812 ; CHECK-V-NEXT:    slli a1, a1, 2
3813 ; CHECK-V-NEXT:    sub sp, sp, a1
3814 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 4 * vlenb
3815 ; CHECK-V-NEXT:    lhu s0, 0(a0)
3816 ; CHECK-V-NEXT:    lhu s1, 8(a0)
3817 ; CHECK-V-NEXT:    lhu s2, 16(a0)
3818 ; CHECK-V-NEXT:    lhu a0, 24(a0)
3819 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
3820 ; CHECK-V-NEXT:    call __extendhfsf2
3821 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
3822 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
3823 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
3824 ; CHECK-V-NEXT:    vmv.s.x v8, a0
3825 ; CHECK-V-NEXT:    addi a0, sp, 16
3826 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
3827 ; CHECK-V-NEXT:    call __extendhfsf2
3828 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
3829 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3830 ; CHECK-V-NEXT:    vmv.s.x v8, a0
3831 ; CHECK-V-NEXT:    addi a0, sp, 16
3832 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
3833 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
3834 ; CHECK-V-NEXT:    csrr a0, vlenb
3835 ; CHECK-V-NEXT:    add a0, sp, a0
3836 ; CHECK-V-NEXT:    addi a0, a0, 16
3837 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
3838 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
3839 ; CHECK-V-NEXT:    call __extendhfsf2
3840 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
3841 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
3842 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
3843 ; CHECK-V-NEXT:    vmv.s.x v8, a0
3844 ; CHECK-V-NEXT:    addi a0, sp, 16
3845 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
3846 ; CHECK-V-NEXT:    call __extendhfsf2
3847 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
3848 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3849 ; CHECK-V-NEXT:    vmv.s.x v10, a0
3850 ; CHECK-V-NEXT:    addi a0, sp, 16
3851 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
3852 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
3853 ; CHECK-V-NEXT:    csrr a0, vlenb
3854 ; CHECK-V-NEXT:    add a0, sp, a0
3855 ; CHECK-V-NEXT:    addi a0, a0, 16
3856 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
3857 ; CHECK-V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
3858 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
3859 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3860 ; CHECK-V-NEXT:    vnclip.wi v8, v10, 0
3861 ; CHECK-V-NEXT:    csrr a0, vlenb
3862 ; CHECK-V-NEXT:    slli a0, a0, 2
3863 ; CHECK-V-NEXT:    add sp, sp, a0
3864 ; CHECK-V-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
3865 ; CHECK-V-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
3866 ; CHECK-V-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
3867 ; CHECK-V-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
3868 ; CHECK-V-NEXT:    addi sp, sp, 48
3869 ; CHECK-V-NEXT:    ret
3870 entry:
3871   %conv = fptosi <4 x half> %x to <4 x i64>
3872   %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>)
3873   %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>)
3874   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
3875   ret <4 x i32> %conv6
3878 define <4 x i32> @utesth_f16i32_mm(<4 x half> %x) {
3879 ; CHECK-NOV-LABEL: utesth_f16i32_mm:
3880 ; CHECK-NOV:       # %bb.0: # %entry
3881 ; CHECK-NOV-NEXT:    addi sp, sp, -64
3882 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 64
3883 ; CHECK-NOV-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
3884 ; CHECK-NOV-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
3885 ; CHECK-NOV-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
3886 ; CHECK-NOV-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
3887 ; CHECK-NOV-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
3888 ; CHECK-NOV-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
3889 ; CHECK-NOV-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
3890 ; CHECK-NOV-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
3891 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
3892 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
3893 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
3894 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
3895 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
3896 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -48
3897 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -56
3898 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -64
3899 ; CHECK-NOV-NEXT:    lhu s1, 0(a1)
3900 ; CHECK-NOV-NEXT:    lhu s2, 24(a1)
3901 ; CHECK-NOV-NEXT:    lhu s3, 16(a1)
3902 ; CHECK-NOV-NEXT:    lhu a1, 8(a1)
3903 ; CHECK-NOV-NEXT:    mv s0, a0
3904 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
3905 ; CHECK-NOV-NEXT:    call __extendhfsf2
3906 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
3907 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
3908 ; CHECK-NOV-NEXT:    call __extendhfsf2
3909 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
3910 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
3911 ; CHECK-NOV-NEXT:    call __extendhfsf2
3912 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
3913 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
3914 ; CHECK-NOV-NEXT:    fcvt.lu.s s1, fs2, rtz
3915 ; CHECK-NOV-NEXT:    call __extendhfsf2
3916 ; CHECK-NOV-NEXT:    fcvt.lu.s a0, fa0, rtz
3917 ; CHECK-NOV-NEXT:    li a1, -1
3918 ; CHECK-NOV-NEXT:    srli a1, a1, 32
3919 ; CHECK-NOV-NEXT:    bgeu a0, a1, .LBB34_6
3920 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
3921 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs1, rtz
3922 ; CHECK-NOV-NEXT:    bgeu s1, a1, .LBB34_7
3923 ; CHECK-NOV-NEXT:  .LBB34_2: # %entry
3924 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs0, rtz
3925 ; CHECK-NOV-NEXT:    bgeu a2, a1, .LBB34_8
3926 ; CHECK-NOV-NEXT:  .LBB34_3: # %entry
3927 ; CHECK-NOV-NEXT:    bltu a3, a1, .LBB34_5
3928 ; CHECK-NOV-NEXT:  .LBB34_4: # %entry
3929 ; CHECK-NOV-NEXT:    mv a3, a1
3930 ; CHECK-NOV-NEXT:  .LBB34_5: # %entry
3931 ; CHECK-NOV-NEXT:    sw a3, 12(s0)
3932 ; CHECK-NOV-NEXT:    sw a2, 8(s0)
3933 ; CHECK-NOV-NEXT:    sw s1, 4(s0)
3934 ; CHECK-NOV-NEXT:    sw a0, 0(s0)
3935 ; CHECK-NOV-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
3936 ; CHECK-NOV-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
3937 ; CHECK-NOV-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
3938 ; CHECK-NOV-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
3939 ; CHECK-NOV-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
3940 ; CHECK-NOV-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
3941 ; CHECK-NOV-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
3942 ; CHECK-NOV-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
3943 ; CHECK-NOV-NEXT:    addi sp, sp, 64
3944 ; CHECK-NOV-NEXT:    ret
3945 ; CHECK-NOV-NEXT:  .LBB34_6: # %entry
3946 ; CHECK-NOV-NEXT:    mv a0, a1
3947 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs1, rtz
3948 ; CHECK-NOV-NEXT:    bltu s1, a1, .LBB34_2
3949 ; CHECK-NOV-NEXT:  .LBB34_7: # %entry
3950 ; CHECK-NOV-NEXT:    mv s1, a1
3951 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs0, rtz
3952 ; CHECK-NOV-NEXT:    bltu a2, a1, .LBB34_3
3953 ; CHECK-NOV-NEXT:  .LBB34_8: # %entry
3954 ; CHECK-NOV-NEXT:    mv a2, a1
3955 ; CHECK-NOV-NEXT:    bgeu a3, a1, .LBB34_4
3956 ; CHECK-NOV-NEXT:    j .LBB34_5
3958 ; CHECK-V-LABEL: utesth_f16i32_mm:
3959 ; CHECK-V:       # %bb.0: # %entry
3960 ; CHECK-V-NEXT:    addi sp, sp, -48
3961 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 48
3962 ; CHECK-V-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
3963 ; CHECK-V-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
3964 ; CHECK-V-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
3965 ; CHECK-V-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
3966 ; CHECK-V-NEXT:    .cfi_offset ra, -8
3967 ; CHECK-V-NEXT:    .cfi_offset s0, -16
3968 ; CHECK-V-NEXT:    .cfi_offset s1, -24
3969 ; CHECK-V-NEXT:    .cfi_offset s2, -32
3970 ; CHECK-V-NEXT:    csrr a1, vlenb
3971 ; CHECK-V-NEXT:    slli a1, a1, 2
3972 ; CHECK-V-NEXT:    sub sp, sp, a1
3973 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 4 * vlenb
3974 ; CHECK-V-NEXT:    lhu s0, 0(a0)
3975 ; CHECK-V-NEXT:    lhu s1, 8(a0)
3976 ; CHECK-V-NEXT:    lhu s2, 16(a0)
3977 ; CHECK-V-NEXT:    lhu a0, 24(a0)
3978 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
3979 ; CHECK-V-NEXT:    call __extendhfsf2
3980 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
3981 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
3982 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
3983 ; CHECK-V-NEXT:    vmv.s.x v8, a0
3984 ; CHECK-V-NEXT:    addi a0, sp, 16
3985 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
3986 ; CHECK-V-NEXT:    call __extendhfsf2
3987 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
3988 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
3989 ; CHECK-V-NEXT:    vmv.s.x v8, a0
3990 ; CHECK-V-NEXT:    addi a0, sp, 16
3991 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
3992 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
3993 ; CHECK-V-NEXT:    csrr a0, vlenb
3994 ; CHECK-V-NEXT:    add a0, sp, a0
3995 ; CHECK-V-NEXT:    addi a0, a0, 16
3996 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
3997 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
3998 ; CHECK-V-NEXT:    call __extendhfsf2
3999 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
4000 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
4001 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
4002 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4003 ; CHECK-V-NEXT:    addi a0, sp, 16
4004 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4005 ; CHECK-V-NEXT:    call __extendhfsf2
4006 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
4007 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
4008 ; CHECK-V-NEXT:    vmv.s.x v10, a0
4009 ; CHECK-V-NEXT:    addi a0, sp, 16
4010 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
4011 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
4012 ; CHECK-V-NEXT:    csrr a0, vlenb
4013 ; CHECK-V-NEXT:    add a0, sp, a0
4014 ; CHECK-V-NEXT:    addi a0, a0, 16
4015 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
4016 ; CHECK-V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
4017 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
4018 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4019 ; CHECK-V-NEXT:    vnclipu.wi v8, v10, 0
4020 ; CHECK-V-NEXT:    csrr a0, vlenb
4021 ; CHECK-V-NEXT:    slli a0, a0, 2
4022 ; CHECK-V-NEXT:    add sp, sp, a0
4023 ; CHECK-V-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
4024 ; CHECK-V-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
4025 ; CHECK-V-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
4026 ; CHECK-V-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
4027 ; CHECK-V-NEXT:    addi sp, sp, 48
4028 ; CHECK-V-NEXT:    ret
4029 entry:
4030   %conv = fptoui <4 x half> %x to <4 x i64>
4031   %spec.store.select = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)
4032   %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>
4033   ret <4 x i32> %conv6
4036 define <4 x i32> @ustest_f16i32_mm(<4 x half> %x) {
4037 ; CHECK-NOV-LABEL: ustest_f16i32_mm:
4038 ; CHECK-NOV:       # %bb.0: # %entry
4039 ; CHECK-NOV-NEXT:    addi sp, sp, -64
4040 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 64
4041 ; CHECK-NOV-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
4042 ; CHECK-NOV-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
4043 ; CHECK-NOV-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
4044 ; CHECK-NOV-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
4045 ; CHECK-NOV-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
4046 ; CHECK-NOV-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
4047 ; CHECK-NOV-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
4048 ; CHECK-NOV-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
4049 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
4050 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
4051 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
4052 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
4053 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
4054 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -48
4055 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -56
4056 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -64
4057 ; CHECK-NOV-NEXT:    lhu s1, 24(a1)
4058 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
4059 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
4060 ; CHECK-NOV-NEXT:    lhu a1, 16(a1)
4061 ; CHECK-NOV-NEXT:    mv s0, a0
4062 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
4063 ; CHECK-NOV-NEXT:    call __extendhfsf2
4064 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
4065 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
4066 ; CHECK-NOV-NEXT:    call __extendhfsf2
4067 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
4068 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
4069 ; CHECK-NOV-NEXT:    call __extendhfsf2
4070 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
4071 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
4072 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs2, rtz
4073 ; CHECK-NOV-NEXT:    call __extendhfsf2
4074 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
4075 ; CHECK-NOV-NEXT:    li a2, -1
4076 ; CHECK-NOV-NEXT:    srli a2, a2, 32
4077 ; CHECK-NOV-NEXT:    bge a0, a2, .LBB35_6
4078 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4079 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs1, rtz
4080 ; CHECK-NOV-NEXT:    bge s1, a2, .LBB35_7
4081 ; CHECK-NOV-NEXT:  .LBB35_2: # %entry
4082 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
4083 ; CHECK-NOV-NEXT:    bge a1, a2, .LBB35_8
4084 ; CHECK-NOV-NEXT:  .LBB35_3: # %entry
4085 ; CHECK-NOV-NEXT:    blt a3, a2, .LBB35_5
4086 ; CHECK-NOV-NEXT:  .LBB35_4: # %entry
4087 ; CHECK-NOV-NEXT:    mv a3, a2
4088 ; CHECK-NOV-NEXT:  .LBB35_5: # %entry
4089 ; CHECK-NOV-NEXT:    sgtz a2, a3
4090 ; CHECK-NOV-NEXT:    negw a2, a2
4091 ; CHECK-NOV-NEXT:    and a2, a2, a3
4092 ; CHECK-NOV-NEXT:    sgtz a3, a1
4093 ; CHECK-NOV-NEXT:    negw a3, a3
4094 ; CHECK-NOV-NEXT:    and a1, a3, a1
4095 ; CHECK-NOV-NEXT:    sgtz a3, s1
4096 ; CHECK-NOV-NEXT:    negw a3, a3
4097 ; CHECK-NOV-NEXT:    and a3, a3, s1
4098 ; CHECK-NOV-NEXT:    sgtz a4, a0
4099 ; CHECK-NOV-NEXT:    negw a4, a4
4100 ; CHECK-NOV-NEXT:    and a0, a4, a0
4101 ; CHECK-NOV-NEXT:    sw a0, 12(s0)
4102 ; CHECK-NOV-NEXT:    sw a3, 8(s0)
4103 ; CHECK-NOV-NEXT:    sw a1, 4(s0)
4104 ; CHECK-NOV-NEXT:    sw a2, 0(s0)
4105 ; CHECK-NOV-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
4106 ; CHECK-NOV-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
4107 ; CHECK-NOV-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
4108 ; CHECK-NOV-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
4109 ; CHECK-NOV-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
4110 ; CHECK-NOV-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
4111 ; CHECK-NOV-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
4112 ; CHECK-NOV-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
4113 ; CHECK-NOV-NEXT:    addi sp, sp, 64
4114 ; CHECK-NOV-NEXT:    ret
4115 ; CHECK-NOV-NEXT:  .LBB35_6: # %entry
4116 ; CHECK-NOV-NEXT:    mv a0, a2
4117 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs1, rtz
4118 ; CHECK-NOV-NEXT:    blt s1, a2, .LBB35_2
4119 ; CHECK-NOV-NEXT:  .LBB35_7: # %entry
4120 ; CHECK-NOV-NEXT:    mv s1, a2
4121 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs0, rtz
4122 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB35_3
4123 ; CHECK-NOV-NEXT:  .LBB35_8: # %entry
4124 ; CHECK-NOV-NEXT:    mv a1, a2
4125 ; CHECK-NOV-NEXT:    bge a3, a2, .LBB35_4
4126 ; CHECK-NOV-NEXT:    j .LBB35_5
4128 ; CHECK-V-LABEL: ustest_f16i32_mm:
4129 ; CHECK-V:       # %bb.0: # %entry
4130 ; CHECK-V-NEXT:    addi sp, sp, -48
4131 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 48
4132 ; CHECK-V-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
4133 ; CHECK-V-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
4134 ; CHECK-V-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
4135 ; CHECK-V-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
4136 ; CHECK-V-NEXT:    .cfi_offset ra, -8
4137 ; CHECK-V-NEXT:    .cfi_offset s0, -16
4138 ; CHECK-V-NEXT:    .cfi_offset s1, -24
4139 ; CHECK-V-NEXT:    .cfi_offset s2, -32
4140 ; CHECK-V-NEXT:    csrr a1, vlenb
4141 ; CHECK-V-NEXT:    slli a1, a1, 2
4142 ; CHECK-V-NEXT:    sub sp, sp, a1
4143 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 4 * vlenb
4144 ; CHECK-V-NEXT:    lhu s0, 0(a0)
4145 ; CHECK-V-NEXT:    lhu s1, 8(a0)
4146 ; CHECK-V-NEXT:    lhu s2, 16(a0)
4147 ; CHECK-V-NEXT:    lhu a0, 24(a0)
4148 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
4149 ; CHECK-V-NEXT:    call __extendhfsf2
4150 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4151 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
4152 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
4153 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4154 ; CHECK-V-NEXT:    addi a0, sp, 16
4155 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4156 ; CHECK-V-NEXT:    call __extendhfsf2
4157 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4158 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
4159 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4160 ; CHECK-V-NEXT:    addi a0, sp, 16
4161 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
4162 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
4163 ; CHECK-V-NEXT:    csrr a0, vlenb
4164 ; CHECK-V-NEXT:    add a0, sp, a0
4165 ; CHECK-V-NEXT:    addi a0, a0, 16
4166 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
4167 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
4168 ; CHECK-V-NEXT:    call __extendhfsf2
4169 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4170 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
4171 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
4172 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4173 ; CHECK-V-NEXT:    addi a0, sp, 16
4174 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4175 ; CHECK-V-NEXT:    call __extendhfsf2
4176 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4177 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
4178 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4179 ; CHECK-V-NEXT:    addi a0, sp, 16
4180 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
4181 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
4182 ; CHECK-V-NEXT:    csrr a0, vlenb
4183 ; CHECK-V-NEXT:    add a0, sp, a0
4184 ; CHECK-V-NEXT:    addi a0, a0, 16
4185 ; CHECK-V-NEXT:    vl2r.v v10, (a0) # Unknown-size Folded Reload
4186 ; CHECK-V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
4187 ; CHECK-V-NEXT:    vslideup.vi v8, v10, 2
4188 ; CHECK-V-NEXT:    li a0, -1
4189 ; CHECK-V-NEXT:    srli a0, a0, 32
4190 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
4191 ; CHECK-V-NEXT:    vmax.vx v10, v8, zero
4192 ; CHECK-V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4193 ; CHECK-V-NEXT:    vnsrl.wi v8, v10, 0
4194 ; CHECK-V-NEXT:    csrr a0, vlenb
4195 ; CHECK-V-NEXT:    slli a0, a0, 2
4196 ; CHECK-V-NEXT:    add sp, sp, a0
4197 ; CHECK-V-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
4198 ; CHECK-V-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
4199 ; CHECK-V-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
4200 ; CHECK-V-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
4201 ; CHECK-V-NEXT:    addi sp, sp, 48
4202 ; CHECK-V-NEXT:    ret
4203 entry:
4204   %conv = fptosi <4 x half> %x to <4 x i64>
4205   %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)
4206   %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> zeroinitializer)
4207   %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>
4208   ret <4 x i32> %conv6
4211 ; i16 saturate
4213 define <2 x i16> @stest_f64i16_mm(<2 x double> %x) {
4214 ; CHECK-NOV-LABEL: stest_f64i16_mm:
4215 ; CHECK-NOV:       # %bb.0: # %entry
4216 ; CHECK-NOV-NEXT:    fcvt.w.d a1, fa1, rtz
4217 ; CHECK-NOV-NEXT:    lui a2, 8
4218 ; CHECK-NOV-NEXT:    addiw a2, a2, -1
4219 ; CHECK-NOV-NEXT:    fcvt.w.d a0, fa0, rtz
4220 ; CHECK-NOV-NEXT:    bge a1, a2, .LBB36_5
4221 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4222 ; CHECK-NOV-NEXT:    bge a0, a2, .LBB36_6
4223 ; CHECK-NOV-NEXT:  .LBB36_2: # %entry
4224 ; CHECK-NOV-NEXT:    lui a2, 1048568
4225 ; CHECK-NOV-NEXT:    bge a2, a0, .LBB36_7
4226 ; CHECK-NOV-NEXT:  .LBB36_3: # %entry
4227 ; CHECK-NOV-NEXT:    bge a2, a1, .LBB36_8
4228 ; CHECK-NOV-NEXT:  .LBB36_4: # %entry
4229 ; CHECK-NOV-NEXT:    ret
4230 ; CHECK-NOV-NEXT:  .LBB36_5: # %entry
4231 ; CHECK-NOV-NEXT:    mv a1, a2
4232 ; CHECK-NOV-NEXT:    blt a0, a2, .LBB36_2
4233 ; CHECK-NOV-NEXT:  .LBB36_6: # %entry
4234 ; CHECK-NOV-NEXT:    mv a0, a2
4235 ; CHECK-NOV-NEXT:    lui a2, 1048568
4236 ; CHECK-NOV-NEXT:    blt a2, a0, .LBB36_3
4237 ; CHECK-NOV-NEXT:  .LBB36_7: # %entry
4238 ; CHECK-NOV-NEXT:    lui a0, 1048568
4239 ; CHECK-NOV-NEXT:    blt a2, a1, .LBB36_4
4240 ; CHECK-NOV-NEXT:  .LBB36_8: # %entry
4241 ; CHECK-NOV-NEXT:    lui a1, 1048568
4242 ; CHECK-NOV-NEXT:    ret
4244 ; CHECK-V-LABEL: stest_f64i16_mm:
4245 ; CHECK-V:       # %bb.0: # %entry
4246 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4247 ; CHECK-V-NEXT:    vfncvt.rtz.x.f.w v9, v8
4248 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4249 ; CHECK-V-NEXT:    vnclip.wi v8, v9, 0
4250 ; CHECK-V-NEXT:    ret
4251 entry:
4252   %conv = fptosi <2 x double> %x to <2 x i32>
4253   %spec.store.select = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %conv, <2 x i32> <i32 32767, i32 32767>)
4254   %spec.store.select7 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %spec.store.select, <2 x i32> <i32 -32768, i32 -32768>)
4255   %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>
4256   ret <2 x i16> %conv6
4259 define <2 x i16> @utest_f64i16_mm(<2 x double> %x) {
4260 ; CHECK-NOV-LABEL: utest_f64i16_mm:
4261 ; CHECK-NOV:       # %bb.0: # %entry
4262 ; CHECK-NOV-NEXT:    fcvt.wu.d a0, fa0, rtz
4263 ; CHECK-NOV-NEXT:    lui a2, 16
4264 ; CHECK-NOV-NEXT:    addiw a2, a2, -1
4265 ; CHECK-NOV-NEXT:    fcvt.wu.d a1, fa1, rtz
4266 ; CHECK-NOV-NEXT:    bgeu a0, a2, .LBB37_3
4267 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4268 ; CHECK-NOV-NEXT:    bgeu a1, a2, .LBB37_4
4269 ; CHECK-NOV-NEXT:  .LBB37_2: # %entry
4270 ; CHECK-NOV-NEXT:    ret
4271 ; CHECK-NOV-NEXT:  .LBB37_3: # %entry
4272 ; CHECK-NOV-NEXT:    mv a0, a2
4273 ; CHECK-NOV-NEXT:    bltu a1, a2, .LBB37_2
4274 ; CHECK-NOV-NEXT:  .LBB37_4: # %entry
4275 ; CHECK-NOV-NEXT:    mv a1, a2
4276 ; CHECK-NOV-NEXT:    ret
4278 ; CHECK-V-LABEL: utest_f64i16_mm:
4279 ; CHECK-V:       # %bb.0: # %entry
4280 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4281 ; CHECK-V-NEXT:    vfncvt.rtz.xu.f.w v9, v8
4282 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4283 ; CHECK-V-NEXT:    vnclipu.wi v8, v9, 0
4284 ; CHECK-V-NEXT:    ret
4285 entry:
4286   %conv = fptoui <2 x double> %x to <2 x i32>
4287   %spec.store.select = call <2 x i32> @llvm.umin.v2i32(<2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>)
4288   %conv6 = trunc <2 x i32> %spec.store.select to <2 x i16>
4289   ret <2 x i16> %conv6
4292 define <2 x i16> @ustest_f64i16_mm(<2 x double> %x) {
4293 ; CHECK-NOV-LABEL: ustest_f64i16_mm:
4294 ; CHECK-NOV:       # %bb.0: # %entry
4295 ; CHECK-NOV-NEXT:    fcvt.w.d a1, fa1, rtz
4296 ; CHECK-NOV-NEXT:    lui a2, 16
4297 ; CHECK-NOV-NEXT:    addiw a2, a2, -1
4298 ; CHECK-NOV-NEXT:    fcvt.w.d a0, fa0, rtz
4299 ; CHECK-NOV-NEXT:    blt a1, a2, .LBB38_2
4300 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4301 ; CHECK-NOV-NEXT:    mv a1, a2
4302 ; CHECK-NOV-NEXT:  .LBB38_2: # %entry
4303 ; CHECK-NOV-NEXT:    blt a0, a2, .LBB38_4
4304 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
4305 ; CHECK-NOV-NEXT:    mv a0, a2
4306 ; CHECK-NOV-NEXT:  .LBB38_4: # %entry
4307 ; CHECK-NOV-NEXT:    sgtz a2, a0
4308 ; CHECK-NOV-NEXT:    neg a2, a2
4309 ; CHECK-NOV-NEXT:    and a0, a2, a0
4310 ; CHECK-NOV-NEXT:    sgtz a2, a1
4311 ; CHECK-NOV-NEXT:    neg a2, a2
4312 ; CHECK-NOV-NEXT:    and a1, a2, a1
4313 ; CHECK-NOV-NEXT:    ret
4315 ; CHECK-V-LABEL: ustest_f64i16_mm:
4316 ; CHECK-V:       # %bb.0: # %entry
4317 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4318 ; CHECK-V-NEXT:    vfncvt.rtz.x.f.w v9, v8
4319 ; CHECK-V-NEXT:    lui a0, 16
4320 ; CHECK-V-NEXT:    addi a0, a0, -1
4321 ; CHECK-V-NEXT:    vmin.vx v8, v9, a0
4322 ; CHECK-V-NEXT:    vmax.vx v8, v8, zero
4323 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4324 ; CHECK-V-NEXT:    vnsrl.wi v8, v8, 0
4325 ; CHECK-V-NEXT:    ret
4326 entry:
4327   %conv = fptosi <2 x double> %x to <2 x i32>
4328   %spec.store.select = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>)
4329   %spec.store.select7 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %spec.store.select, <2 x i32> zeroinitializer)
4330   %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>
4331   ret <2 x i16> %conv6
4334 define <4 x i16> @stest_f32i16_mm(<4 x float> %x) {
4335 ; CHECK-NOV-LABEL: stest_f32i16_mm:
4336 ; CHECK-NOV:       # %bb.0: # %entry
4337 ; CHECK-NOV-NEXT:    fcvt.w.s a1, fa3, rtz
4338 ; CHECK-NOV-NEXT:    lui a5, 8
4339 ; CHECK-NOV-NEXT:    addiw a5, a5, -1
4340 ; CHECK-NOV-NEXT:    fcvt.w.s a2, fa2, rtz
4341 ; CHECK-NOV-NEXT:    bge a1, a5, .LBB39_10
4342 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4343 ; CHECK-NOV-NEXT:    fcvt.w.s a3, fa1, rtz
4344 ; CHECK-NOV-NEXT:    bge a2, a5, .LBB39_11
4345 ; CHECK-NOV-NEXT:  .LBB39_2: # %entry
4346 ; CHECK-NOV-NEXT:    fcvt.w.s a4, fa0, rtz
4347 ; CHECK-NOV-NEXT:    bge a3, a5, .LBB39_12
4348 ; CHECK-NOV-NEXT:  .LBB39_3: # %entry
4349 ; CHECK-NOV-NEXT:    bge a4, a5, .LBB39_13
4350 ; CHECK-NOV-NEXT:  .LBB39_4: # %entry
4351 ; CHECK-NOV-NEXT:    lui a5, 1048568
4352 ; CHECK-NOV-NEXT:    bge a5, a4, .LBB39_14
4353 ; CHECK-NOV-NEXT:  .LBB39_5: # %entry
4354 ; CHECK-NOV-NEXT:    bge a5, a3, .LBB39_15
4355 ; CHECK-NOV-NEXT:  .LBB39_6: # %entry
4356 ; CHECK-NOV-NEXT:    bge a5, a2, .LBB39_16
4357 ; CHECK-NOV-NEXT:  .LBB39_7: # %entry
4358 ; CHECK-NOV-NEXT:    blt a5, a1, .LBB39_9
4359 ; CHECK-NOV-NEXT:  .LBB39_8: # %entry
4360 ; CHECK-NOV-NEXT:    lui a1, 1048568
4361 ; CHECK-NOV-NEXT:  .LBB39_9: # %entry
4362 ; CHECK-NOV-NEXT:    sh a1, 6(a0)
4363 ; CHECK-NOV-NEXT:    sh a2, 4(a0)
4364 ; CHECK-NOV-NEXT:    sh a3, 2(a0)
4365 ; CHECK-NOV-NEXT:    sh a4, 0(a0)
4366 ; CHECK-NOV-NEXT:    ret
4367 ; CHECK-NOV-NEXT:  .LBB39_10: # %entry
4368 ; CHECK-NOV-NEXT:    mv a1, a5
4369 ; CHECK-NOV-NEXT:    fcvt.w.s a3, fa1, rtz
4370 ; CHECK-NOV-NEXT:    blt a2, a5, .LBB39_2
4371 ; CHECK-NOV-NEXT:  .LBB39_11: # %entry
4372 ; CHECK-NOV-NEXT:    mv a2, a5
4373 ; CHECK-NOV-NEXT:    fcvt.w.s a4, fa0, rtz
4374 ; CHECK-NOV-NEXT:    blt a3, a5, .LBB39_3
4375 ; CHECK-NOV-NEXT:  .LBB39_12: # %entry
4376 ; CHECK-NOV-NEXT:    mv a3, a5
4377 ; CHECK-NOV-NEXT:    blt a4, a5, .LBB39_4
4378 ; CHECK-NOV-NEXT:  .LBB39_13: # %entry
4379 ; CHECK-NOV-NEXT:    mv a4, a5
4380 ; CHECK-NOV-NEXT:    lui a5, 1048568
4381 ; CHECK-NOV-NEXT:    blt a5, a4, .LBB39_5
4382 ; CHECK-NOV-NEXT:  .LBB39_14: # %entry
4383 ; CHECK-NOV-NEXT:    lui a4, 1048568
4384 ; CHECK-NOV-NEXT:    blt a5, a3, .LBB39_6
4385 ; CHECK-NOV-NEXT:  .LBB39_15: # %entry
4386 ; CHECK-NOV-NEXT:    lui a3, 1048568
4387 ; CHECK-NOV-NEXT:    blt a5, a2, .LBB39_7
4388 ; CHECK-NOV-NEXT:  .LBB39_16: # %entry
4389 ; CHECK-NOV-NEXT:    lui a2, 1048568
4390 ; CHECK-NOV-NEXT:    bge a5, a1, .LBB39_8
4391 ; CHECK-NOV-NEXT:    j .LBB39_9
4393 ; CHECK-V-LABEL: stest_f32i16_mm:
4394 ; CHECK-V:       # %bb.0: # %entry
4395 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
4396 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
4397 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4398 ; CHECK-V-NEXT:    vnclip.wi v8, v8, 0
4399 ; CHECK-V-NEXT:    ret
4400 entry:
4401   %conv = fptosi <4 x float> %x to <4 x i32>
4402   %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %conv, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>)
4403   %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>)
4404   %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>
4405   ret <4 x i16> %conv6
4408 define <4 x i16> @utest_f32i16_mm(<4 x float> %x) {
4409 ; CHECK-NOV-LABEL: utest_f32i16_mm:
4410 ; CHECK-NOV:       # %bb.0: # %entry
4411 ; CHECK-NOV-NEXT:    fcvt.wu.s a1, fa0, rtz
4412 ; CHECK-NOV-NEXT:    lui a3, 16
4413 ; CHECK-NOV-NEXT:    addiw a3, a3, -1
4414 ; CHECK-NOV-NEXT:    fcvt.wu.s a2, fa1, rtz
4415 ; CHECK-NOV-NEXT:    bgeu a1, a3, .LBB40_6
4416 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4417 ; CHECK-NOV-NEXT:    fcvt.wu.s a4, fa2, rtz
4418 ; CHECK-NOV-NEXT:    bgeu a2, a3, .LBB40_7
4419 ; CHECK-NOV-NEXT:  .LBB40_2: # %entry
4420 ; CHECK-NOV-NEXT:    fcvt.wu.s a5, fa3, rtz
4421 ; CHECK-NOV-NEXT:    bgeu a4, a3, .LBB40_8
4422 ; CHECK-NOV-NEXT:  .LBB40_3: # %entry
4423 ; CHECK-NOV-NEXT:    bltu a5, a3, .LBB40_5
4424 ; CHECK-NOV-NEXT:  .LBB40_4: # %entry
4425 ; CHECK-NOV-NEXT:    mv a5, a3
4426 ; CHECK-NOV-NEXT:  .LBB40_5: # %entry
4427 ; CHECK-NOV-NEXT:    sh a5, 6(a0)
4428 ; CHECK-NOV-NEXT:    sh a4, 4(a0)
4429 ; CHECK-NOV-NEXT:    sh a2, 2(a0)
4430 ; CHECK-NOV-NEXT:    sh a1, 0(a0)
4431 ; CHECK-NOV-NEXT:    ret
4432 ; CHECK-NOV-NEXT:  .LBB40_6: # %entry
4433 ; CHECK-NOV-NEXT:    mv a1, a3
4434 ; CHECK-NOV-NEXT:    fcvt.wu.s a4, fa2, rtz
4435 ; CHECK-NOV-NEXT:    bltu a2, a3, .LBB40_2
4436 ; CHECK-NOV-NEXT:  .LBB40_7: # %entry
4437 ; CHECK-NOV-NEXT:    mv a2, a3
4438 ; CHECK-NOV-NEXT:    fcvt.wu.s a5, fa3, rtz
4439 ; CHECK-NOV-NEXT:    bltu a4, a3, .LBB40_3
4440 ; CHECK-NOV-NEXT:  .LBB40_8: # %entry
4441 ; CHECK-NOV-NEXT:    mv a4, a3
4442 ; CHECK-NOV-NEXT:    bgeu a5, a3, .LBB40_4
4443 ; CHECK-NOV-NEXT:    j .LBB40_5
4445 ; CHECK-V-LABEL: utest_f32i16_mm:
4446 ; CHECK-V:       # %bb.0: # %entry
4447 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
4448 ; CHECK-V-NEXT:    vfcvt.rtz.xu.f.v v8, v8
4449 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4450 ; CHECK-V-NEXT:    vnclipu.wi v8, v8, 0
4451 ; CHECK-V-NEXT:    ret
4452 entry:
4453   %conv = fptoui <4 x float> %x to <4 x i32>
4454   %spec.store.select = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>)
4455   %conv6 = trunc <4 x i32> %spec.store.select to <4 x i16>
4456   ret <4 x i16> %conv6
4459 define <4 x i16> @ustest_f32i16_mm(<4 x float> %x) {
4460 ; CHECK-NOV-LABEL: ustest_f32i16_mm:
4461 ; CHECK-NOV:       # %bb.0: # %entry
4462 ; CHECK-NOV-NEXT:    fcvt.w.s a1, fa3, rtz
4463 ; CHECK-NOV-NEXT:    lui a3, 16
4464 ; CHECK-NOV-NEXT:    addiw a3, a3, -1
4465 ; CHECK-NOV-NEXT:    fcvt.w.s a2, fa2, rtz
4466 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB41_6
4467 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4468 ; CHECK-NOV-NEXT:    fcvt.w.s a4, fa1, rtz
4469 ; CHECK-NOV-NEXT:    bge a2, a3, .LBB41_7
4470 ; CHECK-NOV-NEXT:  .LBB41_2: # %entry
4471 ; CHECK-NOV-NEXT:    fcvt.w.s a5, fa0, rtz
4472 ; CHECK-NOV-NEXT:    bge a4, a3, .LBB41_8
4473 ; CHECK-NOV-NEXT:  .LBB41_3: # %entry
4474 ; CHECK-NOV-NEXT:    blt a5, a3, .LBB41_5
4475 ; CHECK-NOV-NEXT:  .LBB41_4: # %entry
4476 ; CHECK-NOV-NEXT:    mv a5, a3
4477 ; CHECK-NOV-NEXT:  .LBB41_5: # %entry
4478 ; CHECK-NOV-NEXT:    sgtz a3, a5
4479 ; CHECK-NOV-NEXT:    negw a3, a3
4480 ; CHECK-NOV-NEXT:    and a3, a3, a5
4481 ; CHECK-NOV-NEXT:    sgtz a5, a4
4482 ; CHECK-NOV-NEXT:    negw a5, a5
4483 ; CHECK-NOV-NEXT:    and a4, a5, a4
4484 ; CHECK-NOV-NEXT:    sgtz a5, a2
4485 ; CHECK-NOV-NEXT:    negw a5, a5
4486 ; CHECK-NOV-NEXT:    and a2, a5, a2
4487 ; CHECK-NOV-NEXT:    sgtz a5, a1
4488 ; CHECK-NOV-NEXT:    negw a5, a5
4489 ; CHECK-NOV-NEXT:    and a1, a5, a1
4490 ; CHECK-NOV-NEXT:    sh a1, 6(a0)
4491 ; CHECK-NOV-NEXT:    sh a2, 4(a0)
4492 ; CHECK-NOV-NEXT:    sh a4, 2(a0)
4493 ; CHECK-NOV-NEXT:    sh a3, 0(a0)
4494 ; CHECK-NOV-NEXT:    ret
4495 ; CHECK-NOV-NEXT:  .LBB41_6: # %entry
4496 ; CHECK-NOV-NEXT:    mv a1, a3
4497 ; CHECK-NOV-NEXT:    fcvt.w.s a4, fa1, rtz
4498 ; CHECK-NOV-NEXT:    blt a2, a3, .LBB41_2
4499 ; CHECK-NOV-NEXT:  .LBB41_7: # %entry
4500 ; CHECK-NOV-NEXT:    mv a2, a3
4501 ; CHECK-NOV-NEXT:    fcvt.w.s a5, fa0, rtz
4502 ; CHECK-NOV-NEXT:    blt a4, a3, .LBB41_3
4503 ; CHECK-NOV-NEXT:  .LBB41_8: # %entry
4504 ; CHECK-NOV-NEXT:    mv a4, a3
4505 ; CHECK-NOV-NEXT:    bge a5, a3, .LBB41_4
4506 ; CHECK-NOV-NEXT:    j .LBB41_5
4508 ; CHECK-V-LABEL: ustest_f32i16_mm:
4509 ; CHECK-V:       # %bb.0: # %entry
4510 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
4511 ; CHECK-V-NEXT:    vfcvt.rtz.x.f.v v8, v8
4512 ; CHECK-V-NEXT:    lui a0, 16
4513 ; CHECK-V-NEXT:    addi a0, a0, -1
4514 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
4515 ; CHECK-V-NEXT:    vmax.vx v8, v8, zero
4516 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4517 ; CHECK-V-NEXT:    vnsrl.wi v8, v8, 0
4518 ; CHECK-V-NEXT:    ret
4519 entry:
4520   %conv = fptosi <4 x float> %x to <4 x i32>
4521   %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>)
4522   %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> zeroinitializer)
4523   %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>
4524   ret <4 x i16> %conv6
4527 define <8 x i16> @stest_f16i16_mm(<8 x half> %x) {
4528 ; CHECK-NOV-LABEL: stest_f16i16_mm:
4529 ; CHECK-NOV:       # %bb.0: # %entry
4530 ; CHECK-NOV-NEXT:    addi sp, sp, -128
4531 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 128
4532 ; CHECK-NOV-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
4533 ; CHECK-NOV-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
4534 ; CHECK-NOV-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
4535 ; CHECK-NOV-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
4536 ; CHECK-NOV-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
4537 ; CHECK-NOV-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
4538 ; CHECK-NOV-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
4539 ; CHECK-NOV-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
4540 ; CHECK-NOV-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
4541 ; CHECK-NOV-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
4542 ; CHECK-NOV-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
4543 ; CHECK-NOV-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
4544 ; CHECK-NOV-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
4545 ; CHECK-NOV-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
4546 ; CHECK-NOV-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
4547 ; CHECK-NOV-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
4548 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
4549 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
4550 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
4551 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
4552 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
4553 ; CHECK-NOV-NEXT:    .cfi_offset s4, -48
4554 ; CHECK-NOV-NEXT:    .cfi_offset s5, -56
4555 ; CHECK-NOV-NEXT:    .cfi_offset s6, -64
4556 ; CHECK-NOV-NEXT:    .cfi_offset s7, -72
4557 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -80
4558 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -88
4559 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -96
4560 ; CHECK-NOV-NEXT:    .cfi_offset fs3, -104
4561 ; CHECK-NOV-NEXT:    .cfi_offset fs4, -112
4562 ; CHECK-NOV-NEXT:    .cfi_offset fs5, -120
4563 ; CHECK-NOV-NEXT:    .cfi_offset fs6, -128
4564 ; CHECK-NOV-NEXT:    lhu s1, 56(a1)
4565 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
4566 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
4567 ; CHECK-NOV-NEXT:    lhu s4, 16(a1)
4568 ; CHECK-NOV-NEXT:    lhu s5, 24(a1)
4569 ; CHECK-NOV-NEXT:    lhu s6, 32(a1)
4570 ; CHECK-NOV-NEXT:    lhu s7, 40(a1)
4571 ; CHECK-NOV-NEXT:    lhu a1, 48(a1)
4572 ; CHECK-NOV-NEXT:    mv s0, a0
4573 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
4574 ; CHECK-NOV-NEXT:    call __extendhfsf2
4575 ; CHECK-NOV-NEXT:    fmv.s fs6, fa0
4576 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s7
4577 ; CHECK-NOV-NEXT:    call __extendhfsf2
4578 ; CHECK-NOV-NEXT:    fmv.s fs5, fa0
4579 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s6
4580 ; CHECK-NOV-NEXT:    call __extendhfsf2
4581 ; CHECK-NOV-NEXT:    fmv.s fs4, fa0
4582 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s5
4583 ; CHECK-NOV-NEXT:    call __extendhfsf2
4584 ; CHECK-NOV-NEXT:    fmv.s fs3, fa0
4585 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s4
4586 ; CHECK-NOV-NEXT:    call __extendhfsf2
4587 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
4588 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
4589 ; CHECK-NOV-NEXT:    call __extendhfsf2
4590 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
4591 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
4592 ; CHECK-NOV-NEXT:    call __extendhfsf2
4593 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
4594 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
4595 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs6, rtz
4596 ; CHECK-NOV-NEXT:    call __extendhfsf2
4597 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
4598 ; CHECK-NOV-NEXT:    lui a7, 8
4599 ; CHECK-NOV-NEXT:    addiw a7, a7, -1
4600 ; CHECK-NOV-NEXT:    bge a0, a7, .LBB42_18
4601 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4602 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
4603 ; CHECK-NOV-NEXT:    bge s1, a7, .LBB42_19
4604 ; CHECK-NOV-NEXT:  .LBB42_2: # %entry
4605 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
4606 ; CHECK-NOV-NEXT:    bge a1, a7, .LBB42_20
4607 ; CHECK-NOV-NEXT:  .LBB42_3: # %entry
4608 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs3, rtz
4609 ; CHECK-NOV-NEXT:    bge a2, a7, .LBB42_21
4610 ; CHECK-NOV-NEXT:  .LBB42_4: # %entry
4611 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs2, rtz
4612 ; CHECK-NOV-NEXT:    bge a3, a7, .LBB42_22
4613 ; CHECK-NOV-NEXT:  .LBB42_5: # %entry
4614 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs1, rtz
4615 ; CHECK-NOV-NEXT:    bge a4, a7, .LBB42_23
4616 ; CHECK-NOV-NEXT:  .LBB42_6: # %entry
4617 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs0, rtz
4618 ; CHECK-NOV-NEXT:    bge a5, a7, .LBB42_24
4619 ; CHECK-NOV-NEXT:  .LBB42_7: # %entry
4620 ; CHECK-NOV-NEXT:    bge a6, a7, .LBB42_25
4621 ; CHECK-NOV-NEXT:  .LBB42_8: # %entry
4622 ; CHECK-NOV-NEXT:    lui a7, 1048568
4623 ; CHECK-NOV-NEXT:    bge a7, a6, .LBB42_26
4624 ; CHECK-NOV-NEXT:  .LBB42_9: # %entry
4625 ; CHECK-NOV-NEXT:    bge a7, a5, .LBB42_27
4626 ; CHECK-NOV-NEXT:  .LBB42_10: # %entry
4627 ; CHECK-NOV-NEXT:    bge a7, a4, .LBB42_28
4628 ; CHECK-NOV-NEXT:  .LBB42_11: # %entry
4629 ; CHECK-NOV-NEXT:    bge a7, a3, .LBB42_29
4630 ; CHECK-NOV-NEXT:  .LBB42_12: # %entry
4631 ; CHECK-NOV-NEXT:    bge a7, a2, .LBB42_30
4632 ; CHECK-NOV-NEXT:  .LBB42_13: # %entry
4633 ; CHECK-NOV-NEXT:    bge a7, a1, .LBB42_31
4634 ; CHECK-NOV-NEXT:  .LBB42_14: # %entry
4635 ; CHECK-NOV-NEXT:    bge a7, s1, .LBB42_32
4636 ; CHECK-NOV-NEXT:  .LBB42_15: # %entry
4637 ; CHECK-NOV-NEXT:    blt a7, a0, .LBB42_17
4638 ; CHECK-NOV-NEXT:  .LBB42_16: # %entry
4639 ; CHECK-NOV-NEXT:    lui a0, 1048568
4640 ; CHECK-NOV-NEXT:  .LBB42_17: # %entry
4641 ; CHECK-NOV-NEXT:    sh a0, 14(s0)
4642 ; CHECK-NOV-NEXT:    sh s1, 12(s0)
4643 ; CHECK-NOV-NEXT:    sh a1, 10(s0)
4644 ; CHECK-NOV-NEXT:    sh a2, 8(s0)
4645 ; CHECK-NOV-NEXT:    sh a3, 6(s0)
4646 ; CHECK-NOV-NEXT:    sh a4, 4(s0)
4647 ; CHECK-NOV-NEXT:    sh a5, 2(s0)
4648 ; CHECK-NOV-NEXT:    sh a6, 0(s0)
4649 ; CHECK-NOV-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
4650 ; CHECK-NOV-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
4651 ; CHECK-NOV-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
4652 ; CHECK-NOV-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
4653 ; CHECK-NOV-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
4654 ; CHECK-NOV-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
4655 ; CHECK-NOV-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
4656 ; CHECK-NOV-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
4657 ; CHECK-NOV-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
4658 ; CHECK-NOV-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
4659 ; CHECK-NOV-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
4660 ; CHECK-NOV-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
4661 ; CHECK-NOV-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
4662 ; CHECK-NOV-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
4663 ; CHECK-NOV-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
4664 ; CHECK-NOV-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
4665 ; CHECK-NOV-NEXT:    addi sp, sp, 128
4666 ; CHECK-NOV-NEXT:    ret
4667 ; CHECK-NOV-NEXT:  .LBB42_18: # %entry
4668 ; CHECK-NOV-NEXT:    mv a0, a7
4669 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
4670 ; CHECK-NOV-NEXT:    blt s1, a7, .LBB42_2
4671 ; CHECK-NOV-NEXT:  .LBB42_19: # %entry
4672 ; CHECK-NOV-NEXT:    mv s1, a7
4673 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
4674 ; CHECK-NOV-NEXT:    blt a1, a7, .LBB42_3
4675 ; CHECK-NOV-NEXT:  .LBB42_20: # %entry
4676 ; CHECK-NOV-NEXT:    mv a1, a7
4677 ; CHECK-NOV-NEXT:    fcvt.l.s a3, fs3, rtz
4678 ; CHECK-NOV-NEXT:    blt a2, a7, .LBB42_4
4679 ; CHECK-NOV-NEXT:  .LBB42_21: # %entry
4680 ; CHECK-NOV-NEXT:    mv a2, a7
4681 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs2, rtz
4682 ; CHECK-NOV-NEXT:    blt a3, a7, .LBB42_5
4683 ; CHECK-NOV-NEXT:  .LBB42_22: # %entry
4684 ; CHECK-NOV-NEXT:    mv a3, a7
4685 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs1, rtz
4686 ; CHECK-NOV-NEXT:    blt a4, a7, .LBB42_6
4687 ; CHECK-NOV-NEXT:  .LBB42_23: # %entry
4688 ; CHECK-NOV-NEXT:    mv a4, a7
4689 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs0, rtz
4690 ; CHECK-NOV-NEXT:    blt a5, a7, .LBB42_7
4691 ; CHECK-NOV-NEXT:  .LBB42_24: # %entry
4692 ; CHECK-NOV-NEXT:    mv a5, a7
4693 ; CHECK-NOV-NEXT:    blt a6, a7, .LBB42_8
4694 ; CHECK-NOV-NEXT:  .LBB42_25: # %entry
4695 ; CHECK-NOV-NEXT:    mv a6, a7
4696 ; CHECK-NOV-NEXT:    lui a7, 1048568
4697 ; CHECK-NOV-NEXT:    blt a7, a6, .LBB42_9
4698 ; CHECK-NOV-NEXT:  .LBB42_26: # %entry
4699 ; CHECK-NOV-NEXT:    lui a6, 1048568
4700 ; CHECK-NOV-NEXT:    blt a7, a5, .LBB42_10
4701 ; CHECK-NOV-NEXT:  .LBB42_27: # %entry
4702 ; CHECK-NOV-NEXT:    lui a5, 1048568
4703 ; CHECK-NOV-NEXT:    blt a7, a4, .LBB42_11
4704 ; CHECK-NOV-NEXT:  .LBB42_28: # %entry
4705 ; CHECK-NOV-NEXT:    lui a4, 1048568
4706 ; CHECK-NOV-NEXT:    blt a7, a3, .LBB42_12
4707 ; CHECK-NOV-NEXT:  .LBB42_29: # %entry
4708 ; CHECK-NOV-NEXT:    lui a3, 1048568
4709 ; CHECK-NOV-NEXT:    blt a7, a2, .LBB42_13
4710 ; CHECK-NOV-NEXT:  .LBB42_30: # %entry
4711 ; CHECK-NOV-NEXT:    lui a2, 1048568
4712 ; CHECK-NOV-NEXT:    blt a7, a1, .LBB42_14
4713 ; CHECK-NOV-NEXT:  .LBB42_31: # %entry
4714 ; CHECK-NOV-NEXT:    lui a1, 1048568
4715 ; CHECK-NOV-NEXT:    blt a7, s1, .LBB42_15
4716 ; CHECK-NOV-NEXT:  .LBB42_32: # %entry
4717 ; CHECK-NOV-NEXT:    lui s1, 1048568
4718 ; CHECK-NOV-NEXT:    bge a7, a0, .LBB42_16
4719 ; CHECK-NOV-NEXT:    j .LBB42_17
4721 ; CHECK-V-LABEL: stest_f16i16_mm:
4722 ; CHECK-V:       # %bb.0: # %entry
4723 ; CHECK-V-NEXT:    addi sp, sp, -80
4724 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 80
4725 ; CHECK-V-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
4726 ; CHECK-V-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
4727 ; CHECK-V-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
4728 ; CHECK-V-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
4729 ; CHECK-V-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
4730 ; CHECK-V-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
4731 ; CHECK-V-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill
4732 ; CHECK-V-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill
4733 ; CHECK-V-NEXT:    .cfi_offset ra, -8
4734 ; CHECK-V-NEXT:    .cfi_offset s0, -16
4735 ; CHECK-V-NEXT:    .cfi_offset s1, -24
4736 ; CHECK-V-NEXT:    .cfi_offset s2, -32
4737 ; CHECK-V-NEXT:    .cfi_offset s3, -40
4738 ; CHECK-V-NEXT:    .cfi_offset s4, -48
4739 ; CHECK-V-NEXT:    .cfi_offset s5, -56
4740 ; CHECK-V-NEXT:    .cfi_offset s6, -64
4741 ; CHECK-V-NEXT:    csrr a1, vlenb
4742 ; CHECK-V-NEXT:    slli a1, a1, 2
4743 ; CHECK-V-NEXT:    sub sp, sp, a1
4744 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xd0, 0x00, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 80 + 4 * vlenb
4745 ; CHECK-V-NEXT:    lhu s0, 0(a0)
4746 ; CHECK-V-NEXT:    lhu s1, 8(a0)
4747 ; CHECK-V-NEXT:    lhu s2, 16(a0)
4748 ; CHECK-V-NEXT:    lhu s3, 24(a0)
4749 ; CHECK-V-NEXT:    lhu s4, 32(a0)
4750 ; CHECK-V-NEXT:    lhu s5, 40(a0)
4751 ; CHECK-V-NEXT:    lhu s6, 48(a0)
4752 ; CHECK-V-NEXT:    lhu a0, 56(a0)
4753 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
4754 ; CHECK-V-NEXT:    call __extendhfsf2
4755 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4756 ; CHECK-V-NEXT:    fmv.w.x fa0, s6
4757 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4758 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4759 ; CHECK-V-NEXT:    csrr a0, vlenb
4760 ; CHECK-V-NEXT:    slli a0, a0, 1
4761 ; CHECK-V-NEXT:    add a0, sp, a0
4762 ; CHECK-V-NEXT:    addi a0, a0, 16
4763 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4764 ; CHECK-V-NEXT:    call __extendhfsf2
4765 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4766 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4767 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4768 ; CHECK-V-NEXT:    csrr a0, vlenb
4769 ; CHECK-V-NEXT:    slli a0, a0, 1
4770 ; CHECK-V-NEXT:    add a0, sp, a0
4771 ; CHECK-V-NEXT:    addi a0, a0, 16
4772 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
4773 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
4774 ; CHECK-V-NEXT:    csrr a0, vlenb
4775 ; CHECK-V-NEXT:    add a0, sp, a0
4776 ; CHECK-V-NEXT:    addi a0, a0, 16
4777 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4778 ; CHECK-V-NEXT:    fmv.w.x fa0, s5
4779 ; CHECK-V-NEXT:    call __extendhfsf2
4780 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4781 ; CHECK-V-NEXT:    fmv.w.x fa0, s4
4782 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4783 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4784 ; CHECK-V-NEXT:    csrr a0, vlenb
4785 ; CHECK-V-NEXT:    slli a0, a0, 1
4786 ; CHECK-V-NEXT:    add a0, sp, a0
4787 ; CHECK-V-NEXT:    addi a0, a0, 16
4788 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4789 ; CHECK-V-NEXT:    call __extendhfsf2
4790 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4791 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4792 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4793 ; CHECK-V-NEXT:    csrr a0, vlenb
4794 ; CHECK-V-NEXT:    slli a0, a0, 1
4795 ; CHECK-V-NEXT:    add a0, sp, a0
4796 ; CHECK-V-NEXT:    addi a0, a0, 16
4797 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
4798 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
4799 ; CHECK-V-NEXT:    csrr a0, vlenb
4800 ; CHECK-V-NEXT:    add a0, sp, a0
4801 ; CHECK-V-NEXT:    addi a0, a0, 16
4802 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
4803 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
4804 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
4805 ; CHECK-V-NEXT:    csrr a0, vlenb
4806 ; CHECK-V-NEXT:    slli a0, a0, 1
4807 ; CHECK-V-NEXT:    add a0, sp, a0
4808 ; CHECK-V-NEXT:    addi a0, a0, 16
4809 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
4810 ; CHECK-V-NEXT:    fmv.w.x fa0, s3
4811 ; CHECK-V-NEXT:    call __extendhfsf2
4812 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4813 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
4814 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4815 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4816 ; CHECK-V-NEXT:    addi a0, sp, 16
4817 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4818 ; CHECK-V-NEXT:    call __extendhfsf2
4819 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4820 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4821 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4822 ; CHECK-V-NEXT:    addi a0, sp, 16
4823 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
4824 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
4825 ; CHECK-V-NEXT:    csrr a0, vlenb
4826 ; CHECK-V-NEXT:    add a0, sp, a0
4827 ; CHECK-V-NEXT:    addi a0, a0, 16
4828 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4829 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
4830 ; CHECK-V-NEXT:    call __extendhfsf2
4831 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4832 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
4833 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4834 ; CHECK-V-NEXT:    vmv.s.x v8, a0
4835 ; CHECK-V-NEXT:    addi a0, sp, 16
4836 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
4837 ; CHECK-V-NEXT:    call __extendhfsf2
4838 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
4839 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4840 ; CHECK-V-NEXT:    vmv.s.x v10, a0
4841 ; CHECK-V-NEXT:    addi a0, sp, 16
4842 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
4843 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
4844 ; CHECK-V-NEXT:    csrr a0, vlenb
4845 ; CHECK-V-NEXT:    add a0, sp, a0
4846 ; CHECK-V-NEXT:    addi a0, a0, 16
4847 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
4848 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
4849 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
4850 ; CHECK-V-NEXT:    csrr a0, vlenb
4851 ; CHECK-V-NEXT:    slli a0, a0, 1
4852 ; CHECK-V-NEXT:    add a0, sp, a0
4853 ; CHECK-V-NEXT:    addi a0, a0, 16
4854 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
4855 ; CHECK-V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4856 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 4
4857 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
4858 ; CHECK-V-NEXT:    vnclip.wi v8, v10, 0
4859 ; CHECK-V-NEXT:    csrr a0, vlenb
4860 ; CHECK-V-NEXT:    slli a0, a0, 2
4861 ; CHECK-V-NEXT:    add sp, sp, a0
4862 ; CHECK-V-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
4863 ; CHECK-V-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
4864 ; CHECK-V-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
4865 ; CHECK-V-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
4866 ; CHECK-V-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
4867 ; CHECK-V-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
4868 ; CHECK-V-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload
4869 ; CHECK-V-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload
4870 ; CHECK-V-NEXT:    addi sp, sp, 80
4871 ; CHECK-V-NEXT:    ret
4872 entry:
4873   %conv = fptosi <8 x half> %x to <8 x i32>
4874   %spec.store.select = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %conv, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>)
4875   %spec.store.select7 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %spec.store.select, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>)
4876   %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>
4877   ret <8 x i16> %conv6
4880 define <8 x i16> @utesth_f16i16_mm(<8 x half> %x) {
4881 ; CHECK-NOV-LABEL: utesth_f16i16_mm:
4882 ; CHECK-NOV:       # %bb.0: # %entry
4883 ; CHECK-NOV-NEXT:    addi sp, sp, -128
4884 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 128
4885 ; CHECK-NOV-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
4886 ; CHECK-NOV-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
4887 ; CHECK-NOV-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
4888 ; CHECK-NOV-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
4889 ; CHECK-NOV-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
4890 ; CHECK-NOV-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
4891 ; CHECK-NOV-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
4892 ; CHECK-NOV-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
4893 ; CHECK-NOV-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
4894 ; CHECK-NOV-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
4895 ; CHECK-NOV-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
4896 ; CHECK-NOV-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
4897 ; CHECK-NOV-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
4898 ; CHECK-NOV-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
4899 ; CHECK-NOV-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
4900 ; CHECK-NOV-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
4901 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
4902 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
4903 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
4904 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
4905 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
4906 ; CHECK-NOV-NEXT:    .cfi_offset s4, -48
4907 ; CHECK-NOV-NEXT:    .cfi_offset s5, -56
4908 ; CHECK-NOV-NEXT:    .cfi_offset s6, -64
4909 ; CHECK-NOV-NEXT:    .cfi_offset s7, -72
4910 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -80
4911 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -88
4912 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -96
4913 ; CHECK-NOV-NEXT:    .cfi_offset fs3, -104
4914 ; CHECK-NOV-NEXT:    .cfi_offset fs4, -112
4915 ; CHECK-NOV-NEXT:    .cfi_offset fs5, -120
4916 ; CHECK-NOV-NEXT:    .cfi_offset fs6, -128
4917 ; CHECK-NOV-NEXT:    lhu s1, 0(a1)
4918 ; CHECK-NOV-NEXT:    lhu s2, 56(a1)
4919 ; CHECK-NOV-NEXT:    lhu s3, 48(a1)
4920 ; CHECK-NOV-NEXT:    lhu s4, 40(a1)
4921 ; CHECK-NOV-NEXT:    lhu s5, 32(a1)
4922 ; CHECK-NOV-NEXT:    lhu s6, 24(a1)
4923 ; CHECK-NOV-NEXT:    lhu s7, 16(a1)
4924 ; CHECK-NOV-NEXT:    lhu a1, 8(a1)
4925 ; CHECK-NOV-NEXT:    mv s0, a0
4926 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
4927 ; CHECK-NOV-NEXT:    call __extendhfsf2
4928 ; CHECK-NOV-NEXT:    fmv.s fs6, fa0
4929 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s7
4930 ; CHECK-NOV-NEXT:    call __extendhfsf2
4931 ; CHECK-NOV-NEXT:    fmv.s fs5, fa0
4932 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s6
4933 ; CHECK-NOV-NEXT:    call __extendhfsf2
4934 ; CHECK-NOV-NEXT:    fmv.s fs4, fa0
4935 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s5
4936 ; CHECK-NOV-NEXT:    call __extendhfsf2
4937 ; CHECK-NOV-NEXT:    fmv.s fs3, fa0
4938 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s4
4939 ; CHECK-NOV-NEXT:    call __extendhfsf2
4940 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
4941 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
4942 ; CHECK-NOV-NEXT:    call __extendhfsf2
4943 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
4944 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
4945 ; CHECK-NOV-NEXT:    call __extendhfsf2
4946 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
4947 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
4948 ; CHECK-NOV-NEXT:    fcvt.lu.s s1, fs6, rtz
4949 ; CHECK-NOV-NEXT:    call __extendhfsf2
4950 ; CHECK-NOV-NEXT:    fcvt.lu.s a0, fa0, rtz
4951 ; CHECK-NOV-NEXT:    lui a1, 16
4952 ; CHECK-NOV-NEXT:    addiw a1, a1, -1
4953 ; CHECK-NOV-NEXT:    bgeu a0, a1, .LBB43_10
4954 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
4955 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs5, rtz
4956 ; CHECK-NOV-NEXT:    bgeu s1, a1, .LBB43_11
4957 ; CHECK-NOV-NEXT:  .LBB43_2: # %entry
4958 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs4, rtz
4959 ; CHECK-NOV-NEXT:    bgeu a2, a1, .LBB43_12
4960 ; CHECK-NOV-NEXT:  .LBB43_3: # %entry
4961 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fs3, rtz
4962 ; CHECK-NOV-NEXT:    bgeu a3, a1, .LBB43_13
4963 ; CHECK-NOV-NEXT:  .LBB43_4: # %entry
4964 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fs2, rtz
4965 ; CHECK-NOV-NEXT:    bgeu a4, a1, .LBB43_14
4966 ; CHECK-NOV-NEXT:  .LBB43_5: # %entry
4967 ; CHECK-NOV-NEXT:    fcvt.lu.s a6, fs1, rtz
4968 ; CHECK-NOV-NEXT:    bgeu a5, a1, .LBB43_15
4969 ; CHECK-NOV-NEXT:  .LBB43_6: # %entry
4970 ; CHECK-NOV-NEXT:    fcvt.lu.s a7, fs0, rtz
4971 ; CHECK-NOV-NEXT:    bgeu a6, a1, .LBB43_16
4972 ; CHECK-NOV-NEXT:  .LBB43_7: # %entry
4973 ; CHECK-NOV-NEXT:    bltu a7, a1, .LBB43_9
4974 ; CHECK-NOV-NEXT:  .LBB43_8: # %entry
4975 ; CHECK-NOV-NEXT:    mv a7, a1
4976 ; CHECK-NOV-NEXT:  .LBB43_9: # %entry
4977 ; CHECK-NOV-NEXT:    sh a7, 14(s0)
4978 ; CHECK-NOV-NEXT:    sh a6, 12(s0)
4979 ; CHECK-NOV-NEXT:    sh a5, 10(s0)
4980 ; CHECK-NOV-NEXT:    sh a4, 8(s0)
4981 ; CHECK-NOV-NEXT:    sh a3, 6(s0)
4982 ; CHECK-NOV-NEXT:    sh a2, 4(s0)
4983 ; CHECK-NOV-NEXT:    sh s1, 2(s0)
4984 ; CHECK-NOV-NEXT:    sh a0, 0(s0)
4985 ; CHECK-NOV-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
4986 ; CHECK-NOV-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
4987 ; CHECK-NOV-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
4988 ; CHECK-NOV-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
4989 ; CHECK-NOV-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
4990 ; CHECK-NOV-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
4991 ; CHECK-NOV-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
4992 ; CHECK-NOV-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
4993 ; CHECK-NOV-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
4994 ; CHECK-NOV-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
4995 ; CHECK-NOV-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
4996 ; CHECK-NOV-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
4997 ; CHECK-NOV-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
4998 ; CHECK-NOV-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
4999 ; CHECK-NOV-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
5000 ; CHECK-NOV-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
5001 ; CHECK-NOV-NEXT:    addi sp, sp, 128
5002 ; CHECK-NOV-NEXT:    ret
5003 ; CHECK-NOV-NEXT:  .LBB43_10: # %entry
5004 ; CHECK-NOV-NEXT:    mv a0, a1
5005 ; CHECK-NOV-NEXT:    fcvt.lu.s a2, fs5, rtz
5006 ; CHECK-NOV-NEXT:    bltu s1, a1, .LBB43_2
5007 ; CHECK-NOV-NEXT:  .LBB43_11: # %entry
5008 ; CHECK-NOV-NEXT:    mv s1, a1
5009 ; CHECK-NOV-NEXT:    fcvt.lu.s a3, fs4, rtz
5010 ; CHECK-NOV-NEXT:    bltu a2, a1, .LBB43_3
5011 ; CHECK-NOV-NEXT:  .LBB43_12: # %entry
5012 ; CHECK-NOV-NEXT:    mv a2, a1
5013 ; CHECK-NOV-NEXT:    fcvt.lu.s a4, fs3, rtz
5014 ; CHECK-NOV-NEXT:    bltu a3, a1, .LBB43_4
5015 ; CHECK-NOV-NEXT:  .LBB43_13: # %entry
5016 ; CHECK-NOV-NEXT:    mv a3, a1
5017 ; CHECK-NOV-NEXT:    fcvt.lu.s a5, fs2, rtz
5018 ; CHECK-NOV-NEXT:    bltu a4, a1, .LBB43_5
5019 ; CHECK-NOV-NEXT:  .LBB43_14: # %entry
5020 ; CHECK-NOV-NEXT:    mv a4, a1
5021 ; CHECK-NOV-NEXT:    fcvt.lu.s a6, fs1, rtz
5022 ; CHECK-NOV-NEXT:    bltu a5, a1, .LBB43_6
5023 ; CHECK-NOV-NEXT:  .LBB43_15: # %entry
5024 ; CHECK-NOV-NEXT:    mv a5, a1
5025 ; CHECK-NOV-NEXT:    fcvt.lu.s a7, fs0, rtz
5026 ; CHECK-NOV-NEXT:    bltu a6, a1, .LBB43_7
5027 ; CHECK-NOV-NEXT:  .LBB43_16: # %entry
5028 ; CHECK-NOV-NEXT:    mv a6, a1
5029 ; CHECK-NOV-NEXT:    bgeu a7, a1, .LBB43_8
5030 ; CHECK-NOV-NEXT:    j .LBB43_9
5032 ; CHECK-V-LABEL: utesth_f16i16_mm:
5033 ; CHECK-V:       # %bb.0: # %entry
5034 ; CHECK-V-NEXT:    addi sp, sp, -80
5035 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 80
5036 ; CHECK-V-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
5037 ; CHECK-V-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
5038 ; CHECK-V-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
5039 ; CHECK-V-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
5040 ; CHECK-V-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
5041 ; CHECK-V-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
5042 ; CHECK-V-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill
5043 ; CHECK-V-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill
5044 ; CHECK-V-NEXT:    .cfi_offset ra, -8
5045 ; CHECK-V-NEXT:    .cfi_offset s0, -16
5046 ; CHECK-V-NEXT:    .cfi_offset s1, -24
5047 ; CHECK-V-NEXT:    .cfi_offset s2, -32
5048 ; CHECK-V-NEXT:    .cfi_offset s3, -40
5049 ; CHECK-V-NEXT:    .cfi_offset s4, -48
5050 ; CHECK-V-NEXT:    .cfi_offset s5, -56
5051 ; CHECK-V-NEXT:    .cfi_offset s6, -64
5052 ; CHECK-V-NEXT:    csrr a1, vlenb
5053 ; CHECK-V-NEXT:    slli a1, a1, 2
5054 ; CHECK-V-NEXT:    sub sp, sp, a1
5055 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xd0, 0x00, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 80 + 4 * vlenb
5056 ; CHECK-V-NEXT:    lhu s0, 0(a0)
5057 ; CHECK-V-NEXT:    lhu s1, 8(a0)
5058 ; CHECK-V-NEXT:    lhu s2, 16(a0)
5059 ; CHECK-V-NEXT:    lhu s3, 24(a0)
5060 ; CHECK-V-NEXT:    lhu s4, 32(a0)
5061 ; CHECK-V-NEXT:    lhu s5, 40(a0)
5062 ; CHECK-V-NEXT:    lhu s6, 48(a0)
5063 ; CHECK-V-NEXT:    lhu a0, 56(a0)
5064 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
5065 ; CHECK-V-NEXT:    call __extendhfsf2
5066 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5067 ; CHECK-V-NEXT:    fmv.w.x fa0, s6
5068 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5069 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5070 ; CHECK-V-NEXT:    csrr a0, vlenb
5071 ; CHECK-V-NEXT:    slli a0, a0, 1
5072 ; CHECK-V-NEXT:    add a0, sp, a0
5073 ; CHECK-V-NEXT:    addi a0, a0, 16
5074 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5075 ; CHECK-V-NEXT:    call __extendhfsf2
5076 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5077 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5078 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5079 ; CHECK-V-NEXT:    csrr a0, vlenb
5080 ; CHECK-V-NEXT:    slli a0, a0, 1
5081 ; CHECK-V-NEXT:    add a0, sp, a0
5082 ; CHECK-V-NEXT:    addi a0, a0, 16
5083 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5084 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5085 ; CHECK-V-NEXT:    csrr a0, vlenb
5086 ; CHECK-V-NEXT:    add a0, sp, a0
5087 ; CHECK-V-NEXT:    addi a0, a0, 16
5088 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5089 ; CHECK-V-NEXT:    fmv.w.x fa0, s5
5090 ; CHECK-V-NEXT:    call __extendhfsf2
5091 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5092 ; CHECK-V-NEXT:    fmv.w.x fa0, s4
5093 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5094 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5095 ; CHECK-V-NEXT:    csrr a0, vlenb
5096 ; CHECK-V-NEXT:    slli a0, a0, 1
5097 ; CHECK-V-NEXT:    add a0, sp, a0
5098 ; CHECK-V-NEXT:    addi a0, a0, 16
5099 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5100 ; CHECK-V-NEXT:    call __extendhfsf2
5101 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5102 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5103 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5104 ; CHECK-V-NEXT:    csrr a0, vlenb
5105 ; CHECK-V-NEXT:    slli a0, a0, 1
5106 ; CHECK-V-NEXT:    add a0, sp, a0
5107 ; CHECK-V-NEXT:    addi a0, a0, 16
5108 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5109 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5110 ; CHECK-V-NEXT:    csrr a0, vlenb
5111 ; CHECK-V-NEXT:    add a0, sp, a0
5112 ; CHECK-V-NEXT:    addi a0, a0, 16
5113 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5114 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5115 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
5116 ; CHECK-V-NEXT:    csrr a0, vlenb
5117 ; CHECK-V-NEXT:    slli a0, a0, 1
5118 ; CHECK-V-NEXT:    add a0, sp, a0
5119 ; CHECK-V-NEXT:    addi a0, a0, 16
5120 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
5121 ; CHECK-V-NEXT:    fmv.w.x fa0, s3
5122 ; CHECK-V-NEXT:    call __extendhfsf2
5123 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5124 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
5125 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5126 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5127 ; CHECK-V-NEXT:    addi a0, sp, 16
5128 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5129 ; CHECK-V-NEXT:    call __extendhfsf2
5130 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5131 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5132 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5133 ; CHECK-V-NEXT:    addi a0, sp, 16
5134 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5135 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5136 ; CHECK-V-NEXT:    csrr a0, vlenb
5137 ; CHECK-V-NEXT:    add a0, sp, a0
5138 ; CHECK-V-NEXT:    addi a0, a0, 16
5139 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5140 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
5141 ; CHECK-V-NEXT:    call __extendhfsf2
5142 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5143 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
5144 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5145 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5146 ; CHECK-V-NEXT:    addi a0, sp, 16
5147 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5148 ; CHECK-V-NEXT:    call __extendhfsf2
5149 ; CHECK-V-NEXT:    fcvt.lu.s a0, fa0, rtz
5150 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5151 ; CHECK-V-NEXT:    vmv.s.x v10, a0
5152 ; CHECK-V-NEXT:    addi a0, sp, 16
5153 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
5154 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 1
5155 ; CHECK-V-NEXT:    csrr a0, vlenb
5156 ; CHECK-V-NEXT:    add a0, sp, a0
5157 ; CHECK-V-NEXT:    addi a0, a0, 16
5158 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
5159 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5160 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 2
5161 ; CHECK-V-NEXT:    csrr a0, vlenb
5162 ; CHECK-V-NEXT:    slli a0, a0, 1
5163 ; CHECK-V-NEXT:    add a0, sp, a0
5164 ; CHECK-V-NEXT:    addi a0, a0, 16
5165 ; CHECK-V-NEXT:    vl2r.v v8, (a0) # Unknown-size Folded Reload
5166 ; CHECK-V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5167 ; CHECK-V-NEXT:    vslideup.vi v10, v8, 4
5168 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5169 ; CHECK-V-NEXT:    vnclipu.wi v8, v10, 0
5170 ; CHECK-V-NEXT:    csrr a0, vlenb
5171 ; CHECK-V-NEXT:    slli a0, a0, 2
5172 ; CHECK-V-NEXT:    add sp, sp, a0
5173 ; CHECK-V-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
5174 ; CHECK-V-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
5175 ; CHECK-V-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
5176 ; CHECK-V-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
5177 ; CHECK-V-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
5178 ; CHECK-V-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
5179 ; CHECK-V-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload
5180 ; CHECK-V-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload
5181 ; CHECK-V-NEXT:    addi sp, sp, 80
5182 ; CHECK-V-NEXT:    ret
5183 entry:
5184   %conv = fptoui <8 x half> %x to <8 x i32>
5185   %spec.store.select = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>)
5186   %conv6 = trunc <8 x i32> %spec.store.select to <8 x i16>
5187   ret <8 x i16> %conv6
5190 define <8 x i16> @ustest_f16i16_mm(<8 x half> %x) {
5191 ; CHECK-NOV-LABEL: ustest_f16i16_mm:
5192 ; CHECK-NOV:       # %bb.0: # %entry
5193 ; CHECK-NOV-NEXT:    addi sp, sp, -128
5194 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 128
5195 ; CHECK-NOV-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
5196 ; CHECK-NOV-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
5197 ; CHECK-NOV-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
5198 ; CHECK-NOV-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
5199 ; CHECK-NOV-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
5200 ; CHECK-NOV-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
5201 ; CHECK-NOV-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
5202 ; CHECK-NOV-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
5203 ; CHECK-NOV-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
5204 ; CHECK-NOV-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
5205 ; CHECK-NOV-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
5206 ; CHECK-NOV-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
5207 ; CHECK-NOV-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
5208 ; CHECK-NOV-NEXT:    fsd fs4, 16(sp) # 8-byte Folded Spill
5209 ; CHECK-NOV-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill
5210 ; CHECK-NOV-NEXT:    fsd fs6, 0(sp) # 8-byte Folded Spill
5211 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
5212 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
5213 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
5214 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
5215 ; CHECK-NOV-NEXT:    .cfi_offset s3, -40
5216 ; CHECK-NOV-NEXT:    .cfi_offset s4, -48
5217 ; CHECK-NOV-NEXT:    .cfi_offset s5, -56
5218 ; CHECK-NOV-NEXT:    .cfi_offset s6, -64
5219 ; CHECK-NOV-NEXT:    .cfi_offset s7, -72
5220 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -80
5221 ; CHECK-NOV-NEXT:    .cfi_offset fs1, -88
5222 ; CHECK-NOV-NEXT:    .cfi_offset fs2, -96
5223 ; CHECK-NOV-NEXT:    .cfi_offset fs3, -104
5224 ; CHECK-NOV-NEXT:    .cfi_offset fs4, -112
5225 ; CHECK-NOV-NEXT:    .cfi_offset fs5, -120
5226 ; CHECK-NOV-NEXT:    .cfi_offset fs6, -128
5227 ; CHECK-NOV-NEXT:    lhu s1, 56(a1)
5228 ; CHECK-NOV-NEXT:    lhu s2, 0(a1)
5229 ; CHECK-NOV-NEXT:    lhu s3, 8(a1)
5230 ; CHECK-NOV-NEXT:    lhu s4, 16(a1)
5231 ; CHECK-NOV-NEXT:    lhu s5, 24(a1)
5232 ; CHECK-NOV-NEXT:    lhu s6, 32(a1)
5233 ; CHECK-NOV-NEXT:    lhu s7, 40(a1)
5234 ; CHECK-NOV-NEXT:    lhu a1, 48(a1)
5235 ; CHECK-NOV-NEXT:    mv s0, a0
5236 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
5237 ; CHECK-NOV-NEXT:    call __extendhfsf2
5238 ; CHECK-NOV-NEXT:    fmv.s fs6, fa0
5239 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s7
5240 ; CHECK-NOV-NEXT:    call __extendhfsf2
5241 ; CHECK-NOV-NEXT:    fmv.s fs5, fa0
5242 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s6
5243 ; CHECK-NOV-NEXT:    call __extendhfsf2
5244 ; CHECK-NOV-NEXT:    fmv.s fs4, fa0
5245 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s5
5246 ; CHECK-NOV-NEXT:    call __extendhfsf2
5247 ; CHECK-NOV-NEXT:    fmv.s fs3, fa0
5248 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s4
5249 ; CHECK-NOV-NEXT:    call __extendhfsf2
5250 ; CHECK-NOV-NEXT:    fmv.s fs2, fa0
5251 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s3
5252 ; CHECK-NOV-NEXT:    call __extendhfsf2
5253 ; CHECK-NOV-NEXT:    fmv.s fs1, fa0
5254 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
5255 ; CHECK-NOV-NEXT:    call __extendhfsf2
5256 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
5257 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s1
5258 ; CHECK-NOV-NEXT:    fcvt.l.s s1, fs6, rtz
5259 ; CHECK-NOV-NEXT:    call __extendhfsf2
5260 ; CHECK-NOV-NEXT:    fcvt.l.s a0, fa0, rtz
5261 ; CHECK-NOV-NEXT:    lui a3, 16
5262 ; CHECK-NOV-NEXT:    addiw a3, a3, -1
5263 ; CHECK-NOV-NEXT:    bge a0, a3, .LBB44_10
5264 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
5265 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
5266 ; CHECK-NOV-NEXT:    bge s1, a3, .LBB44_11
5267 ; CHECK-NOV-NEXT:  .LBB44_2: # %entry
5268 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
5269 ; CHECK-NOV-NEXT:    bge a1, a3, .LBB44_12
5270 ; CHECK-NOV-NEXT:  .LBB44_3: # %entry
5271 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs3, rtz
5272 ; CHECK-NOV-NEXT:    bge a2, a3, .LBB44_13
5273 ; CHECK-NOV-NEXT:  .LBB44_4: # %entry
5274 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs2, rtz
5275 ; CHECK-NOV-NEXT:    bge a4, a3, .LBB44_14
5276 ; CHECK-NOV-NEXT:  .LBB44_5: # %entry
5277 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs1, rtz
5278 ; CHECK-NOV-NEXT:    bge a5, a3, .LBB44_15
5279 ; CHECK-NOV-NEXT:  .LBB44_6: # %entry
5280 ; CHECK-NOV-NEXT:    fcvt.l.s a7, fs0, rtz
5281 ; CHECK-NOV-NEXT:    bge a6, a3, .LBB44_16
5282 ; CHECK-NOV-NEXT:  .LBB44_7: # %entry
5283 ; CHECK-NOV-NEXT:    blt a7, a3, .LBB44_9
5284 ; CHECK-NOV-NEXT:  .LBB44_8: # %entry
5285 ; CHECK-NOV-NEXT:    mv a7, a3
5286 ; CHECK-NOV-NEXT:  .LBB44_9: # %entry
5287 ; CHECK-NOV-NEXT:    sgtz a3, a7
5288 ; CHECK-NOV-NEXT:    negw a3, a3
5289 ; CHECK-NOV-NEXT:    and a3, a3, a7
5290 ; CHECK-NOV-NEXT:    sgtz a7, a6
5291 ; CHECK-NOV-NEXT:    negw a7, a7
5292 ; CHECK-NOV-NEXT:    and a6, a7, a6
5293 ; CHECK-NOV-NEXT:    sgtz a7, a5
5294 ; CHECK-NOV-NEXT:    negw a7, a7
5295 ; CHECK-NOV-NEXT:    and a5, a7, a5
5296 ; CHECK-NOV-NEXT:    sgtz a7, a4
5297 ; CHECK-NOV-NEXT:    negw a7, a7
5298 ; CHECK-NOV-NEXT:    and a4, a7, a4
5299 ; CHECK-NOV-NEXT:    sgtz a7, a2
5300 ; CHECK-NOV-NEXT:    negw a7, a7
5301 ; CHECK-NOV-NEXT:    and a2, a7, a2
5302 ; CHECK-NOV-NEXT:    sgtz a7, a1
5303 ; CHECK-NOV-NEXT:    negw a7, a7
5304 ; CHECK-NOV-NEXT:    and a1, a7, a1
5305 ; CHECK-NOV-NEXT:    sgtz a7, s1
5306 ; CHECK-NOV-NEXT:    negw a7, a7
5307 ; CHECK-NOV-NEXT:    and a7, a7, s1
5308 ; CHECK-NOV-NEXT:    sgtz t0, a0
5309 ; CHECK-NOV-NEXT:    negw t0, t0
5310 ; CHECK-NOV-NEXT:    and a0, t0, a0
5311 ; CHECK-NOV-NEXT:    sh a0, 14(s0)
5312 ; CHECK-NOV-NEXT:    sh a7, 12(s0)
5313 ; CHECK-NOV-NEXT:    sh a1, 10(s0)
5314 ; CHECK-NOV-NEXT:    sh a2, 8(s0)
5315 ; CHECK-NOV-NEXT:    sh a4, 6(s0)
5316 ; CHECK-NOV-NEXT:    sh a5, 4(s0)
5317 ; CHECK-NOV-NEXT:    sh a6, 2(s0)
5318 ; CHECK-NOV-NEXT:    sh a3, 0(s0)
5319 ; CHECK-NOV-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
5320 ; CHECK-NOV-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
5321 ; CHECK-NOV-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
5322 ; CHECK-NOV-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
5323 ; CHECK-NOV-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
5324 ; CHECK-NOV-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
5325 ; CHECK-NOV-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
5326 ; CHECK-NOV-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
5327 ; CHECK-NOV-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
5328 ; CHECK-NOV-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
5329 ; CHECK-NOV-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
5330 ; CHECK-NOV-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
5331 ; CHECK-NOV-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
5332 ; CHECK-NOV-NEXT:    fld fs4, 16(sp) # 8-byte Folded Reload
5333 ; CHECK-NOV-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload
5334 ; CHECK-NOV-NEXT:    fld fs6, 0(sp) # 8-byte Folded Reload
5335 ; CHECK-NOV-NEXT:    addi sp, sp, 128
5336 ; CHECK-NOV-NEXT:    ret
5337 ; CHECK-NOV-NEXT:  .LBB44_10: # %entry
5338 ; CHECK-NOV-NEXT:    mv a0, a3
5339 ; CHECK-NOV-NEXT:    fcvt.l.s a1, fs5, rtz
5340 ; CHECK-NOV-NEXT:    blt s1, a3, .LBB44_2
5341 ; CHECK-NOV-NEXT:  .LBB44_11: # %entry
5342 ; CHECK-NOV-NEXT:    mv s1, a3
5343 ; CHECK-NOV-NEXT:    fcvt.l.s a2, fs4, rtz
5344 ; CHECK-NOV-NEXT:    blt a1, a3, .LBB44_3
5345 ; CHECK-NOV-NEXT:  .LBB44_12: # %entry
5346 ; CHECK-NOV-NEXT:    mv a1, a3
5347 ; CHECK-NOV-NEXT:    fcvt.l.s a4, fs3, rtz
5348 ; CHECK-NOV-NEXT:    blt a2, a3, .LBB44_4
5349 ; CHECK-NOV-NEXT:  .LBB44_13: # %entry
5350 ; CHECK-NOV-NEXT:    mv a2, a3
5351 ; CHECK-NOV-NEXT:    fcvt.l.s a5, fs2, rtz
5352 ; CHECK-NOV-NEXT:    blt a4, a3, .LBB44_5
5353 ; CHECK-NOV-NEXT:  .LBB44_14: # %entry
5354 ; CHECK-NOV-NEXT:    mv a4, a3
5355 ; CHECK-NOV-NEXT:    fcvt.l.s a6, fs1, rtz
5356 ; CHECK-NOV-NEXT:    blt a5, a3, .LBB44_6
5357 ; CHECK-NOV-NEXT:  .LBB44_15: # %entry
5358 ; CHECK-NOV-NEXT:    mv a5, a3
5359 ; CHECK-NOV-NEXT:    fcvt.l.s a7, fs0, rtz
5360 ; CHECK-NOV-NEXT:    blt a6, a3, .LBB44_7
5361 ; CHECK-NOV-NEXT:  .LBB44_16: # %entry
5362 ; CHECK-NOV-NEXT:    mv a6, a3
5363 ; CHECK-NOV-NEXT:    bge a7, a3, .LBB44_8
5364 ; CHECK-NOV-NEXT:    j .LBB44_9
5366 ; CHECK-V-LABEL: ustest_f16i16_mm:
5367 ; CHECK-V:       # %bb.0: # %entry
5368 ; CHECK-V-NEXT:    addi sp, sp, -80
5369 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 80
5370 ; CHECK-V-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
5371 ; CHECK-V-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
5372 ; CHECK-V-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
5373 ; CHECK-V-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
5374 ; CHECK-V-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
5375 ; CHECK-V-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
5376 ; CHECK-V-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill
5377 ; CHECK-V-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill
5378 ; CHECK-V-NEXT:    .cfi_offset ra, -8
5379 ; CHECK-V-NEXT:    .cfi_offset s0, -16
5380 ; CHECK-V-NEXT:    .cfi_offset s1, -24
5381 ; CHECK-V-NEXT:    .cfi_offset s2, -32
5382 ; CHECK-V-NEXT:    .cfi_offset s3, -40
5383 ; CHECK-V-NEXT:    .cfi_offset s4, -48
5384 ; CHECK-V-NEXT:    .cfi_offset s5, -56
5385 ; CHECK-V-NEXT:    .cfi_offset s6, -64
5386 ; CHECK-V-NEXT:    csrr a1, vlenb
5387 ; CHECK-V-NEXT:    slli a1, a1, 2
5388 ; CHECK-V-NEXT:    sub sp, sp, a1
5389 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xd0, 0x00, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 80 + 4 * vlenb
5390 ; CHECK-V-NEXT:    lhu s0, 0(a0)
5391 ; CHECK-V-NEXT:    lhu s1, 8(a0)
5392 ; CHECK-V-NEXT:    lhu s2, 16(a0)
5393 ; CHECK-V-NEXT:    lhu s3, 24(a0)
5394 ; CHECK-V-NEXT:    lhu s4, 32(a0)
5395 ; CHECK-V-NEXT:    lhu s5, 40(a0)
5396 ; CHECK-V-NEXT:    lhu s6, 48(a0)
5397 ; CHECK-V-NEXT:    lhu a0, 56(a0)
5398 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
5399 ; CHECK-V-NEXT:    call __extendhfsf2
5400 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5401 ; CHECK-V-NEXT:    fmv.w.x fa0, s6
5402 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5403 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5404 ; CHECK-V-NEXT:    csrr a0, vlenb
5405 ; CHECK-V-NEXT:    slli a0, a0, 1
5406 ; CHECK-V-NEXT:    add a0, sp, a0
5407 ; CHECK-V-NEXT:    addi a0, a0, 16
5408 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5409 ; CHECK-V-NEXT:    call __extendhfsf2
5410 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5411 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5412 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5413 ; CHECK-V-NEXT:    csrr a0, vlenb
5414 ; CHECK-V-NEXT:    slli a0, a0, 1
5415 ; CHECK-V-NEXT:    add a0, sp, a0
5416 ; CHECK-V-NEXT:    addi a0, a0, 16
5417 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5418 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5419 ; CHECK-V-NEXT:    csrr a0, vlenb
5420 ; CHECK-V-NEXT:    add a0, sp, a0
5421 ; CHECK-V-NEXT:    addi a0, a0, 16
5422 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5423 ; CHECK-V-NEXT:    fmv.w.x fa0, s5
5424 ; CHECK-V-NEXT:    call __extendhfsf2
5425 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5426 ; CHECK-V-NEXT:    fmv.w.x fa0, s4
5427 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5428 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5429 ; CHECK-V-NEXT:    csrr a0, vlenb
5430 ; CHECK-V-NEXT:    slli a0, a0, 1
5431 ; CHECK-V-NEXT:    add a0, sp, a0
5432 ; CHECK-V-NEXT:    addi a0, a0, 16
5433 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5434 ; CHECK-V-NEXT:    call __extendhfsf2
5435 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5436 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5437 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5438 ; CHECK-V-NEXT:    csrr a0, vlenb
5439 ; CHECK-V-NEXT:    slli a0, a0, 1
5440 ; CHECK-V-NEXT:    add a0, sp, a0
5441 ; CHECK-V-NEXT:    addi a0, a0, 16
5442 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5443 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5444 ; CHECK-V-NEXT:    csrr a0, vlenb
5445 ; CHECK-V-NEXT:    add a0, sp, a0
5446 ; CHECK-V-NEXT:    addi a0, a0, 16
5447 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5448 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5449 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
5450 ; CHECK-V-NEXT:    csrr a0, vlenb
5451 ; CHECK-V-NEXT:    slli a0, a0, 1
5452 ; CHECK-V-NEXT:    add a0, sp, a0
5453 ; CHECK-V-NEXT:    addi a0, a0, 16
5454 ; CHECK-V-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
5455 ; CHECK-V-NEXT:    fmv.w.x fa0, s3
5456 ; CHECK-V-NEXT:    call __extendhfsf2
5457 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5458 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
5459 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5460 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5461 ; CHECK-V-NEXT:    addi a0, sp, 16
5462 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5463 ; CHECK-V-NEXT:    call __extendhfsf2
5464 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5465 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5466 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5467 ; CHECK-V-NEXT:    addi a0, sp, 16
5468 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5469 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5470 ; CHECK-V-NEXT:    csrr a0, vlenb
5471 ; CHECK-V-NEXT:    add a0, sp, a0
5472 ; CHECK-V-NEXT:    addi a0, a0, 16
5473 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5474 ; CHECK-V-NEXT:    fmv.w.x fa0, s1
5475 ; CHECK-V-NEXT:    call __extendhfsf2
5476 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5477 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
5478 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5479 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5480 ; CHECK-V-NEXT:    addi a0, sp, 16
5481 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5482 ; CHECK-V-NEXT:    call __extendhfsf2
5483 ; CHECK-V-NEXT:    fcvt.l.s a0, fa0, rtz
5484 ; CHECK-V-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5485 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5486 ; CHECK-V-NEXT:    addi a0, sp, 16
5487 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5488 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5489 ; CHECK-V-NEXT:    csrr a0, vlenb
5490 ; CHECK-V-NEXT:    add a0, sp, a0
5491 ; CHECK-V-NEXT:    addi a0, a0, 16
5492 ; CHECK-V-NEXT:    vl1r.v v9, (a0) # Unknown-size Folded Reload
5493 ; CHECK-V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5494 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 2
5495 ; CHECK-V-NEXT:    csrr a0, vlenb
5496 ; CHECK-V-NEXT:    slli a0, a0, 1
5497 ; CHECK-V-NEXT:    add a0, sp, a0
5498 ; CHECK-V-NEXT:    addi a0, a0, 16
5499 ; CHECK-V-NEXT:    vl2r.v v10, (a0) # Unknown-size Folded Reload
5500 ; CHECK-V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5501 ; CHECK-V-NEXT:    vslideup.vi v8, v10, 4
5502 ; CHECK-V-NEXT:    lui a0, 16
5503 ; CHECK-V-NEXT:    addi a0, a0, -1
5504 ; CHECK-V-NEXT:    vmin.vx v8, v8, a0
5505 ; CHECK-V-NEXT:    vmax.vx v10, v8, zero
5506 ; CHECK-V-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5507 ; CHECK-V-NEXT:    vnsrl.wi v8, v10, 0
5508 ; CHECK-V-NEXT:    csrr a0, vlenb
5509 ; CHECK-V-NEXT:    slli a0, a0, 2
5510 ; CHECK-V-NEXT:    add sp, sp, a0
5511 ; CHECK-V-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
5512 ; CHECK-V-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
5513 ; CHECK-V-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
5514 ; CHECK-V-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
5515 ; CHECK-V-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
5516 ; CHECK-V-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
5517 ; CHECK-V-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload
5518 ; CHECK-V-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload
5519 ; CHECK-V-NEXT:    addi sp, sp, 80
5520 ; CHECK-V-NEXT:    ret
5521 entry:
5522   %conv = fptosi <8 x half> %x to <8 x i32>
5523   %spec.store.select = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>)
5524   %spec.store.select7 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %spec.store.select, <8 x i32> zeroinitializer)
5525   %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>
5526   ret <8 x i16> %conv6
5529 ; i64 saturate
5531 define <2 x i64> @stest_f64i64_mm(<2 x double> %x) {
5532 ; CHECK-NOV-LABEL: stest_f64i64_mm:
5533 ; CHECK-NOV:       # %bb.0: # %entry
5534 ; CHECK-NOV-NEXT:    addi sp, sp, -32
5535 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
5536 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
5537 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
5538 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
5539 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
5540 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
5541 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
5542 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
5543 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
5544 ; CHECK-NOV-NEXT:    fmv.d fs0, fa1
5545 ; CHECK-NOV-NEXT:    call __fixdfti
5546 ; CHECK-NOV-NEXT:    mv s0, a0
5547 ; CHECK-NOV-NEXT:    mv s1, a1
5548 ; CHECK-NOV-NEXT:    fmv.d fa0, fs0
5549 ; CHECK-NOV-NEXT:    call __fixdfti
5550 ; CHECK-NOV-NEXT:    mv a2, a0
5551 ; CHECK-NOV-NEXT:    li a0, -1
5552 ; CHECK-NOV-NEXT:    srli a3, a0, 1
5553 ; CHECK-NOV-NEXT:    beqz a1, .LBB45_2
5554 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
5555 ; CHECK-NOV-NEXT:    slti a4, a1, 0
5556 ; CHECK-NOV-NEXT:    beqz a4, .LBB45_3
5557 ; CHECK-NOV-NEXT:    j .LBB45_4
5558 ; CHECK-NOV-NEXT:  .LBB45_2:
5559 ; CHECK-NOV-NEXT:    sltu a4, a2, a3
5560 ; CHECK-NOV-NEXT:    bnez a4, .LBB45_4
5561 ; CHECK-NOV-NEXT:  .LBB45_3: # %entry
5562 ; CHECK-NOV-NEXT:    mv a2, a3
5563 ; CHECK-NOV-NEXT:  .LBB45_4: # %entry
5564 ; CHECK-NOV-NEXT:    beqz s1, .LBB45_6
5565 ; CHECK-NOV-NEXT:  # %bb.5: # %entry
5566 ; CHECK-NOV-NEXT:    slti a6, s1, 0
5567 ; CHECK-NOV-NEXT:    j .LBB45_7
5568 ; CHECK-NOV-NEXT:  .LBB45_6:
5569 ; CHECK-NOV-NEXT:    sltu a6, s0, a3
5570 ; CHECK-NOV-NEXT:  .LBB45_7: # %entry
5571 ; CHECK-NOV-NEXT:    neg a5, a6
5572 ; CHECK-NOV-NEXT:    and a5, a5, s1
5573 ; CHECK-NOV-NEXT:    bnez a6, .LBB45_9
5574 ; CHECK-NOV-NEXT:  # %bb.8: # %entry
5575 ; CHECK-NOV-NEXT:    mv s0, a3
5576 ; CHECK-NOV-NEXT:  .LBB45_9: # %entry
5577 ; CHECK-NOV-NEXT:    neg a4, a4
5578 ; CHECK-NOV-NEXT:    slli a3, a0, 63
5579 ; CHECK-NOV-NEXT:    beq a5, a0, .LBB45_11
5580 ; CHECK-NOV-NEXT:  # %bb.10: # %entry
5581 ; CHECK-NOV-NEXT:    slti a5, a5, 0
5582 ; CHECK-NOV-NEXT:    xori a5, a5, 1
5583 ; CHECK-NOV-NEXT:    and a1, a4, a1
5584 ; CHECK-NOV-NEXT:    beqz a5, .LBB45_12
5585 ; CHECK-NOV-NEXT:    j .LBB45_13
5586 ; CHECK-NOV-NEXT:  .LBB45_11:
5587 ; CHECK-NOV-NEXT:    sltu a5, a3, s0
5588 ; CHECK-NOV-NEXT:    and a1, a4, a1
5589 ; CHECK-NOV-NEXT:    bnez a5, .LBB45_13
5590 ; CHECK-NOV-NEXT:  .LBB45_12: # %entry
5591 ; CHECK-NOV-NEXT:    mv s0, a3
5592 ; CHECK-NOV-NEXT:  .LBB45_13: # %entry
5593 ; CHECK-NOV-NEXT:    beq a1, a0, .LBB45_15
5594 ; CHECK-NOV-NEXT:  # %bb.14: # %entry
5595 ; CHECK-NOV-NEXT:    slti a0, a1, 0
5596 ; CHECK-NOV-NEXT:    xori a0, a0, 1
5597 ; CHECK-NOV-NEXT:    beqz a0, .LBB45_16
5598 ; CHECK-NOV-NEXT:    j .LBB45_17
5599 ; CHECK-NOV-NEXT:  .LBB45_15:
5600 ; CHECK-NOV-NEXT:    sltu a0, a3, a2
5601 ; CHECK-NOV-NEXT:    bnez a0, .LBB45_17
5602 ; CHECK-NOV-NEXT:  .LBB45_16: # %entry
5603 ; CHECK-NOV-NEXT:    mv a2, a3
5604 ; CHECK-NOV-NEXT:  .LBB45_17: # %entry
5605 ; CHECK-NOV-NEXT:    mv a0, s0
5606 ; CHECK-NOV-NEXT:    mv a1, a2
5607 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
5608 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
5609 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
5610 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
5611 ; CHECK-NOV-NEXT:    addi sp, sp, 32
5612 ; CHECK-NOV-NEXT:    ret
5614 ; CHECK-V-LABEL: stest_f64i64_mm:
5615 ; CHECK-V:       # %bb.0: # %entry
5616 ; CHECK-V-NEXT:    addi sp, sp, -64
5617 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
5618 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
5619 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
5620 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
5621 ; CHECK-V-NEXT:    .cfi_offset ra, -8
5622 ; CHECK-V-NEXT:    .cfi_offset s0, -16
5623 ; CHECK-V-NEXT:    .cfi_offset s1, -24
5624 ; CHECK-V-NEXT:    csrr a0, vlenb
5625 ; CHECK-V-NEXT:    slli a0, a0, 1
5626 ; CHECK-V-NEXT:    sub sp, sp, a0
5627 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
5628 ; CHECK-V-NEXT:    addi a0, sp, 32
5629 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5630 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
5631 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
5632 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
5633 ; CHECK-V-NEXT:    call __fixdfti
5634 ; CHECK-V-NEXT:    mv s0, a0
5635 ; CHECK-V-NEXT:    mv s1, a1
5636 ; CHECK-V-NEXT:    addi a0, sp, 32
5637 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
5638 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
5639 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
5640 ; CHECK-V-NEXT:    call __fixdfti
5641 ; CHECK-V-NEXT:    li a2, -1
5642 ; CHECK-V-NEXT:    srli a3, a2, 1
5643 ; CHECK-V-NEXT:    beqz a1, .LBB45_2
5644 ; CHECK-V-NEXT:  # %bb.1: # %entry
5645 ; CHECK-V-NEXT:    slti a4, a1, 0
5646 ; CHECK-V-NEXT:    beqz a4, .LBB45_3
5647 ; CHECK-V-NEXT:    j .LBB45_4
5648 ; CHECK-V-NEXT:  .LBB45_2:
5649 ; CHECK-V-NEXT:    sltu a4, a0, a3
5650 ; CHECK-V-NEXT:    bnez a4, .LBB45_4
5651 ; CHECK-V-NEXT:  .LBB45_3: # %entry
5652 ; CHECK-V-NEXT:    mv a0, a3
5653 ; CHECK-V-NEXT:  .LBB45_4: # %entry
5654 ; CHECK-V-NEXT:    beqz s1, .LBB45_6
5655 ; CHECK-V-NEXT:  # %bb.5: # %entry
5656 ; CHECK-V-NEXT:    slti a6, s1, 0
5657 ; CHECK-V-NEXT:    j .LBB45_7
5658 ; CHECK-V-NEXT:  .LBB45_6:
5659 ; CHECK-V-NEXT:    sltu a6, s0, a3
5660 ; CHECK-V-NEXT:  .LBB45_7: # %entry
5661 ; CHECK-V-NEXT:    neg a5, a6
5662 ; CHECK-V-NEXT:    and a5, a5, s1
5663 ; CHECK-V-NEXT:    bnez a6, .LBB45_9
5664 ; CHECK-V-NEXT:  # %bb.8: # %entry
5665 ; CHECK-V-NEXT:    mv s0, a3
5666 ; CHECK-V-NEXT:  .LBB45_9: # %entry
5667 ; CHECK-V-NEXT:    neg a4, a4
5668 ; CHECK-V-NEXT:    slli a3, a2, 63
5669 ; CHECK-V-NEXT:    beq a5, a2, .LBB45_11
5670 ; CHECK-V-NEXT:  # %bb.10: # %entry
5671 ; CHECK-V-NEXT:    slti a5, a5, 0
5672 ; CHECK-V-NEXT:    xori a5, a5, 1
5673 ; CHECK-V-NEXT:    and a1, a4, a1
5674 ; CHECK-V-NEXT:    beqz a5, .LBB45_12
5675 ; CHECK-V-NEXT:    j .LBB45_13
5676 ; CHECK-V-NEXT:  .LBB45_11:
5677 ; CHECK-V-NEXT:    sltu a5, a3, s0
5678 ; CHECK-V-NEXT:    and a1, a4, a1
5679 ; CHECK-V-NEXT:    bnez a5, .LBB45_13
5680 ; CHECK-V-NEXT:  .LBB45_12: # %entry
5681 ; CHECK-V-NEXT:    mv s0, a3
5682 ; CHECK-V-NEXT:  .LBB45_13: # %entry
5683 ; CHECK-V-NEXT:    beq a1, a2, .LBB45_15
5684 ; CHECK-V-NEXT:  # %bb.14: # %entry
5685 ; CHECK-V-NEXT:    slti a1, a1, 0
5686 ; CHECK-V-NEXT:    xori a1, a1, 1
5687 ; CHECK-V-NEXT:    beqz a1, .LBB45_16
5688 ; CHECK-V-NEXT:    j .LBB45_17
5689 ; CHECK-V-NEXT:  .LBB45_15:
5690 ; CHECK-V-NEXT:    sltu a1, a3, a0
5691 ; CHECK-V-NEXT:    bnez a1, .LBB45_17
5692 ; CHECK-V-NEXT:  .LBB45_16: # %entry
5693 ; CHECK-V-NEXT:    mv a0, a3
5694 ; CHECK-V-NEXT:  .LBB45_17: # %entry
5695 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
5696 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5697 ; CHECK-V-NEXT:    vmv.s.x v9, s0
5698 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5699 ; CHECK-V-NEXT:    csrr a0, vlenb
5700 ; CHECK-V-NEXT:    slli a0, a0, 1
5701 ; CHECK-V-NEXT:    add sp, sp, a0
5702 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
5703 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
5704 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
5705 ; CHECK-V-NEXT:    addi sp, sp, 64
5706 ; CHECK-V-NEXT:    ret
5707 entry:
5708   %conv = fptosi <2 x double> %x to <2 x i128>
5709   %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)
5710   %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)
5711   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
5712   ret <2 x i64> %conv6
5715 define <2 x i64> @utest_f64i64_mm(<2 x double> %x) {
5716 ; CHECK-NOV-LABEL: utest_f64i64_mm:
5717 ; CHECK-NOV:       # %bb.0: # %entry
5718 ; CHECK-NOV-NEXT:    addi sp, sp, -32
5719 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
5720 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
5721 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
5722 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
5723 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
5724 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
5725 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
5726 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
5727 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
5728 ; CHECK-NOV-NEXT:    fmv.d fs0, fa0
5729 ; CHECK-NOV-NEXT:    fmv.d fa0, fa1
5730 ; CHECK-NOV-NEXT:    call __fixunsdfti
5731 ; CHECK-NOV-NEXT:    mv s0, a0
5732 ; CHECK-NOV-NEXT:    mv s1, a1
5733 ; CHECK-NOV-NEXT:    fmv.d fa0, fs0
5734 ; CHECK-NOV-NEXT:    call __fixunsdfti
5735 ; CHECK-NOV-NEXT:    snez a1, a1
5736 ; CHECK-NOV-NEXT:    addi a1, a1, -1
5737 ; CHECK-NOV-NEXT:    and a0, a1, a0
5738 ; CHECK-NOV-NEXT:    snez a1, s1
5739 ; CHECK-NOV-NEXT:    addi a1, a1, -1
5740 ; CHECK-NOV-NEXT:    and a1, a1, s0
5741 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
5742 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
5743 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
5744 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
5745 ; CHECK-NOV-NEXT:    addi sp, sp, 32
5746 ; CHECK-NOV-NEXT:    ret
5748 ; CHECK-V-LABEL: utest_f64i64_mm:
5749 ; CHECK-V:       # %bb.0: # %entry
5750 ; CHECK-V-NEXT:    addi sp, sp, -64
5751 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
5752 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
5753 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
5754 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
5755 ; CHECK-V-NEXT:    .cfi_offset ra, -8
5756 ; CHECK-V-NEXT:    .cfi_offset s0, -16
5757 ; CHECK-V-NEXT:    .cfi_offset s1, -24
5758 ; CHECK-V-NEXT:    csrr a0, vlenb
5759 ; CHECK-V-NEXT:    slli a0, a0, 1
5760 ; CHECK-V-NEXT:    sub sp, sp, a0
5761 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
5762 ; CHECK-V-NEXT:    addi a0, sp, 32
5763 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5764 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
5765 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
5766 ; CHECK-V-NEXT:    call __fixunsdfti
5767 ; CHECK-V-NEXT:    mv s0, a0
5768 ; CHECK-V-NEXT:    mv s1, a1
5769 ; CHECK-V-NEXT:    addi a0, sp, 32
5770 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
5771 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
5772 ; CHECK-V-NEXT:    vslidedown.vi v8, v8, 1
5773 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
5774 ; CHECK-V-NEXT:    call __fixunsdfti
5775 ; CHECK-V-NEXT:    snez a1, a1
5776 ; CHECK-V-NEXT:    addi a1, a1, -1
5777 ; CHECK-V-NEXT:    and a0, a1, a0
5778 ; CHECK-V-NEXT:    snez a1, s1
5779 ; CHECK-V-NEXT:    addi a1, a1, -1
5780 ; CHECK-V-NEXT:    and a1, a1, s0
5781 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
5782 ; CHECK-V-NEXT:    vmv.s.x v8, a1
5783 ; CHECK-V-NEXT:    vmv.s.x v9, a0
5784 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5785 ; CHECK-V-NEXT:    csrr a0, vlenb
5786 ; CHECK-V-NEXT:    slli a0, a0, 1
5787 ; CHECK-V-NEXT:    add sp, sp, a0
5788 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
5789 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
5790 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
5791 ; CHECK-V-NEXT:    addi sp, sp, 64
5792 ; CHECK-V-NEXT:    ret
5793 entry:
5794   %conv = fptoui <2 x double> %x to <2 x i128>
5795   %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)
5796   %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>
5797   ret <2 x i64> %conv6
5800 define <2 x i64> @ustest_f64i64_mm(<2 x double> %x) {
5801 ; CHECK-NOV-LABEL: ustest_f64i64_mm:
5802 ; CHECK-NOV:       # %bb.0: # %entry
5803 ; CHECK-NOV-NEXT:    addi sp, sp, -32
5804 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
5805 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
5806 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
5807 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
5808 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
5809 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
5810 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
5811 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
5812 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
5813 ; CHECK-NOV-NEXT:    fmv.d fs0, fa1
5814 ; CHECK-NOV-NEXT:    call __fixdfti
5815 ; CHECK-NOV-NEXT:    mv s0, a0
5816 ; CHECK-NOV-NEXT:    mv s1, a1
5817 ; CHECK-NOV-NEXT:    fmv.d fa0, fs0
5818 ; CHECK-NOV-NEXT:    call __fixdfti
5819 ; CHECK-NOV-NEXT:    mv a2, a1
5820 ; CHECK-NOV-NEXT:    blez a1, .LBB47_2
5821 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
5822 ; CHECK-NOV-NEXT:    li a2, 1
5823 ; CHECK-NOV-NEXT:  .LBB47_2: # %entry
5824 ; CHECK-NOV-NEXT:    mv a3, s1
5825 ; CHECK-NOV-NEXT:    blez s1, .LBB47_4
5826 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
5827 ; CHECK-NOV-NEXT:    li a3, 1
5828 ; CHECK-NOV-NEXT:  .LBB47_4: # %entry
5829 ; CHECK-NOV-NEXT:    slti a1, a1, 1
5830 ; CHECK-NOV-NEXT:    neg a1, a1
5831 ; CHECK-NOV-NEXT:    and a1, a1, a0
5832 ; CHECK-NOV-NEXT:    slti a0, s1, 1
5833 ; CHECK-NOV-NEXT:    neg a0, a0
5834 ; CHECK-NOV-NEXT:    and a0, a0, s0
5835 ; CHECK-NOV-NEXT:    slti a3, a3, 0
5836 ; CHECK-NOV-NEXT:    addi a3, a3, -1
5837 ; CHECK-NOV-NEXT:    and a0, a3, a0
5838 ; CHECK-NOV-NEXT:    slti a2, a2, 0
5839 ; CHECK-NOV-NEXT:    addi a2, a2, -1
5840 ; CHECK-NOV-NEXT:    and a1, a2, a1
5841 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
5842 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
5843 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
5844 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
5845 ; CHECK-NOV-NEXT:    addi sp, sp, 32
5846 ; CHECK-NOV-NEXT:    ret
5848 ; CHECK-V-LABEL: ustest_f64i64_mm:
5849 ; CHECK-V:       # %bb.0: # %entry
5850 ; CHECK-V-NEXT:    addi sp, sp, -64
5851 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
5852 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
5853 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
5854 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
5855 ; CHECK-V-NEXT:    .cfi_offset ra, -8
5856 ; CHECK-V-NEXT:    .cfi_offset s0, -16
5857 ; CHECK-V-NEXT:    .cfi_offset s1, -24
5858 ; CHECK-V-NEXT:    csrr a0, vlenb
5859 ; CHECK-V-NEXT:    slli a0, a0, 1
5860 ; CHECK-V-NEXT:    sub sp, sp, a0
5861 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
5862 ; CHECK-V-NEXT:    addi a0, sp, 32
5863 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
5864 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
5865 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
5866 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
5867 ; CHECK-V-NEXT:    call __fixdfti
5868 ; CHECK-V-NEXT:    mv s0, a0
5869 ; CHECK-V-NEXT:    mv s1, a1
5870 ; CHECK-V-NEXT:    addi a0, sp, 32
5871 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
5872 ; CHECK-V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
5873 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
5874 ; CHECK-V-NEXT:    call __fixdfti
5875 ; CHECK-V-NEXT:    mv a2, a1
5876 ; CHECK-V-NEXT:    blez a1, .LBB47_2
5877 ; CHECK-V-NEXT:  # %bb.1: # %entry
5878 ; CHECK-V-NEXT:    li a2, 1
5879 ; CHECK-V-NEXT:  .LBB47_2: # %entry
5880 ; CHECK-V-NEXT:    mv a3, s1
5881 ; CHECK-V-NEXT:    blez s1, .LBB47_4
5882 ; CHECK-V-NEXT:  # %bb.3: # %entry
5883 ; CHECK-V-NEXT:    li a3, 1
5884 ; CHECK-V-NEXT:  .LBB47_4: # %entry
5885 ; CHECK-V-NEXT:    slti a1, a1, 1
5886 ; CHECK-V-NEXT:    neg a1, a1
5887 ; CHECK-V-NEXT:    and a0, a1, a0
5888 ; CHECK-V-NEXT:    slti a1, s1, 1
5889 ; CHECK-V-NEXT:    neg a1, a1
5890 ; CHECK-V-NEXT:    and a1, a1, s0
5891 ; CHECK-V-NEXT:    slti a3, a3, 0
5892 ; CHECK-V-NEXT:    addi a3, a3, -1
5893 ; CHECK-V-NEXT:    and a1, a3, a1
5894 ; CHECK-V-NEXT:    slti a2, a2, 0
5895 ; CHECK-V-NEXT:    addi a2, a2, -1
5896 ; CHECK-V-NEXT:    and a0, a2, a0
5897 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
5898 ; CHECK-V-NEXT:    vmv.s.x v8, a0
5899 ; CHECK-V-NEXT:    vmv.s.x v9, a1
5900 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
5901 ; CHECK-V-NEXT:    csrr a0, vlenb
5902 ; CHECK-V-NEXT:    slli a0, a0, 1
5903 ; CHECK-V-NEXT:    add sp, sp, a0
5904 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
5905 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
5906 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
5907 ; CHECK-V-NEXT:    addi sp, sp, 64
5908 ; CHECK-V-NEXT:    ret
5909 entry:
5910   %conv = fptosi <2 x double> %x to <2 x i128>
5911   %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)
5912   %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)
5913   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
5914   ret <2 x i64> %conv6
5917 define <2 x i64> @stest_f32i64_mm(<2 x float> %x) {
5918 ; CHECK-NOV-LABEL: stest_f32i64_mm:
5919 ; CHECK-NOV:       # %bb.0: # %entry
5920 ; CHECK-NOV-NEXT:    addi sp, sp, -32
5921 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
5922 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
5923 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
5924 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
5925 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
5926 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
5927 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
5928 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
5929 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
5930 ; CHECK-NOV-NEXT:    fmv.s fs0, fa1
5931 ; CHECK-NOV-NEXT:    call __fixsfti
5932 ; CHECK-NOV-NEXT:    mv s0, a0
5933 ; CHECK-NOV-NEXT:    mv s1, a1
5934 ; CHECK-NOV-NEXT:    fmv.s fa0, fs0
5935 ; CHECK-NOV-NEXT:    call __fixsfti
5936 ; CHECK-NOV-NEXT:    mv a2, a0
5937 ; CHECK-NOV-NEXT:    li a0, -1
5938 ; CHECK-NOV-NEXT:    srli a3, a0, 1
5939 ; CHECK-NOV-NEXT:    beqz a1, .LBB48_2
5940 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
5941 ; CHECK-NOV-NEXT:    slti a4, a1, 0
5942 ; CHECK-NOV-NEXT:    beqz a4, .LBB48_3
5943 ; CHECK-NOV-NEXT:    j .LBB48_4
5944 ; CHECK-NOV-NEXT:  .LBB48_2:
5945 ; CHECK-NOV-NEXT:    sltu a4, a2, a3
5946 ; CHECK-NOV-NEXT:    bnez a4, .LBB48_4
5947 ; CHECK-NOV-NEXT:  .LBB48_3: # %entry
5948 ; CHECK-NOV-NEXT:    mv a2, a3
5949 ; CHECK-NOV-NEXT:  .LBB48_4: # %entry
5950 ; CHECK-NOV-NEXT:    beqz s1, .LBB48_6
5951 ; CHECK-NOV-NEXT:  # %bb.5: # %entry
5952 ; CHECK-NOV-NEXT:    slti a6, s1, 0
5953 ; CHECK-NOV-NEXT:    j .LBB48_7
5954 ; CHECK-NOV-NEXT:  .LBB48_6:
5955 ; CHECK-NOV-NEXT:    sltu a6, s0, a3
5956 ; CHECK-NOV-NEXT:  .LBB48_7: # %entry
5957 ; CHECK-NOV-NEXT:    neg a5, a6
5958 ; CHECK-NOV-NEXT:    and a5, a5, s1
5959 ; CHECK-NOV-NEXT:    bnez a6, .LBB48_9
5960 ; CHECK-NOV-NEXT:  # %bb.8: # %entry
5961 ; CHECK-NOV-NEXT:    mv s0, a3
5962 ; CHECK-NOV-NEXT:  .LBB48_9: # %entry
5963 ; CHECK-NOV-NEXT:    neg a4, a4
5964 ; CHECK-NOV-NEXT:    slli a3, a0, 63
5965 ; CHECK-NOV-NEXT:    beq a5, a0, .LBB48_11
5966 ; CHECK-NOV-NEXT:  # %bb.10: # %entry
5967 ; CHECK-NOV-NEXT:    slti a5, a5, 0
5968 ; CHECK-NOV-NEXT:    xori a5, a5, 1
5969 ; CHECK-NOV-NEXT:    and a1, a4, a1
5970 ; CHECK-NOV-NEXT:    beqz a5, .LBB48_12
5971 ; CHECK-NOV-NEXT:    j .LBB48_13
5972 ; CHECK-NOV-NEXT:  .LBB48_11:
5973 ; CHECK-NOV-NEXT:    sltu a5, a3, s0
5974 ; CHECK-NOV-NEXT:    and a1, a4, a1
5975 ; CHECK-NOV-NEXT:    bnez a5, .LBB48_13
5976 ; CHECK-NOV-NEXT:  .LBB48_12: # %entry
5977 ; CHECK-NOV-NEXT:    mv s0, a3
5978 ; CHECK-NOV-NEXT:  .LBB48_13: # %entry
5979 ; CHECK-NOV-NEXT:    beq a1, a0, .LBB48_15
5980 ; CHECK-NOV-NEXT:  # %bb.14: # %entry
5981 ; CHECK-NOV-NEXT:    slti a0, a1, 0
5982 ; CHECK-NOV-NEXT:    xori a0, a0, 1
5983 ; CHECK-NOV-NEXT:    beqz a0, .LBB48_16
5984 ; CHECK-NOV-NEXT:    j .LBB48_17
5985 ; CHECK-NOV-NEXT:  .LBB48_15:
5986 ; CHECK-NOV-NEXT:    sltu a0, a3, a2
5987 ; CHECK-NOV-NEXT:    bnez a0, .LBB48_17
5988 ; CHECK-NOV-NEXT:  .LBB48_16: # %entry
5989 ; CHECK-NOV-NEXT:    mv a2, a3
5990 ; CHECK-NOV-NEXT:  .LBB48_17: # %entry
5991 ; CHECK-NOV-NEXT:    mv a0, s0
5992 ; CHECK-NOV-NEXT:    mv a1, a2
5993 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
5994 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
5995 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
5996 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
5997 ; CHECK-NOV-NEXT:    addi sp, sp, 32
5998 ; CHECK-NOV-NEXT:    ret
6000 ; CHECK-V-LABEL: stest_f32i64_mm:
6001 ; CHECK-V:       # %bb.0: # %entry
6002 ; CHECK-V-NEXT:    addi sp, sp, -64
6003 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
6004 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
6005 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
6006 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
6007 ; CHECK-V-NEXT:    .cfi_offset ra, -8
6008 ; CHECK-V-NEXT:    .cfi_offset s0, -16
6009 ; CHECK-V-NEXT:    .cfi_offset s1, -24
6010 ; CHECK-V-NEXT:    csrr a0, vlenb
6011 ; CHECK-V-NEXT:    slli a0, a0, 1
6012 ; CHECK-V-NEXT:    sub sp, sp, a0
6013 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
6014 ; CHECK-V-NEXT:    addi a0, sp, 32
6015 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
6016 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
6017 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
6018 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
6019 ; CHECK-V-NEXT:    call __fixsfti
6020 ; CHECK-V-NEXT:    mv s0, a0
6021 ; CHECK-V-NEXT:    mv s1, a1
6022 ; CHECK-V-NEXT:    addi a0, sp, 32
6023 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
6024 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
6025 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
6026 ; CHECK-V-NEXT:    call __fixsfti
6027 ; CHECK-V-NEXT:    li a2, -1
6028 ; CHECK-V-NEXT:    srli a3, a2, 1
6029 ; CHECK-V-NEXT:    beqz a1, .LBB48_2
6030 ; CHECK-V-NEXT:  # %bb.1: # %entry
6031 ; CHECK-V-NEXT:    slti a4, a1, 0
6032 ; CHECK-V-NEXT:    beqz a4, .LBB48_3
6033 ; CHECK-V-NEXT:    j .LBB48_4
6034 ; CHECK-V-NEXT:  .LBB48_2:
6035 ; CHECK-V-NEXT:    sltu a4, a0, a3
6036 ; CHECK-V-NEXT:    bnez a4, .LBB48_4
6037 ; CHECK-V-NEXT:  .LBB48_3: # %entry
6038 ; CHECK-V-NEXT:    mv a0, a3
6039 ; CHECK-V-NEXT:  .LBB48_4: # %entry
6040 ; CHECK-V-NEXT:    beqz s1, .LBB48_6
6041 ; CHECK-V-NEXT:  # %bb.5: # %entry
6042 ; CHECK-V-NEXT:    slti a6, s1, 0
6043 ; CHECK-V-NEXT:    j .LBB48_7
6044 ; CHECK-V-NEXT:  .LBB48_6:
6045 ; CHECK-V-NEXT:    sltu a6, s0, a3
6046 ; CHECK-V-NEXT:  .LBB48_7: # %entry
6047 ; CHECK-V-NEXT:    neg a5, a6
6048 ; CHECK-V-NEXT:    and a5, a5, s1
6049 ; CHECK-V-NEXT:    bnez a6, .LBB48_9
6050 ; CHECK-V-NEXT:  # %bb.8: # %entry
6051 ; CHECK-V-NEXT:    mv s0, a3
6052 ; CHECK-V-NEXT:  .LBB48_9: # %entry
6053 ; CHECK-V-NEXT:    neg a4, a4
6054 ; CHECK-V-NEXT:    slli a3, a2, 63
6055 ; CHECK-V-NEXT:    beq a5, a2, .LBB48_11
6056 ; CHECK-V-NEXT:  # %bb.10: # %entry
6057 ; CHECK-V-NEXT:    slti a5, a5, 0
6058 ; CHECK-V-NEXT:    xori a5, a5, 1
6059 ; CHECK-V-NEXT:    and a1, a4, a1
6060 ; CHECK-V-NEXT:    beqz a5, .LBB48_12
6061 ; CHECK-V-NEXT:    j .LBB48_13
6062 ; CHECK-V-NEXT:  .LBB48_11:
6063 ; CHECK-V-NEXT:    sltu a5, a3, s0
6064 ; CHECK-V-NEXT:    and a1, a4, a1
6065 ; CHECK-V-NEXT:    bnez a5, .LBB48_13
6066 ; CHECK-V-NEXT:  .LBB48_12: # %entry
6067 ; CHECK-V-NEXT:    mv s0, a3
6068 ; CHECK-V-NEXT:  .LBB48_13: # %entry
6069 ; CHECK-V-NEXT:    beq a1, a2, .LBB48_15
6070 ; CHECK-V-NEXT:  # %bb.14: # %entry
6071 ; CHECK-V-NEXT:    slti a1, a1, 0
6072 ; CHECK-V-NEXT:    xori a1, a1, 1
6073 ; CHECK-V-NEXT:    beqz a1, .LBB48_16
6074 ; CHECK-V-NEXT:    j .LBB48_17
6075 ; CHECK-V-NEXT:  .LBB48_15:
6076 ; CHECK-V-NEXT:    sltu a1, a3, a0
6077 ; CHECK-V-NEXT:    bnez a1, .LBB48_17
6078 ; CHECK-V-NEXT:  .LBB48_16: # %entry
6079 ; CHECK-V-NEXT:    mv a0, a3
6080 ; CHECK-V-NEXT:  .LBB48_17: # %entry
6081 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
6082 ; CHECK-V-NEXT:    vmv.s.x v8, a0
6083 ; CHECK-V-NEXT:    vmv.s.x v9, s0
6084 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
6085 ; CHECK-V-NEXT:    csrr a0, vlenb
6086 ; CHECK-V-NEXT:    slli a0, a0, 1
6087 ; CHECK-V-NEXT:    add sp, sp, a0
6088 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
6089 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
6090 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
6091 ; CHECK-V-NEXT:    addi sp, sp, 64
6092 ; CHECK-V-NEXT:    ret
6093 entry:
6094   %conv = fptosi <2 x float> %x to <2 x i128>
6095   %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)
6096   %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)
6097   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
6098   ret <2 x i64> %conv6
6101 define <2 x i64> @utest_f32i64_mm(<2 x float> %x) {
6102 ; CHECK-NOV-LABEL: utest_f32i64_mm:
6103 ; CHECK-NOV:       # %bb.0: # %entry
6104 ; CHECK-NOV-NEXT:    addi sp, sp, -32
6105 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
6106 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6107 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6108 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6109 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
6110 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
6111 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
6112 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
6113 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
6114 ; CHECK-NOV-NEXT:    fmv.s fs0, fa0
6115 ; CHECK-NOV-NEXT:    fmv.s fa0, fa1
6116 ; CHECK-NOV-NEXT:    call __fixunssfti
6117 ; CHECK-NOV-NEXT:    mv s0, a0
6118 ; CHECK-NOV-NEXT:    mv s1, a1
6119 ; CHECK-NOV-NEXT:    fmv.s fa0, fs0
6120 ; CHECK-NOV-NEXT:    call __fixunssfti
6121 ; CHECK-NOV-NEXT:    snez a1, a1
6122 ; CHECK-NOV-NEXT:    addi a1, a1, -1
6123 ; CHECK-NOV-NEXT:    and a0, a1, a0
6124 ; CHECK-NOV-NEXT:    snez a1, s1
6125 ; CHECK-NOV-NEXT:    addi a1, a1, -1
6126 ; CHECK-NOV-NEXT:    and a1, a1, s0
6127 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6128 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6129 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6130 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
6131 ; CHECK-NOV-NEXT:    addi sp, sp, 32
6132 ; CHECK-NOV-NEXT:    ret
6134 ; CHECK-V-LABEL: utest_f32i64_mm:
6135 ; CHECK-V:       # %bb.0: # %entry
6136 ; CHECK-V-NEXT:    addi sp, sp, -64
6137 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
6138 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
6139 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
6140 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
6141 ; CHECK-V-NEXT:    .cfi_offset ra, -8
6142 ; CHECK-V-NEXT:    .cfi_offset s0, -16
6143 ; CHECK-V-NEXT:    .cfi_offset s1, -24
6144 ; CHECK-V-NEXT:    csrr a0, vlenb
6145 ; CHECK-V-NEXT:    slli a0, a0, 1
6146 ; CHECK-V-NEXT:    sub sp, sp, a0
6147 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
6148 ; CHECK-V-NEXT:    addi a0, sp, 32
6149 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
6150 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
6151 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
6152 ; CHECK-V-NEXT:    call __fixunssfti
6153 ; CHECK-V-NEXT:    mv s0, a0
6154 ; CHECK-V-NEXT:    mv s1, a1
6155 ; CHECK-V-NEXT:    addi a0, sp, 32
6156 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
6157 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
6158 ; CHECK-V-NEXT:    vslidedown.vi v8, v8, 1
6159 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
6160 ; CHECK-V-NEXT:    call __fixunssfti
6161 ; CHECK-V-NEXT:    snez a1, a1
6162 ; CHECK-V-NEXT:    addi a1, a1, -1
6163 ; CHECK-V-NEXT:    and a0, a1, a0
6164 ; CHECK-V-NEXT:    snez a1, s1
6165 ; CHECK-V-NEXT:    addi a1, a1, -1
6166 ; CHECK-V-NEXT:    and a1, a1, s0
6167 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
6168 ; CHECK-V-NEXT:    vmv.s.x v8, a1
6169 ; CHECK-V-NEXT:    vmv.s.x v9, a0
6170 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
6171 ; CHECK-V-NEXT:    csrr a0, vlenb
6172 ; CHECK-V-NEXT:    slli a0, a0, 1
6173 ; CHECK-V-NEXT:    add sp, sp, a0
6174 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
6175 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
6176 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
6177 ; CHECK-V-NEXT:    addi sp, sp, 64
6178 ; CHECK-V-NEXT:    ret
6179 entry:
6180   %conv = fptoui <2 x float> %x to <2 x i128>
6181   %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)
6182   %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>
6183   ret <2 x i64> %conv6
6186 define <2 x i64> @ustest_f32i64_mm(<2 x float> %x) {
6187 ; CHECK-NOV-LABEL: ustest_f32i64_mm:
6188 ; CHECK-NOV:       # %bb.0: # %entry
6189 ; CHECK-NOV-NEXT:    addi sp, sp, -32
6190 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
6191 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6192 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6193 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6194 ; CHECK-NOV-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
6195 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
6196 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
6197 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
6198 ; CHECK-NOV-NEXT:    .cfi_offset fs0, -32
6199 ; CHECK-NOV-NEXT:    fmv.s fs0, fa1
6200 ; CHECK-NOV-NEXT:    call __fixsfti
6201 ; CHECK-NOV-NEXT:    mv s0, a0
6202 ; CHECK-NOV-NEXT:    mv s1, a1
6203 ; CHECK-NOV-NEXT:    fmv.s fa0, fs0
6204 ; CHECK-NOV-NEXT:    call __fixsfti
6205 ; CHECK-NOV-NEXT:    mv a2, a1
6206 ; CHECK-NOV-NEXT:    blez a1, .LBB50_2
6207 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
6208 ; CHECK-NOV-NEXT:    li a2, 1
6209 ; CHECK-NOV-NEXT:  .LBB50_2: # %entry
6210 ; CHECK-NOV-NEXT:    mv a3, s1
6211 ; CHECK-NOV-NEXT:    blez s1, .LBB50_4
6212 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
6213 ; CHECK-NOV-NEXT:    li a3, 1
6214 ; CHECK-NOV-NEXT:  .LBB50_4: # %entry
6215 ; CHECK-NOV-NEXT:    slti a1, a1, 1
6216 ; CHECK-NOV-NEXT:    neg a1, a1
6217 ; CHECK-NOV-NEXT:    and a1, a1, a0
6218 ; CHECK-NOV-NEXT:    slti a0, s1, 1
6219 ; CHECK-NOV-NEXT:    neg a0, a0
6220 ; CHECK-NOV-NEXT:    and a0, a0, s0
6221 ; CHECK-NOV-NEXT:    slti a3, a3, 0
6222 ; CHECK-NOV-NEXT:    addi a3, a3, -1
6223 ; CHECK-NOV-NEXT:    and a0, a3, a0
6224 ; CHECK-NOV-NEXT:    slti a2, a2, 0
6225 ; CHECK-NOV-NEXT:    addi a2, a2, -1
6226 ; CHECK-NOV-NEXT:    and a1, a2, a1
6227 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6228 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6229 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6230 ; CHECK-NOV-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
6231 ; CHECK-NOV-NEXT:    addi sp, sp, 32
6232 ; CHECK-NOV-NEXT:    ret
6234 ; CHECK-V-LABEL: ustest_f32i64_mm:
6235 ; CHECK-V:       # %bb.0: # %entry
6236 ; CHECK-V-NEXT:    addi sp, sp, -64
6237 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 64
6238 ; CHECK-V-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
6239 ; CHECK-V-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
6240 ; CHECK-V-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
6241 ; CHECK-V-NEXT:    .cfi_offset ra, -8
6242 ; CHECK-V-NEXT:    .cfi_offset s0, -16
6243 ; CHECK-V-NEXT:    .cfi_offset s1, -24
6244 ; CHECK-V-NEXT:    csrr a0, vlenb
6245 ; CHECK-V-NEXT:    slli a0, a0, 1
6246 ; CHECK-V-NEXT:    sub sp, sp, a0
6247 ; CHECK-V-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0xc0, 0x00, 0x22, 0x11, 0x02, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 64 + 2 * vlenb
6248 ; CHECK-V-NEXT:    addi a0, sp, 32
6249 ; CHECK-V-NEXT:    vs1r.v v8, (a0) # Unknown-size Folded Spill
6250 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
6251 ; CHECK-V-NEXT:    vslidedown.vi v9, v8, 1
6252 ; CHECK-V-NEXT:    vfmv.f.s fa0, v9
6253 ; CHECK-V-NEXT:    call __fixsfti
6254 ; CHECK-V-NEXT:    mv s0, a0
6255 ; CHECK-V-NEXT:    mv s1, a1
6256 ; CHECK-V-NEXT:    addi a0, sp, 32
6257 ; CHECK-V-NEXT:    vl1r.v v8, (a0) # Unknown-size Folded Reload
6258 ; CHECK-V-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
6259 ; CHECK-V-NEXT:    vfmv.f.s fa0, v8
6260 ; CHECK-V-NEXT:    call __fixsfti
6261 ; CHECK-V-NEXT:    mv a2, a1
6262 ; CHECK-V-NEXT:    blez a1, .LBB50_2
6263 ; CHECK-V-NEXT:  # %bb.1: # %entry
6264 ; CHECK-V-NEXT:    li a2, 1
6265 ; CHECK-V-NEXT:  .LBB50_2: # %entry
6266 ; CHECK-V-NEXT:    mv a3, s1
6267 ; CHECK-V-NEXT:    blez s1, .LBB50_4
6268 ; CHECK-V-NEXT:  # %bb.3: # %entry
6269 ; CHECK-V-NEXT:    li a3, 1
6270 ; CHECK-V-NEXT:  .LBB50_4: # %entry
6271 ; CHECK-V-NEXT:    slti a1, a1, 1
6272 ; CHECK-V-NEXT:    neg a1, a1
6273 ; CHECK-V-NEXT:    and a0, a1, a0
6274 ; CHECK-V-NEXT:    slti a1, s1, 1
6275 ; CHECK-V-NEXT:    neg a1, a1
6276 ; CHECK-V-NEXT:    and a1, a1, s0
6277 ; CHECK-V-NEXT:    slti a3, a3, 0
6278 ; CHECK-V-NEXT:    addi a3, a3, -1
6279 ; CHECK-V-NEXT:    and a1, a3, a1
6280 ; CHECK-V-NEXT:    slti a2, a2, 0
6281 ; CHECK-V-NEXT:    addi a2, a2, -1
6282 ; CHECK-V-NEXT:    and a0, a2, a0
6283 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
6284 ; CHECK-V-NEXT:    vmv.s.x v8, a0
6285 ; CHECK-V-NEXT:    vmv.s.x v9, a1
6286 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
6287 ; CHECK-V-NEXT:    csrr a0, vlenb
6288 ; CHECK-V-NEXT:    slli a0, a0, 1
6289 ; CHECK-V-NEXT:    add sp, sp, a0
6290 ; CHECK-V-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
6291 ; CHECK-V-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
6292 ; CHECK-V-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
6293 ; CHECK-V-NEXT:    addi sp, sp, 64
6294 ; CHECK-V-NEXT:    ret
6295 entry:
6296   %conv = fptosi <2 x float> %x to <2 x i128>
6297   %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)
6298   %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)
6299   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
6300   ret <2 x i64> %conv6
6303 define <2 x i64> @stest_f16i64_mm(<2 x half> %x) {
6304 ; CHECK-NOV-LABEL: stest_f16i64_mm:
6305 ; CHECK-NOV:       # %bb.0: # %entry
6306 ; CHECK-NOV-NEXT:    addi sp, sp, -32
6307 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
6308 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6309 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6310 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6311 ; CHECK-NOV-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
6312 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
6313 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
6314 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
6315 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
6316 ; CHECK-NOV-NEXT:    mv s2, a1
6317 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a0
6318 ; CHECK-NOV-NEXT:    call __extendhfsf2
6319 ; CHECK-NOV-NEXT:    call __fixsfti
6320 ; CHECK-NOV-NEXT:    mv s0, a0
6321 ; CHECK-NOV-NEXT:    mv s1, a1
6322 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
6323 ; CHECK-NOV-NEXT:    call __extendhfsf2
6324 ; CHECK-NOV-NEXT:    call __fixsfti
6325 ; CHECK-NOV-NEXT:    mv a2, a0
6326 ; CHECK-NOV-NEXT:    li a0, -1
6327 ; CHECK-NOV-NEXT:    srli a3, a0, 1
6328 ; CHECK-NOV-NEXT:    beqz a1, .LBB51_2
6329 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
6330 ; CHECK-NOV-NEXT:    slti a4, a1, 0
6331 ; CHECK-NOV-NEXT:    beqz a4, .LBB51_3
6332 ; CHECK-NOV-NEXT:    j .LBB51_4
6333 ; CHECK-NOV-NEXT:  .LBB51_2:
6334 ; CHECK-NOV-NEXT:    sltu a4, a2, a3
6335 ; CHECK-NOV-NEXT:    bnez a4, .LBB51_4
6336 ; CHECK-NOV-NEXT:  .LBB51_3: # %entry
6337 ; CHECK-NOV-NEXT:    mv a2, a3
6338 ; CHECK-NOV-NEXT:  .LBB51_4: # %entry
6339 ; CHECK-NOV-NEXT:    beqz s1, .LBB51_6
6340 ; CHECK-NOV-NEXT:  # %bb.5: # %entry
6341 ; CHECK-NOV-NEXT:    slti a6, s1, 0
6342 ; CHECK-NOV-NEXT:    j .LBB51_7
6343 ; CHECK-NOV-NEXT:  .LBB51_6:
6344 ; CHECK-NOV-NEXT:    sltu a6, s0, a3
6345 ; CHECK-NOV-NEXT:  .LBB51_7: # %entry
6346 ; CHECK-NOV-NEXT:    neg a5, a6
6347 ; CHECK-NOV-NEXT:    and a5, a5, s1
6348 ; CHECK-NOV-NEXT:    bnez a6, .LBB51_9
6349 ; CHECK-NOV-NEXT:  # %bb.8: # %entry
6350 ; CHECK-NOV-NEXT:    mv s0, a3
6351 ; CHECK-NOV-NEXT:  .LBB51_9: # %entry
6352 ; CHECK-NOV-NEXT:    neg a4, a4
6353 ; CHECK-NOV-NEXT:    slli a3, a0, 63
6354 ; CHECK-NOV-NEXT:    beq a5, a0, .LBB51_11
6355 ; CHECK-NOV-NEXT:  # %bb.10: # %entry
6356 ; CHECK-NOV-NEXT:    slti a5, a5, 0
6357 ; CHECK-NOV-NEXT:    xori a5, a5, 1
6358 ; CHECK-NOV-NEXT:    and a1, a4, a1
6359 ; CHECK-NOV-NEXT:    beqz a5, .LBB51_12
6360 ; CHECK-NOV-NEXT:    j .LBB51_13
6361 ; CHECK-NOV-NEXT:  .LBB51_11:
6362 ; CHECK-NOV-NEXT:    sltu a5, a3, s0
6363 ; CHECK-NOV-NEXT:    and a1, a4, a1
6364 ; CHECK-NOV-NEXT:    bnez a5, .LBB51_13
6365 ; CHECK-NOV-NEXT:  .LBB51_12: # %entry
6366 ; CHECK-NOV-NEXT:    mv s0, a3
6367 ; CHECK-NOV-NEXT:  .LBB51_13: # %entry
6368 ; CHECK-NOV-NEXT:    beq a1, a0, .LBB51_15
6369 ; CHECK-NOV-NEXT:  # %bb.14: # %entry
6370 ; CHECK-NOV-NEXT:    slti a0, a1, 0
6371 ; CHECK-NOV-NEXT:    xori a0, a0, 1
6372 ; CHECK-NOV-NEXT:    beqz a0, .LBB51_16
6373 ; CHECK-NOV-NEXT:    j .LBB51_17
6374 ; CHECK-NOV-NEXT:  .LBB51_15:
6375 ; CHECK-NOV-NEXT:    sltu a0, a3, a2
6376 ; CHECK-NOV-NEXT:    bnez a0, .LBB51_17
6377 ; CHECK-NOV-NEXT:  .LBB51_16: # %entry
6378 ; CHECK-NOV-NEXT:    mv a2, a3
6379 ; CHECK-NOV-NEXT:  .LBB51_17: # %entry
6380 ; CHECK-NOV-NEXT:    mv a0, s0
6381 ; CHECK-NOV-NEXT:    mv a1, a2
6382 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6383 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6384 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6385 ; CHECK-NOV-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
6386 ; CHECK-NOV-NEXT:    addi sp, sp, 32
6387 ; CHECK-NOV-NEXT:    ret
6389 ; CHECK-V-LABEL: stest_f16i64_mm:
6390 ; CHECK-V:       # %bb.0: # %entry
6391 ; CHECK-V-NEXT:    addi sp, sp, -32
6392 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 32
6393 ; CHECK-V-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6394 ; CHECK-V-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6395 ; CHECK-V-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6396 ; CHECK-V-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
6397 ; CHECK-V-NEXT:    .cfi_offset ra, -8
6398 ; CHECK-V-NEXT:    .cfi_offset s0, -16
6399 ; CHECK-V-NEXT:    .cfi_offset s1, -24
6400 ; CHECK-V-NEXT:    .cfi_offset s2, -32
6401 ; CHECK-V-NEXT:    mv s2, a1
6402 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
6403 ; CHECK-V-NEXT:    call __extendhfsf2
6404 ; CHECK-V-NEXT:    call __fixsfti
6405 ; CHECK-V-NEXT:    mv s0, a0
6406 ; CHECK-V-NEXT:    mv s1, a1
6407 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
6408 ; CHECK-V-NEXT:    call __extendhfsf2
6409 ; CHECK-V-NEXT:    call __fixsfti
6410 ; CHECK-V-NEXT:    li a2, -1
6411 ; CHECK-V-NEXT:    srli a3, a2, 1
6412 ; CHECK-V-NEXT:    beqz a1, .LBB51_2
6413 ; CHECK-V-NEXT:  # %bb.1: # %entry
6414 ; CHECK-V-NEXT:    slti a4, a1, 0
6415 ; CHECK-V-NEXT:    beqz a4, .LBB51_3
6416 ; CHECK-V-NEXT:    j .LBB51_4
6417 ; CHECK-V-NEXT:  .LBB51_2:
6418 ; CHECK-V-NEXT:    sltu a4, a0, a3
6419 ; CHECK-V-NEXT:    bnez a4, .LBB51_4
6420 ; CHECK-V-NEXT:  .LBB51_3: # %entry
6421 ; CHECK-V-NEXT:    mv a0, a3
6422 ; CHECK-V-NEXT:  .LBB51_4: # %entry
6423 ; CHECK-V-NEXT:    beqz s1, .LBB51_6
6424 ; CHECK-V-NEXT:  # %bb.5: # %entry
6425 ; CHECK-V-NEXT:    slti a6, s1, 0
6426 ; CHECK-V-NEXT:    j .LBB51_7
6427 ; CHECK-V-NEXT:  .LBB51_6:
6428 ; CHECK-V-NEXT:    sltu a6, s0, a3
6429 ; CHECK-V-NEXT:  .LBB51_7: # %entry
6430 ; CHECK-V-NEXT:    neg a5, a6
6431 ; CHECK-V-NEXT:    and a5, a5, s1
6432 ; CHECK-V-NEXT:    bnez a6, .LBB51_9
6433 ; CHECK-V-NEXT:  # %bb.8: # %entry
6434 ; CHECK-V-NEXT:    mv s0, a3
6435 ; CHECK-V-NEXT:  .LBB51_9: # %entry
6436 ; CHECK-V-NEXT:    neg a4, a4
6437 ; CHECK-V-NEXT:    slli a3, a2, 63
6438 ; CHECK-V-NEXT:    beq a5, a2, .LBB51_11
6439 ; CHECK-V-NEXT:  # %bb.10: # %entry
6440 ; CHECK-V-NEXT:    slti a5, a5, 0
6441 ; CHECK-V-NEXT:    xori a5, a5, 1
6442 ; CHECK-V-NEXT:    and a1, a4, a1
6443 ; CHECK-V-NEXT:    beqz a5, .LBB51_12
6444 ; CHECK-V-NEXT:    j .LBB51_13
6445 ; CHECK-V-NEXT:  .LBB51_11:
6446 ; CHECK-V-NEXT:    sltu a5, a3, s0
6447 ; CHECK-V-NEXT:    and a1, a4, a1
6448 ; CHECK-V-NEXT:    bnez a5, .LBB51_13
6449 ; CHECK-V-NEXT:  .LBB51_12: # %entry
6450 ; CHECK-V-NEXT:    mv s0, a3
6451 ; CHECK-V-NEXT:  .LBB51_13: # %entry
6452 ; CHECK-V-NEXT:    beq a1, a2, .LBB51_15
6453 ; CHECK-V-NEXT:  # %bb.14: # %entry
6454 ; CHECK-V-NEXT:    slti a1, a1, 0
6455 ; CHECK-V-NEXT:    xori a1, a1, 1
6456 ; CHECK-V-NEXT:    beqz a1, .LBB51_16
6457 ; CHECK-V-NEXT:    j .LBB51_17
6458 ; CHECK-V-NEXT:  .LBB51_15:
6459 ; CHECK-V-NEXT:    sltu a1, a3, a0
6460 ; CHECK-V-NEXT:    bnez a1, .LBB51_17
6461 ; CHECK-V-NEXT:  .LBB51_16: # %entry
6462 ; CHECK-V-NEXT:    mv a0, a3
6463 ; CHECK-V-NEXT:  .LBB51_17: # %entry
6464 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
6465 ; CHECK-V-NEXT:    vmv.s.x v9, a0
6466 ; CHECK-V-NEXT:    vmv.s.x v8, s0
6467 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
6468 ; CHECK-V-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6469 ; CHECK-V-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6470 ; CHECK-V-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6471 ; CHECK-V-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
6472 ; CHECK-V-NEXT:    addi sp, sp, 32
6473 ; CHECK-V-NEXT:    ret
6474 entry:
6475   %conv = fptosi <2 x half> %x to <2 x i128>
6476   %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)
6477   %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)
6478   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
6479   ret <2 x i64> %conv6
6482 define <2 x i64> @utesth_f16i64_mm(<2 x half> %x) {
6483 ; CHECK-NOV-LABEL: utesth_f16i64_mm:
6484 ; CHECK-NOV:       # %bb.0: # %entry
6485 ; CHECK-NOV-NEXT:    addi sp, sp, -32
6486 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
6487 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6488 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6489 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6490 ; CHECK-NOV-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
6491 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
6492 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
6493 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
6494 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
6495 ; CHECK-NOV-NEXT:    mv s0, a0
6496 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a1
6497 ; CHECK-NOV-NEXT:    call __extendhfsf2
6498 ; CHECK-NOV-NEXT:    call __fixunssfti
6499 ; CHECK-NOV-NEXT:    mv s1, a0
6500 ; CHECK-NOV-NEXT:    mv s2, a1
6501 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s0
6502 ; CHECK-NOV-NEXT:    call __extendhfsf2
6503 ; CHECK-NOV-NEXT:    call __fixunssfti
6504 ; CHECK-NOV-NEXT:    snez a1, a1
6505 ; CHECK-NOV-NEXT:    addi a1, a1, -1
6506 ; CHECK-NOV-NEXT:    and a0, a1, a0
6507 ; CHECK-NOV-NEXT:    snez a1, s2
6508 ; CHECK-NOV-NEXT:    addi a1, a1, -1
6509 ; CHECK-NOV-NEXT:    and a1, a1, s1
6510 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6511 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6512 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6513 ; CHECK-NOV-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
6514 ; CHECK-NOV-NEXT:    addi sp, sp, 32
6515 ; CHECK-NOV-NEXT:    ret
6517 ; CHECK-V-LABEL: utesth_f16i64_mm:
6518 ; CHECK-V:       # %bb.0: # %entry
6519 ; CHECK-V-NEXT:    addi sp, sp, -32
6520 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 32
6521 ; CHECK-V-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6522 ; CHECK-V-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6523 ; CHECK-V-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6524 ; CHECK-V-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
6525 ; CHECK-V-NEXT:    .cfi_offset ra, -8
6526 ; CHECK-V-NEXT:    .cfi_offset s0, -16
6527 ; CHECK-V-NEXT:    .cfi_offset s1, -24
6528 ; CHECK-V-NEXT:    .cfi_offset s2, -32
6529 ; CHECK-V-NEXT:    mv s0, a0
6530 ; CHECK-V-NEXT:    fmv.w.x fa0, a1
6531 ; CHECK-V-NEXT:    call __extendhfsf2
6532 ; CHECK-V-NEXT:    call __fixunssfti
6533 ; CHECK-V-NEXT:    mv s1, a0
6534 ; CHECK-V-NEXT:    mv s2, a1
6535 ; CHECK-V-NEXT:    fmv.w.x fa0, s0
6536 ; CHECK-V-NEXT:    call __extendhfsf2
6537 ; CHECK-V-NEXT:    call __fixunssfti
6538 ; CHECK-V-NEXT:    snez a1, a1
6539 ; CHECK-V-NEXT:    addi a1, a1, -1
6540 ; CHECK-V-NEXT:    and a0, a1, a0
6541 ; CHECK-V-NEXT:    snez a1, s2
6542 ; CHECK-V-NEXT:    addi a1, a1, -1
6543 ; CHECK-V-NEXT:    and a1, a1, s1
6544 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
6545 ; CHECK-V-NEXT:    vmv.s.x v9, a1
6546 ; CHECK-V-NEXT:    vmv.s.x v8, a0
6547 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
6548 ; CHECK-V-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6549 ; CHECK-V-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6550 ; CHECK-V-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6551 ; CHECK-V-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
6552 ; CHECK-V-NEXT:    addi sp, sp, 32
6553 ; CHECK-V-NEXT:    ret
6554 entry:
6555   %conv = fptoui <2 x half> %x to <2 x i128>
6556   %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)
6557   %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>
6558   ret <2 x i64> %conv6
6561 define <2 x i64> @ustest_f16i64_mm(<2 x half> %x) {
6562 ; CHECK-NOV-LABEL: ustest_f16i64_mm:
6563 ; CHECK-NOV:       # %bb.0: # %entry
6564 ; CHECK-NOV-NEXT:    addi sp, sp, -32
6565 ; CHECK-NOV-NEXT:    .cfi_def_cfa_offset 32
6566 ; CHECK-NOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6567 ; CHECK-NOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6568 ; CHECK-NOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6569 ; CHECK-NOV-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
6570 ; CHECK-NOV-NEXT:    .cfi_offset ra, -8
6571 ; CHECK-NOV-NEXT:    .cfi_offset s0, -16
6572 ; CHECK-NOV-NEXT:    .cfi_offset s1, -24
6573 ; CHECK-NOV-NEXT:    .cfi_offset s2, -32
6574 ; CHECK-NOV-NEXT:    mv s2, a1
6575 ; CHECK-NOV-NEXT:    fmv.w.x fa0, a0
6576 ; CHECK-NOV-NEXT:    call __extendhfsf2
6577 ; CHECK-NOV-NEXT:    call __fixsfti
6578 ; CHECK-NOV-NEXT:    mv s0, a0
6579 ; CHECK-NOV-NEXT:    mv s1, a1
6580 ; CHECK-NOV-NEXT:    fmv.w.x fa0, s2
6581 ; CHECK-NOV-NEXT:    call __extendhfsf2
6582 ; CHECK-NOV-NEXT:    call __fixsfti
6583 ; CHECK-NOV-NEXT:    mv a2, a1
6584 ; CHECK-NOV-NEXT:    blez a1, .LBB53_2
6585 ; CHECK-NOV-NEXT:  # %bb.1: # %entry
6586 ; CHECK-NOV-NEXT:    li a2, 1
6587 ; CHECK-NOV-NEXT:  .LBB53_2: # %entry
6588 ; CHECK-NOV-NEXT:    mv a3, s1
6589 ; CHECK-NOV-NEXT:    blez s1, .LBB53_4
6590 ; CHECK-NOV-NEXT:  # %bb.3: # %entry
6591 ; CHECK-NOV-NEXT:    li a3, 1
6592 ; CHECK-NOV-NEXT:  .LBB53_4: # %entry
6593 ; CHECK-NOV-NEXT:    slti a1, a1, 1
6594 ; CHECK-NOV-NEXT:    neg a1, a1
6595 ; CHECK-NOV-NEXT:    and a1, a1, a0
6596 ; CHECK-NOV-NEXT:    slti a0, s1, 1
6597 ; CHECK-NOV-NEXT:    neg a0, a0
6598 ; CHECK-NOV-NEXT:    and a0, a0, s0
6599 ; CHECK-NOV-NEXT:    slti a3, a3, 0
6600 ; CHECK-NOV-NEXT:    addi a3, a3, -1
6601 ; CHECK-NOV-NEXT:    and a0, a3, a0
6602 ; CHECK-NOV-NEXT:    slti a2, a2, 0
6603 ; CHECK-NOV-NEXT:    addi a2, a2, -1
6604 ; CHECK-NOV-NEXT:    and a1, a2, a1
6605 ; CHECK-NOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6606 ; CHECK-NOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6607 ; CHECK-NOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6608 ; CHECK-NOV-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
6609 ; CHECK-NOV-NEXT:    addi sp, sp, 32
6610 ; CHECK-NOV-NEXT:    ret
6612 ; CHECK-V-LABEL: ustest_f16i64_mm:
6613 ; CHECK-V:       # %bb.0: # %entry
6614 ; CHECK-V-NEXT:    addi sp, sp, -32
6615 ; CHECK-V-NEXT:    .cfi_def_cfa_offset 32
6616 ; CHECK-V-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
6617 ; CHECK-V-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
6618 ; CHECK-V-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
6619 ; CHECK-V-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
6620 ; CHECK-V-NEXT:    .cfi_offset ra, -8
6621 ; CHECK-V-NEXT:    .cfi_offset s0, -16
6622 ; CHECK-V-NEXT:    .cfi_offset s1, -24
6623 ; CHECK-V-NEXT:    .cfi_offset s2, -32
6624 ; CHECK-V-NEXT:    mv s2, a1
6625 ; CHECK-V-NEXT:    fmv.w.x fa0, a0
6626 ; CHECK-V-NEXT:    call __extendhfsf2
6627 ; CHECK-V-NEXT:    call __fixsfti
6628 ; CHECK-V-NEXT:    mv s0, a0
6629 ; CHECK-V-NEXT:    mv s1, a1
6630 ; CHECK-V-NEXT:    fmv.w.x fa0, s2
6631 ; CHECK-V-NEXT:    call __extendhfsf2
6632 ; CHECK-V-NEXT:    call __fixsfti
6633 ; CHECK-V-NEXT:    mv a2, a1
6634 ; CHECK-V-NEXT:    blez a1, .LBB53_2
6635 ; CHECK-V-NEXT:  # %bb.1: # %entry
6636 ; CHECK-V-NEXT:    li a2, 1
6637 ; CHECK-V-NEXT:  .LBB53_2: # %entry
6638 ; CHECK-V-NEXT:    mv a3, s1
6639 ; CHECK-V-NEXT:    blez s1, .LBB53_4
6640 ; CHECK-V-NEXT:  # %bb.3: # %entry
6641 ; CHECK-V-NEXT:    li a3, 1
6642 ; CHECK-V-NEXT:  .LBB53_4: # %entry
6643 ; CHECK-V-NEXT:    slti a1, a1, 1
6644 ; CHECK-V-NEXT:    neg a1, a1
6645 ; CHECK-V-NEXT:    and a0, a1, a0
6646 ; CHECK-V-NEXT:    slti a1, s1, 1
6647 ; CHECK-V-NEXT:    neg a1, a1
6648 ; CHECK-V-NEXT:    and a1, a1, s0
6649 ; CHECK-V-NEXT:    slti a3, a3, 0
6650 ; CHECK-V-NEXT:    addi a3, a3, -1
6651 ; CHECK-V-NEXT:    and a1, a3, a1
6652 ; CHECK-V-NEXT:    slti a2, a2, 0
6653 ; CHECK-V-NEXT:    addi a2, a2, -1
6654 ; CHECK-V-NEXT:    and a0, a2, a0
6655 ; CHECK-V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
6656 ; CHECK-V-NEXT:    vmv.s.x v9, a0
6657 ; CHECK-V-NEXT:    vmv.s.x v8, a1
6658 ; CHECK-V-NEXT:    vslideup.vi v8, v9, 1
6659 ; CHECK-V-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
6660 ; CHECK-V-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
6661 ; CHECK-V-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
6662 ; CHECK-V-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
6663 ; CHECK-V-NEXT:    addi sp, sp, 32
6664 ; CHECK-V-NEXT:    ret
6665 entry:
6666   %conv = fptosi <2 x half> %x to <2 x i128>
6667   %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)
6668   %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)
6669   %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>
6670   ret <2 x i64> %conv6
6673 declare <2 x i32> @llvm.smin.v2i32(<2 x i32>, <2 x i32>)
6674 declare <2 x i32> @llvm.smax.v2i32(<2 x i32>, <2 x i32>)
6675 declare <2 x i32> @llvm.umin.v2i32(<2 x i32>, <2 x i32>)
6676 declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>)
6677 declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>)
6678 declare <4 x i32> @llvm.umin.v4i32(<4 x i32>, <4 x i32>)
6679 declare <8 x i32> @llvm.smin.v8i32(<8 x i32>, <8 x i32>)
6680 declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>)
6681 declare <8 x i32> @llvm.umin.v8i32(<8 x i32>, <8 x i32>)
6682 declare <2 x i64> @llvm.smin.v2i64(<2 x i64>, <2 x i64>)
6683 declare <2 x i64> @llvm.smax.v2i64(<2 x i64>, <2 x i64>)
6684 declare <2 x i64> @llvm.umin.v2i64(<2 x i64>, <2 x i64>)
6685 declare <4 x i64> @llvm.smin.v4i64(<4 x i64>, <4 x i64>)
6686 declare <4 x i64> @llvm.smax.v4i64(<4 x i64>, <4 x i64>)
6687 declare <4 x i64> @llvm.umin.v4i64(<4 x i64>, <4 x i64>)
6688 declare <2 x i128> @llvm.smin.v2i128(<2 x i128>, <2 x i128>)
6689 declare <2 x i128> @llvm.smax.v2i128(<2 x i128>, <2 x i128>)
6690 declare <2 x i128> @llvm.umin.v2i128(<2 x i128>, <2 x i128>)