1 ; Test strict v4f32 comparisons.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
6 define <4 x i32> @f1(<4 x float> %val1, <4 x float> %val2) #0 {
8 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
9 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
10 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
11 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
12 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
13 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
14 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
15 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
16 ; CHECK-DAG: vfcedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
17 ; CHECK-DAG: vfcedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
18 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]]
20 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
21 <4 x float> %val1, <4 x float> %val2,
23 metadata !"fpexcept.strict") #0
24 %ret = sext <4 x i1> %cmp to <4 x i32>
29 define <4 x i32> @f2(<4 x float> %val1, <4 x float> %val2) #0 {
31 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
32 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
33 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
34 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
35 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
36 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
37 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
38 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
39 ; CHECK-DAG: vfchdb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
40 ; CHECK-DAG: vfchdb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
41 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
42 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
43 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]]
44 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]]
45 ; CHECK: vo %v24, [[RES1]], [[RES0]]
47 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
48 <4 x float> %val1, <4 x float> %val2,
50 metadata !"fpexcept.strict") #0
51 %ret = sext <4 x i1> %cmp to <4 x i32>
56 define <4 x i32> @f3(<4 x float> %val1, <4 x float> %val2) #0 {
58 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
59 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
60 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
61 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
62 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
63 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
64 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
65 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
66 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
67 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
68 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]]
70 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
71 <4 x float> %val1, <4 x float> %val2,
73 metadata !"fpexcept.strict") #0
74 %ret = sext <4 x i1> %cmp to <4 x i32>
79 define <4 x i32> @f4(<4 x float> %val1, <4 x float> %val2) #0 {
81 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
82 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
83 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
84 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
85 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
86 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
87 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
88 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
89 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
90 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
91 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]]
93 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
94 <4 x float> %val1, <4 x float> %val2,
96 metadata !"fpexcept.strict") #0
97 %ret = sext <4 x i1> %cmp to <4 x i32>
102 define <4 x i32> @f5(<4 x float> %val1, <4 x float> %val2) #0 {
104 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
105 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
106 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
107 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
108 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
109 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
110 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
111 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
112 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
113 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
114 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]]
115 ; CHECK-NEXT: br %r14
116 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
117 <4 x float> %val1, <4 x float> %val2,
119 metadata !"fpexcept.strict") #0
120 %ret = sext <4 x i1> %cmp to <4 x i32>
125 define <4 x i32> @f6(<4 x float> %val1, <4 x float> %val2) #0 {
127 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
128 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
129 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
130 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
131 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
132 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
133 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
134 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
135 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
136 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
137 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]]
138 ; CHECK-NEXT: br %r14
139 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
140 <4 x float> %val1, <4 x float> %val2,
142 metadata !"fpexcept.strict") #0
143 %ret = sext <4 x i1> %cmp to <4 x i32>
148 define <4 x i32> @f7(<4 x float> %val1, <4 x float> %val2) #0 {
150 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
151 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
152 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
153 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
154 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
155 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
156 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
157 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
158 ; CHECK-DAG: vfchdb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
159 ; CHECK-DAG: vfchdb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
160 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
161 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
162 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]]
163 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]]
164 ; CHECK: vno %v24, [[RES1]], [[RES0]]
165 ; CHECK-NEXT: br %r14
166 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
167 <4 x float> %val1, <4 x float> %val2,
169 metadata !"fpexcept.strict") #0
170 %ret = sext <4 x i1> %cmp to <4 x i32>
175 define <4 x i32> @f8(<4 x float> %val1, <4 x float> %val2) #0 {
177 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
178 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
179 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
180 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
181 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
182 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
183 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
184 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
185 ; CHECK-DAG: vfcedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
186 ; CHECK-DAG: vfcedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
187 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]]
188 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]]
189 ; CHECK-NEXT: br %r14
190 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
191 <4 x float> %val1, <4 x float> %val2,
193 metadata !"fpexcept.strict") #0
194 %ret = sext <4 x i1> %cmp to <4 x i32>
199 define <4 x i32> @f9(<4 x float> %val1, <4 x float> %val2) #0 {
201 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
202 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
203 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
204 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
205 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
206 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
207 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
208 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
209 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
210 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
211 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]]
212 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]]
213 ; CHECK-NEXT: br %r14
214 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
215 <4 x float> %val1, <4 x float> %val2,
217 metadata !"fpexcept.strict") #0
218 %ret = sext <4 x i1> %cmp to <4 x i32>
223 define <4 x i32> @f10(<4 x float> %val1, <4 x float> %val2) #0 {
225 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
226 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
227 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
228 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
229 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
230 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
231 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
232 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
233 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
234 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
235 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]]
236 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]]
237 ; CHECK-NEXT: br %r14
238 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
239 <4 x float> %val1, <4 x float> %val2,
241 metadata !"fpexcept.strict") #0
242 %ret = sext <4 x i1> %cmp to <4 x i32>
247 define <4 x i32> @f11(<4 x float> %val1, <4 x float> %val2) #0 {
249 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
250 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
251 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
252 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
253 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
254 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
255 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
256 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
257 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
258 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
259 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]]
260 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]]
261 ; CHECK-NEXT: br %r14
262 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
263 <4 x float> %val1, <4 x float> %val2,
265 metadata !"fpexcept.strict") #0
266 %ret = sext <4 x i1> %cmp to <4 x i32>
271 define <4 x i32> @f12(<4 x float> %val1, <4 x float> %val2) #0 {
273 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
274 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
275 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
276 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
277 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
278 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
279 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
280 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
281 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
282 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
283 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]]
284 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]]
285 ; CHECK-NEXT: br %r14
286 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
287 <4 x float> %val1, <4 x float> %val2,
289 metadata !"fpexcept.strict") #0
290 %ret = sext <4 x i1> %cmp to <4 x i32>
295 define <4 x i32> @f13(<4 x float> %val1, <4 x float> %val2) #0 {
297 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
298 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
299 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
300 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
301 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
302 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
303 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
304 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
305 ; CHECK-DAG: vfchedb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
306 ; CHECK-DAG: vfchedb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
307 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
308 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
309 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]]
310 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]]
311 ; CHECK: vo %v24, [[RES1]], [[RES0]]
312 ; CHECK-NEXT: br %r14
313 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
314 <4 x float> %val1, <4 x float> %val2,
316 metadata !"fpexcept.strict") #0
317 %ret = sext <4 x i1> %cmp to <4 x i32>
322 define <4 x i32> @f14(<4 x float> %val1, <4 x float> %val2) #0 {
324 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24
325 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24
326 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26
327 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26
328 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]]
329 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]]
330 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]]
331 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]]
332 ; CHECK-DAG: vfchedb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]]
333 ; CHECK-DAG: vfchedb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]]
334 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]]
335 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]]
336 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]]
337 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]]
338 ; CHECK: vno %v24, [[RES1]], [[RES0]]
339 ; CHECK-NEXT: br %r14
340 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
341 <4 x float> %val1, <4 x float> %val2,
343 metadata !"fpexcept.strict") #0
344 %ret = sext <4 x i1> %cmp to <4 x i32>
349 define <4 x float> @f15(<4 x float> %val1, <4 x float> %val2,
350 <4 x float> %val3, <4 x float> %val4) #0 {
352 ; CHECK: vpkg [[REG:%v[0-9]+]],
353 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
354 ; CHECK-NEXT: br %r14
355 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
356 <4 x float> %val1, <4 x float> %val2,
358 metadata !"fpexcept.strict") #0
359 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
364 define <4 x float> @f16(<4 x float> %val1, <4 x float> %val2,
365 <4 x float> %val3, <4 x float> %val4) #0 {
367 ; CHECK: vo [[REG:%v[0-9]+]],
368 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
369 ; CHECK-NEXT: br %r14
370 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
371 <4 x float> %val1, <4 x float> %val2,
373 metadata !"fpexcept.strict") #0
374 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
379 define <4 x float> @f17(<4 x float> %val1, <4 x float> %val2,
380 <4 x float> %val3, <4 x float> %val4) #0 {
382 ; CHECK: vpkg [[REG:%v[0-9]+]],
383 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
384 ; CHECK-NEXT: br %r14
385 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
386 <4 x float> %val1, <4 x float> %val2,
388 metadata !"fpexcept.strict") #0
389 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
394 define <4 x float> @f18(<4 x float> %val1, <4 x float> %val2,
395 <4 x float> %val3, <4 x float> %val4) #0 {
397 ; CHECK: vpkg [[REG:%v[0-9]+]],
398 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
399 ; CHECK-NEXT: br %r14
400 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
401 <4 x float> %val1, <4 x float> %val2,
403 metadata !"fpexcept.strict") #0
404 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
409 define <4 x float> @f19(<4 x float> %val1, <4 x float> %val2,
410 <4 x float> %val3, <4 x float> %val4) #0 {
412 ; CHECK: vpkg [[REG:%v[0-9]+]],
413 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
414 ; CHECK-NEXT: br %r14
415 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
416 <4 x float> %val1, <4 x float> %val2,
418 metadata !"fpexcept.strict") #0
419 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
424 define <4 x float> @f20(<4 x float> %val1, <4 x float> %val2,
425 <4 x float> %val3, <4 x float> %val4) #0 {
427 ; CHECK: vpkg [[REG:%v[0-9]+]],
428 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
429 ; CHECK-NEXT: br %r14
430 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
431 <4 x float> %val1, <4 x float> %val2,
433 metadata !"fpexcept.strict") #0
434 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
439 define <4 x float> @f21(<4 x float> %val1, <4 x float> %val2,
440 <4 x float> %val3, <4 x float> %val4) #0 {
442 ; CHECK: vo [[REG:%v[0-9]+]],
443 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
444 ; CHECK-NEXT: br %r14
445 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
446 <4 x float> %val1, <4 x float> %val2,
448 metadata !"fpexcept.strict") #0
449 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
454 define <4 x float> @f22(<4 x float> %val1, <4 x float> %val2,
455 <4 x float> %val3, <4 x float> %val4) #0 {
457 ; CHECK: vpkg [[REG:%v[0-9]+]],
458 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
459 ; CHECK-NEXT: br %r14
460 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
461 <4 x float> %val1, <4 x float> %val2,
463 metadata !"fpexcept.strict") #0
464 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
469 define <4 x float> @f23(<4 x float> %val1, <4 x float> %val2,
470 <4 x float> %val3, <4 x float> %val4) #0 {
472 ; CHECK: vpkg [[REG:%v[0-9]+]],
473 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
474 ; CHECK-NEXT: br %r14
475 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
476 <4 x float> %val1, <4 x float> %val2,
478 metadata !"fpexcept.strict") #0
479 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
484 define <4 x float> @f24(<4 x float> %val1, <4 x float> %val2,
485 <4 x float> %val3, <4 x float> %val4) #0 {
487 ; CHECK: vpkg [[REG:%v[0-9]+]],
488 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
489 ; CHECK-NEXT: br %r14
490 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
491 <4 x float> %val1, <4 x float> %val2,
493 metadata !"fpexcept.strict") #0
494 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
499 define <4 x float> @f25(<4 x float> %val1, <4 x float> %val2,
500 <4 x float> %val3, <4 x float> %val4) #0 {
502 ; CHECK: vpkg [[REG:%v[0-9]+]],
503 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
504 ; CHECK-NEXT: br %r14
505 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
506 <4 x float> %val1, <4 x float> %val2,
508 metadata !"fpexcept.strict") #0
509 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
514 define <4 x float> @f26(<4 x float> %val1, <4 x float> %val2,
515 <4 x float> %val3, <4 x float> %val4) #0 {
517 ; CHECK: vpkg [[REG:%v[0-9]+]],
518 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
519 ; CHECK-NEXT: br %r14
520 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
521 <4 x float> %val1, <4 x float> %val2,
523 metadata !"fpexcept.strict") #0
524 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
529 define <4 x float> @f27(<4 x float> %val1, <4 x float> %val2,
530 <4 x float> %val3, <4 x float> %val4) #0 {
532 ; CHECK: vo [[REG:%v[0-9]+]],
533 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
534 ; CHECK-NEXT: br %r14
535 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
536 <4 x float> %val1, <4 x float> %val2,
538 metadata !"fpexcept.strict") #0
539 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
544 define <4 x float> @f28(<4 x float> %val1, <4 x float> %val2,
545 <4 x float> %val3, <4 x float> %val4) #0 {
547 ; CHECK: vo [[REG:%v[0-9]+]],
548 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
549 ; CHECK-NEXT: br %r14
550 %cmp = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
551 <4 x float> %val1, <4 x float> %val2,
553 metadata !"fpexcept.strict") #0
554 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4
558 attributes #0 = { strictfp }
560 declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float>, <4 x float>, metadata, metadata)