1 ; RUN: llc -march=x86-64 -mcpu=core2 < %s | FileCheck %s -check-prefix=SSE2
2 ; RUN: llc -march=x86-64 -mcpu=corei7 < %s | FileCheck %s -check-prefix=SSE4
3 ; RUN: llc -march=x86-64 -mcpu=corei7-avx < %s | FileCheck %s -check-prefix=AVX1
4 ; RUN: llc -march=x86-64 -mcpu=core-avx2 -mattr=+avx2 < %s | FileCheck %s -check-prefix=AVX2
5 ; RUN: llc -march=x86-64 -mcpu=knl < %s | FileCheck %s -check-prefix=AVX2 -check-prefix=AVX512F
6 ; RUN: llc -march=x86-64 -mcpu=skx < %s | FileCheck %s -check-prefix=AVX512BW -check-prefix=AVX512VL -check-prefix=AVX512F
8 define void @test1(i8* nocapture %a, i8* nocapture %b) nounwind {
12 vector.body: ; preds = %vector.body, %vector.ph
13 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
14 %gep.a = getelementptr inbounds i8* %a, i64 %index
15 %gep.b = getelementptr inbounds i8* %b, i64 %index
16 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
17 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
18 %load.a = load <16 x i8>* %ptr.a, align 2
19 %load.b = load <16 x i8>* %ptr.b, align 2
20 %cmp = icmp slt <16 x i8> %load.a, %load.b
21 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
22 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
23 %index.next = add i64 %index, 16
24 %loop = icmp eq i64 %index.next, 16384
25 br i1 %loop, label %for.end, label %vector.body
27 for.end: ; preds = %vector.body
39 ; AVX512VL-LABEL: test1:
43 define void @test2(i8* nocapture %a, i8* nocapture %b) nounwind {
47 vector.body: ; preds = %vector.body, %vector.ph
48 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
49 %gep.a = getelementptr inbounds i8* %a, i64 %index
50 %gep.b = getelementptr inbounds i8* %b, i64 %index
51 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
52 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
53 %load.a = load <16 x i8>* %ptr.a, align 2
54 %load.b = load <16 x i8>* %ptr.b, align 2
55 %cmp = icmp sle <16 x i8> %load.a, %load.b
56 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
57 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
58 %index.next = add i64 %index, 16
59 %loop = icmp eq i64 %index.next, 16384
60 br i1 %loop, label %for.end, label %vector.body
62 for.end: ; preds = %vector.body
74 ; AVX512VL-LABEL: test2:
78 define void @test3(i8* nocapture %a, i8* nocapture %b) nounwind {
82 vector.body: ; preds = %vector.body, %vector.ph
83 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
84 %gep.a = getelementptr inbounds i8* %a, i64 %index
85 %gep.b = getelementptr inbounds i8* %b, i64 %index
86 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
87 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
88 %load.a = load <16 x i8>* %ptr.a, align 2
89 %load.b = load <16 x i8>* %ptr.b, align 2
90 %cmp = icmp sgt <16 x i8> %load.a, %load.b
91 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
92 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
93 %index.next = add i64 %index, 16
94 %loop = icmp eq i64 %index.next, 16384
95 br i1 %loop, label %for.end, label %vector.body
97 for.end: ; preds = %vector.body
109 ; AVX512VL-LABEL: test3:
113 define void @test4(i8* nocapture %a, i8* nocapture %b) nounwind {
115 br label %vector.body
117 vector.body: ; preds = %vector.body, %vector.ph
118 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
119 %gep.a = getelementptr inbounds i8* %a, i64 %index
120 %gep.b = getelementptr inbounds i8* %b, i64 %index
121 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
122 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
123 %load.a = load <16 x i8>* %ptr.a, align 2
124 %load.b = load <16 x i8>* %ptr.b, align 2
125 %cmp = icmp sge <16 x i8> %load.a, %load.b
126 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
127 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
128 %index.next = add i64 %index, 16
129 %loop = icmp eq i64 %index.next, 16384
130 br i1 %loop, label %for.end, label %vector.body
132 for.end: ; preds = %vector.body
144 ; AVX512VL-LABEL: test4:
148 define void @test5(i8* nocapture %a, i8* nocapture %b) nounwind {
150 br label %vector.body
152 vector.body: ; preds = %vector.body, %vector.ph
153 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
154 %gep.a = getelementptr inbounds i8* %a, i64 %index
155 %gep.b = getelementptr inbounds i8* %b, i64 %index
156 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
157 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
158 %load.a = load <16 x i8>* %ptr.a, align 2
159 %load.b = load <16 x i8>* %ptr.b, align 2
160 %cmp = icmp ult <16 x i8> %load.a, %load.b
161 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
162 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
163 %index.next = add i64 %index, 16
164 %loop = icmp eq i64 %index.next, 16384
165 br i1 %loop, label %for.end, label %vector.body
167 for.end: ; preds = %vector.body
179 ; AVX512VL-LABEL: test5:
183 define void @test6(i8* nocapture %a, i8* nocapture %b) nounwind {
185 br label %vector.body
187 vector.body: ; preds = %vector.body, %vector.ph
188 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
189 %gep.a = getelementptr inbounds i8* %a, i64 %index
190 %gep.b = getelementptr inbounds i8* %b, i64 %index
191 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
192 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
193 %load.a = load <16 x i8>* %ptr.a, align 2
194 %load.b = load <16 x i8>* %ptr.b, align 2
195 %cmp = icmp ule <16 x i8> %load.a, %load.b
196 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
197 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
198 %index.next = add i64 %index, 16
199 %loop = icmp eq i64 %index.next, 16384
200 br i1 %loop, label %for.end, label %vector.body
202 for.end: ; preds = %vector.body
214 ; AVX512VL-LABEL: test6:
218 define void @test7(i8* nocapture %a, i8* nocapture %b) nounwind {
220 br label %vector.body
222 vector.body: ; preds = %vector.body, %vector.ph
223 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
224 %gep.a = getelementptr inbounds i8* %a, i64 %index
225 %gep.b = getelementptr inbounds i8* %b, i64 %index
226 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
227 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
228 %load.a = load <16 x i8>* %ptr.a, align 2
229 %load.b = load <16 x i8>* %ptr.b, align 2
230 %cmp = icmp ugt <16 x i8> %load.a, %load.b
231 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
232 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
233 %index.next = add i64 %index, 16
234 %loop = icmp eq i64 %index.next, 16384
235 br i1 %loop, label %for.end, label %vector.body
237 for.end: ; preds = %vector.body
249 ; AVX512VL-LABEL: test7:
253 define void @test8(i8* nocapture %a, i8* nocapture %b) nounwind {
255 br label %vector.body
257 vector.body: ; preds = %vector.body, %vector.ph
258 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
259 %gep.a = getelementptr inbounds i8* %a, i64 %index
260 %gep.b = getelementptr inbounds i8* %b, i64 %index
261 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
262 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
263 %load.a = load <16 x i8>* %ptr.a, align 2
264 %load.b = load <16 x i8>* %ptr.b, align 2
265 %cmp = icmp uge <16 x i8> %load.a, %load.b
266 %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
267 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
268 %index.next = add i64 %index, 16
269 %loop = icmp eq i64 %index.next, 16384
270 br i1 %loop, label %for.end, label %vector.body
272 for.end: ; preds = %vector.body
284 ; AVX512VL-LABEL: test8:
288 define void @test9(i16* nocapture %a, i16* nocapture %b) nounwind {
290 br label %vector.body
292 vector.body: ; preds = %vector.body, %vector.ph
293 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
294 %gep.a = getelementptr inbounds i16* %a, i64 %index
295 %gep.b = getelementptr inbounds i16* %b, i64 %index
296 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
297 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
298 %load.a = load <8 x i16>* %ptr.a, align 2
299 %load.b = load <8 x i16>* %ptr.b, align 2
300 %cmp = icmp slt <8 x i16> %load.a, %load.b
301 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
302 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
303 %index.next = add i64 %index, 8
304 %loop = icmp eq i64 %index.next, 16384
305 br i1 %loop, label %for.end, label %vector.body
307 for.end: ; preds = %vector.body
319 ; AVX512VL-LABEL: test9:
323 define void @test10(i16* nocapture %a, i16* nocapture %b) nounwind {
325 br label %vector.body
327 vector.body: ; preds = %vector.body, %vector.ph
328 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
329 %gep.a = getelementptr inbounds i16* %a, i64 %index
330 %gep.b = getelementptr inbounds i16* %b, i64 %index
331 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
332 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
333 %load.a = load <8 x i16>* %ptr.a, align 2
334 %load.b = load <8 x i16>* %ptr.b, align 2
335 %cmp = icmp sle <8 x i16> %load.a, %load.b
336 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
337 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
338 %index.next = add i64 %index, 8
339 %loop = icmp eq i64 %index.next, 16384
340 br i1 %loop, label %for.end, label %vector.body
342 for.end: ; preds = %vector.body
345 ; SSE2-LABEL: test10:
348 ; AVX1-LABEL: test10:
351 ; AVX2-LABEL: test10:
354 ; AVX512VL-LABEL: test10:
358 define void @test11(i16* nocapture %a, i16* nocapture %b) nounwind {
360 br label %vector.body
362 vector.body: ; preds = %vector.body, %vector.ph
363 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
364 %gep.a = getelementptr inbounds i16* %a, i64 %index
365 %gep.b = getelementptr inbounds i16* %b, i64 %index
366 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
367 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
368 %load.a = load <8 x i16>* %ptr.a, align 2
369 %load.b = load <8 x i16>* %ptr.b, align 2
370 %cmp = icmp sgt <8 x i16> %load.a, %load.b
371 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
372 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
373 %index.next = add i64 %index, 8
374 %loop = icmp eq i64 %index.next, 16384
375 br i1 %loop, label %for.end, label %vector.body
377 for.end: ; preds = %vector.body
380 ; SSE2-LABEL: test11:
383 ; AVX1-LABEL: test11:
386 ; AVX2-LABEL: test11:
389 ; AVX512VL-LABEL: test11:
393 define void @test12(i16* nocapture %a, i16* nocapture %b) nounwind {
395 br label %vector.body
397 vector.body: ; preds = %vector.body, %vector.ph
398 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
399 %gep.a = getelementptr inbounds i16* %a, i64 %index
400 %gep.b = getelementptr inbounds i16* %b, i64 %index
401 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
402 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
403 %load.a = load <8 x i16>* %ptr.a, align 2
404 %load.b = load <8 x i16>* %ptr.b, align 2
405 %cmp = icmp sge <8 x i16> %load.a, %load.b
406 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
407 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
408 %index.next = add i64 %index, 8
409 %loop = icmp eq i64 %index.next, 16384
410 br i1 %loop, label %for.end, label %vector.body
412 for.end: ; preds = %vector.body
415 ; SSE2-LABEL: test12:
418 ; AVX1-LABEL: test12:
421 ; AVX2-LABEL: test12:
424 ; AVX512VL-LABEL: test12:
428 define void @test13(i16* nocapture %a, i16* nocapture %b) nounwind {
430 br label %vector.body
432 vector.body: ; preds = %vector.body, %vector.ph
433 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
434 %gep.a = getelementptr inbounds i16* %a, i64 %index
435 %gep.b = getelementptr inbounds i16* %b, i64 %index
436 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
437 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
438 %load.a = load <8 x i16>* %ptr.a, align 2
439 %load.b = load <8 x i16>* %ptr.b, align 2
440 %cmp = icmp ult <8 x i16> %load.a, %load.b
441 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
442 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
443 %index.next = add i64 %index, 8
444 %loop = icmp eq i64 %index.next, 16384
445 br i1 %loop, label %for.end, label %vector.body
447 for.end: ; preds = %vector.body
450 ; SSE4-LABEL: test13:
453 ; AVX1-LABEL: test13:
456 ; AVX2-LABEL: test13:
459 ; AVX512VL-LABEL: test13:
463 define void @test14(i16* nocapture %a, i16* nocapture %b) nounwind {
465 br label %vector.body
467 vector.body: ; preds = %vector.body, %vector.ph
468 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
469 %gep.a = getelementptr inbounds i16* %a, i64 %index
470 %gep.b = getelementptr inbounds i16* %b, i64 %index
471 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
472 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
473 %load.a = load <8 x i16>* %ptr.a, align 2
474 %load.b = load <8 x i16>* %ptr.b, align 2
475 %cmp = icmp ule <8 x i16> %load.a, %load.b
476 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
477 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
478 %index.next = add i64 %index, 8
479 %loop = icmp eq i64 %index.next, 16384
480 br i1 %loop, label %for.end, label %vector.body
482 for.end: ; preds = %vector.body
485 ; SSE4-LABEL: test14:
488 ; AVX1-LABEL: test14:
491 ; AVX2-LABEL: test14:
494 ; AVX512VL-LABEL: test14:
498 define void @test15(i16* nocapture %a, i16* nocapture %b) nounwind {
500 br label %vector.body
502 vector.body: ; preds = %vector.body, %vector.ph
503 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
504 %gep.a = getelementptr inbounds i16* %a, i64 %index
505 %gep.b = getelementptr inbounds i16* %b, i64 %index
506 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
507 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
508 %load.a = load <8 x i16>* %ptr.a, align 2
509 %load.b = load <8 x i16>* %ptr.b, align 2
510 %cmp = icmp ugt <8 x i16> %load.a, %load.b
511 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
512 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
513 %index.next = add i64 %index, 8
514 %loop = icmp eq i64 %index.next, 16384
515 br i1 %loop, label %for.end, label %vector.body
517 for.end: ; preds = %vector.body
520 ; SSE4-LABEL: test15:
523 ; AVX1-LABEL: test15:
526 ; AVX2-LABEL: test15:
529 ; AVX512VL-LABEL: test15:
533 define void @test16(i16* nocapture %a, i16* nocapture %b) nounwind {
535 br label %vector.body
537 vector.body: ; preds = %vector.body, %vector.ph
538 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
539 %gep.a = getelementptr inbounds i16* %a, i64 %index
540 %gep.b = getelementptr inbounds i16* %b, i64 %index
541 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
542 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
543 %load.a = load <8 x i16>* %ptr.a, align 2
544 %load.b = load <8 x i16>* %ptr.b, align 2
545 %cmp = icmp uge <8 x i16> %load.a, %load.b
546 %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
547 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
548 %index.next = add i64 %index, 8
549 %loop = icmp eq i64 %index.next, 16384
550 br i1 %loop, label %for.end, label %vector.body
552 for.end: ; preds = %vector.body
555 ; SSE4-LABEL: test16:
558 ; AVX1-LABEL: test16:
561 ; AVX2-LABEL: test16:
564 ; AVX512VL-LABEL: test16:
568 define void @test17(i32* nocapture %a, i32* nocapture %b) nounwind {
570 br label %vector.body
572 vector.body: ; preds = %vector.body, %vector.ph
573 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
574 %gep.a = getelementptr inbounds i32* %a, i64 %index
575 %gep.b = getelementptr inbounds i32* %b, i64 %index
576 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
577 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
578 %load.a = load <4 x i32>* %ptr.a, align 2
579 %load.b = load <4 x i32>* %ptr.b, align 2
580 %cmp = icmp slt <4 x i32> %load.a, %load.b
581 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
582 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
583 %index.next = add i64 %index, 4
584 %loop = icmp eq i64 %index.next, 16384
585 br i1 %loop, label %for.end, label %vector.body
587 for.end: ; preds = %vector.body
590 ; SSE4-LABEL: test17:
593 ; AVX1-LABEL: test17:
596 ; AVX2-LABEL: test17:
599 ; AVX512VL-LABEL: test17:
603 define void @test18(i32* nocapture %a, i32* nocapture %b) nounwind {
605 br label %vector.body
607 vector.body: ; preds = %vector.body, %vector.ph
608 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
609 %gep.a = getelementptr inbounds i32* %a, i64 %index
610 %gep.b = getelementptr inbounds i32* %b, i64 %index
611 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
612 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
613 %load.a = load <4 x i32>* %ptr.a, align 2
614 %load.b = load <4 x i32>* %ptr.b, align 2
615 %cmp = icmp sle <4 x i32> %load.a, %load.b
616 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
617 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
618 %index.next = add i64 %index, 4
619 %loop = icmp eq i64 %index.next, 16384
620 br i1 %loop, label %for.end, label %vector.body
622 for.end: ; preds = %vector.body
625 ; SSE4-LABEL: test18:
628 ; AVX1-LABEL: test18:
631 ; AVX2-LABEL: test18:
634 ; AVX512VL-LABEL: test18:
638 define void @test19(i32* nocapture %a, i32* nocapture %b) nounwind {
640 br label %vector.body
642 vector.body: ; preds = %vector.body, %vector.ph
643 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
644 %gep.a = getelementptr inbounds i32* %a, i64 %index
645 %gep.b = getelementptr inbounds i32* %b, i64 %index
646 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
647 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
648 %load.a = load <4 x i32>* %ptr.a, align 2
649 %load.b = load <4 x i32>* %ptr.b, align 2
650 %cmp = icmp sgt <4 x i32> %load.a, %load.b
651 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
652 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
653 %index.next = add i64 %index, 4
654 %loop = icmp eq i64 %index.next, 16384
655 br i1 %loop, label %for.end, label %vector.body
657 for.end: ; preds = %vector.body
660 ; SSE4-LABEL: test19:
663 ; AVX1-LABEL: test19:
666 ; AVX2-LABEL: test19:
669 ; AVX512VL-LABEL: test19:
673 define void @test20(i32* nocapture %a, i32* nocapture %b) nounwind {
675 br label %vector.body
677 vector.body: ; preds = %vector.body, %vector.ph
678 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
679 %gep.a = getelementptr inbounds i32* %a, i64 %index
680 %gep.b = getelementptr inbounds i32* %b, i64 %index
681 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
682 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
683 %load.a = load <4 x i32>* %ptr.a, align 2
684 %load.b = load <4 x i32>* %ptr.b, align 2
685 %cmp = icmp sge <4 x i32> %load.a, %load.b
686 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
687 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
688 %index.next = add i64 %index, 4
689 %loop = icmp eq i64 %index.next, 16384
690 br i1 %loop, label %for.end, label %vector.body
692 for.end: ; preds = %vector.body
695 ; SSE4-LABEL: test20:
698 ; AVX1-LABEL: test20:
701 ; AVX2-LABEL: test20:
704 ; AVX512VL-LABEL: test20:
708 define void @test21(i32* nocapture %a, i32* nocapture %b) nounwind {
710 br label %vector.body
712 vector.body: ; preds = %vector.body, %vector.ph
713 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
714 %gep.a = getelementptr inbounds i32* %a, i64 %index
715 %gep.b = getelementptr inbounds i32* %b, i64 %index
716 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
717 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
718 %load.a = load <4 x i32>* %ptr.a, align 2
719 %load.b = load <4 x i32>* %ptr.b, align 2
720 %cmp = icmp ult <4 x i32> %load.a, %load.b
721 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
722 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
723 %index.next = add i64 %index, 4
724 %loop = icmp eq i64 %index.next, 16384
725 br i1 %loop, label %for.end, label %vector.body
727 for.end: ; preds = %vector.body
730 ; SSE4-LABEL: test21:
733 ; AVX1-LABEL: test21:
736 ; AVX2-LABEL: test21:
739 ; AVX512VL-LABEL: test21:
743 define void @test22(i32* nocapture %a, i32* nocapture %b) nounwind {
745 br label %vector.body
747 vector.body: ; preds = %vector.body, %vector.ph
748 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
749 %gep.a = getelementptr inbounds i32* %a, i64 %index
750 %gep.b = getelementptr inbounds i32* %b, i64 %index
751 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
752 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
753 %load.a = load <4 x i32>* %ptr.a, align 2
754 %load.b = load <4 x i32>* %ptr.b, align 2
755 %cmp = icmp ule <4 x i32> %load.a, %load.b
756 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
757 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
758 %index.next = add i64 %index, 4
759 %loop = icmp eq i64 %index.next, 16384
760 br i1 %loop, label %for.end, label %vector.body
762 for.end: ; preds = %vector.body
765 ; SSE4-LABEL: test22:
768 ; AVX1-LABEL: test22:
771 ; AVX2-LABEL: test22:
774 ; AVX512VL-LABEL: test22:
778 define void @test23(i32* nocapture %a, i32* nocapture %b) nounwind {
780 br label %vector.body
782 vector.body: ; preds = %vector.body, %vector.ph
783 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
784 %gep.a = getelementptr inbounds i32* %a, i64 %index
785 %gep.b = getelementptr inbounds i32* %b, i64 %index
786 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
787 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
788 %load.a = load <4 x i32>* %ptr.a, align 2
789 %load.b = load <4 x i32>* %ptr.b, align 2
790 %cmp = icmp ugt <4 x i32> %load.a, %load.b
791 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
792 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
793 %index.next = add i64 %index, 4
794 %loop = icmp eq i64 %index.next, 16384
795 br i1 %loop, label %for.end, label %vector.body
797 for.end: ; preds = %vector.body
800 ; SSE4-LABEL: test23:
803 ; AVX1-LABEL: test23:
806 ; AVX2-LABEL: test23:
809 ; AVX512VL-LABEL: test23:
813 define void @test24(i32* nocapture %a, i32* nocapture %b) nounwind {
815 br label %vector.body
817 vector.body: ; preds = %vector.body, %vector.ph
818 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
819 %gep.a = getelementptr inbounds i32* %a, i64 %index
820 %gep.b = getelementptr inbounds i32* %b, i64 %index
821 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
822 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
823 %load.a = load <4 x i32>* %ptr.a, align 2
824 %load.b = load <4 x i32>* %ptr.b, align 2
825 %cmp = icmp uge <4 x i32> %load.a, %load.b
826 %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
827 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
828 %index.next = add i64 %index, 4
829 %loop = icmp eq i64 %index.next, 16384
830 br i1 %loop, label %for.end, label %vector.body
832 for.end: ; preds = %vector.body
835 ; SSE4-LABEL: test24:
838 ; AVX1-LABEL: test24:
841 ; AVX2-LABEL: test24:
844 ; AVX512VL-LABEL: test24:
848 define void @test25(i8* nocapture %a, i8* nocapture %b) nounwind {
850 br label %vector.body
852 vector.body: ; preds = %vector.body, %vector.ph
853 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
854 %gep.a = getelementptr inbounds i8* %a, i64 %index
855 %gep.b = getelementptr inbounds i8* %b, i64 %index
856 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
857 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
858 %load.a = load <32 x i8>* %ptr.a, align 2
859 %load.b = load <32 x i8>* %ptr.b, align 2
860 %cmp = icmp slt <32 x i8> %load.a, %load.b
861 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
862 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
863 %index.next = add i64 %index, 32
864 %loop = icmp eq i64 %index.next, 16384
865 br i1 %loop, label %for.end, label %vector.body
867 for.end: ; preds = %vector.body
870 ; AVX2-LABEL: test25:
873 ; AVX512VL-LABEL: test25:
877 define void @test26(i8* nocapture %a, i8* nocapture %b) nounwind {
879 br label %vector.body
881 vector.body: ; preds = %vector.body, %vector.ph
882 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
883 %gep.a = getelementptr inbounds i8* %a, i64 %index
884 %gep.b = getelementptr inbounds i8* %b, i64 %index
885 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
886 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
887 %load.a = load <32 x i8>* %ptr.a, align 2
888 %load.b = load <32 x i8>* %ptr.b, align 2
889 %cmp = icmp sle <32 x i8> %load.a, %load.b
890 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
891 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
892 %index.next = add i64 %index, 32
893 %loop = icmp eq i64 %index.next, 16384
894 br i1 %loop, label %for.end, label %vector.body
896 for.end: ; preds = %vector.body
899 ; AVX2-LABEL: test26:
902 ; AVX512VL-LABEL: test26:
906 define void @test27(i8* nocapture %a, i8* nocapture %b) nounwind {
908 br label %vector.body
910 vector.body: ; preds = %vector.body, %vector.ph
911 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
912 %gep.a = getelementptr inbounds i8* %a, i64 %index
913 %gep.b = getelementptr inbounds i8* %b, i64 %index
914 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
915 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
916 %load.a = load <32 x i8>* %ptr.a, align 2
917 %load.b = load <32 x i8>* %ptr.b, align 2
918 %cmp = icmp sgt <32 x i8> %load.a, %load.b
919 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
920 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
921 %index.next = add i64 %index, 32
922 %loop = icmp eq i64 %index.next, 16384
923 br i1 %loop, label %for.end, label %vector.body
925 for.end: ; preds = %vector.body
928 ; AVX2-LABEL: test27:
931 ; AVX512VL-LABEL: test27:
935 define void @test28(i8* nocapture %a, i8* nocapture %b) nounwind {
937 br label %vector.body
939 vector.body: ; preds = %vector.body, %vector.ph
940 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
941 %gep.a = getelementptr inbounds i8* %a, i64 %index
942 %gep.b = getelementptr inbounds i8* %b, i64 %index
943 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
944 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
945 %load.a = load <32 x i8>* %ptr.a, align 2
946 %load.b = load <32 x i8>* %ptr.b, align 2
947 %cmp = icmp sge <32 x i8> %load.a, %load.b
948 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
949 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
950 %index.next = add i64 %index, 32
951 %loop = icmp eq i64 %index.next, 16384
952 br i1 %loop, label %for.end, label %vector.body
954 for.end: ; preds = %vector.body
957 ; AVX2-LABEL: test28:
960 ; AVX512VL-LABEL: test28:
964 define void @test29(i8* nocapture %a, i8* nocapture %b) nounwind {
966 br label %vector.body
968 vector.body: ; preds = %vector.body, %vector.ph
969 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
970 %gep.a = getelementptr inbounds i8* %a, i64 %index
971 %gep.b = getelementptr inbounds i8* %b, i64 %index
972 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
973 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
974 %load.a = load <32 x i8>* %ptr.a, align 2
975 %load.b = load <32 x i8>* %ptr.b, align 2
976 %cmp = icmp ult <32 x i8> %load.a, %load.b
977 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
978 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
979 %index.next = add i64 %index, 32
980 %loop = icmp eq i64 %index.next, 16384
981 br i1 %loop, label %for.end, label %vector.body
983 for.end: ; preds = %vector.body
986 ; AVX2-LABEL: test29:
989 ; AVX512VL-LABEL: test29:
993 define void @test30(i8* nocapture %a, i8* nocapture %b) nounwind {
995 br label %vector.body
997 vector.body: ; preds = %vector.body, %vector.ph
998 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
999 %gep.a = getelementptr inbounds i8* %a, i64 %index
1000 %gep.b = getelementptr inbounds i8* %b, i64 %index
1001 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
1002 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
1003 %load.a = load <32 x i8>* %ptr.a, align 2
1004 %load.b = load <32 x i8>* %ptr.b, align 2
1005 %cmp = icmp ule <32 x i8> %load.a, %load.b
1006 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
1007 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
1008 %index.next = add i64 %index, 32
1009 %loop = icmp eq i64 %index.next, 16384
1010 br i1 %loop, label %for.end, label %vector.body
1012 for.end: ; preds = %vector.body
1015 ; AVX2-LABEL: test30:
1018 ; AVX512VL-LABEL: test30:
1022 define void @test31(i8* nocapture %a, i8* nocapture %b) nounwind {
1024 br label %vector.body
1026 vector.body: ; preds = %vector.body, %vector.ph
1027 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1028 %gep.a = getelementptr inbounds i8* %a, i64 %index
1029 %gep.b = getelementptr inbounds i8* %b, i64 %index
1030 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
1031 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
1032 %load.a = load <32 x i8>* %ptr.a, align 2
1033 %load.b = load <32 x i8>* %ptr.b, align 2
1034 %cmp = icmp ugt <32 x i8> %load.a, %load.b
1035 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
1036 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
1037 %index.next = add i64 %index, 32
1038 %loop = icmp eq i64 %index.next, 16384
1039 br i1 %loop, label %for.end, label %vector.body
1041 for.end: ; preds = %vector.body
1044 ; AVX2-LABEL: test31:
1047 ; AVX512VL-LABEL: test31:
1051 define void @test32(i8* nocapture %a, i8* nocapture %b) nounwind {
1053 br label %vector.body
1055 vector.body: ; preds = %vector.body, %vector.ph
1056 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1057 %gep.a = getelementptr inbounds i8* %a, i64 %index
1058 %gep.b = getelementptr inbounds i8* %b, i64 %index
1059 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
1060 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
1061 %load.a = load <32 x i8>* %ptr.a, align 2
1062 %load.b = load <32 x i8>* %ptr.b, align 2
1063 %cmp = icmp uge <32 x i8> %load.a, %load.b
1064 %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
1065 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
1066 %index.next = add i64 %index, 32
1067 %loop = icmp eq i64 %index.next, 16384
1068 br i1 %loop, label %for.end, label %vector.body
1070 for.end: ; preds = %vector.body
1073 ; AVX2-LABEL: test32:
1076 ; AVX512VL-LABEL: test32:
1080 define void @test33(i16* nocapture %a, i16* nocapture %b) nounwind {
1082 br label %vector.body
1084 vector.body: ; preds = %vector.body, %vector.ph
1085 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1086 %gep.a = getelementptr inbounds i16* %a, i64 %index
1087 %gep.b = getelementptr inbounds i16* %b, i64 %index
1088 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1089 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1090 %load.a = load <16 x i16>* %ptr.a, align 2
1091 %load.b = load <16 x i16>* %ptr.b, align 2
1092 %cmp = icmp slt <16 x i16> %load.a, %load.b
1093 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1094 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1095 %index.next = add i64 %index, 16
1096 %loop = icmp eq i64 %index.next, 16384
1097 br i1 %loop, label %for.end, label %vector.body
1099 for.end: ; preds = %vector.body
1102 ; AVX2-LABEL: test33:
1105 ; AVX512VL-LABEL: test33:
1109 define void @test34(i16* nocapture %a, i16* nocapture %b) nounwind {
1111 br label %vector.body
1113 vector.body: ; preds = %vector.body, %vector.ph
1114 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1115 %gep.a = getelementptr inbounds i16* %a, i64 %index
1116 %gep.b = getelementptr inbounds i16* %b, i64 %index
1117 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1118 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1119 %load.a = load <16 x i16>* %ptr.a, align 2
1120 %load.b = load <16 x i16>* %ptr.b, align 2
1121 %cmp = icmp sle <16 x i16> %load.a, %load.b
1122 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1123 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1124 %index.next = add i64 %index, 16
1125 %loop = icmp eq i64 %index.next, 16384
1126 br i1 %loop, label %for.end, label %vector.body
1128 for.end: ; preds = %vector.body
1131 ; AVX2-LABEL: test34:
1134 ; AVX512VL-LABEL: test34:
1138 define void @test35(i16* nocapture %a, i16* nocapture %b) nounwind {
1140 br label %vector.body
1142 vector.body: ; preds = %vector.body, %vector.ph
1143 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1144 %gep.a = getelementptr inbounds i16* %a, i64 %index
1145 %gep.b = getelementptr inbounds i16* %b, i64 %index
1146 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1147 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1148 %load.a = load <16 x i16>* %ptr.a, align 2
1149 %load.b = load <16 x i16>* %ptr.b, align 2
1150 %cmp = icmp sgt <16 x i16> %load.a, %load.b
1151 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1152 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1153 %index.next = add i64 %index, 16
1154 %loop = icmp eq i64 %index.next, 16384
1155 br i1 %loop, label %for.end, label %vector.body
1157 for.end: ; preds = %vector.body
1160 ; AVX2-LABEL: test35:
1163 ; AVX512VL-LABEL: test35:
1167 define void @test36(i16* nocapture %a, i16* nocapture %b) nounwind {
1169 br label %vector.body
1171 vector.body: ; preds = %vector.body, %vector.ph
1172 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1173 %gep.a = getelementptr inbounds i16* %a, i64 %index
1174 %gep.b = getelementptr inbounds i16* %b, i64 %index
1175 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1176 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1177 %load.a = load <16 x i16>* %ptr.a, align 2
1178 %load.b = load <16 x i16>* %ptr.b, align 2
1179 %cmp = icmp sge <16 x i16> %load.a, %load.b
1180 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1181 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1182 %index.next = add i64 %index, 16
1183 %loop = icmp eq i64 %index.next, 16384
1184 br i1 %loop, label %for.end, label %vector.body
1186 for.end: ; preds = %vector.body
1189 ; AVX2-LABEL: test36:
1192 ; AVX512VL-LABEL: test36:
1196 define void @test37(i16* nocapture %a, i16* nocapture %b) nounwind {
1198 br label %vector.body
1200 vector.body: ; preds = %vector.body, %vector.ph
1201 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1202 %gep.a = getelementptr inbounds i16* %a, i64 %index
1203 %gep.b = getelementptr inbounds i16* %b, i64 %index
1204 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1205 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1206 %load.a = load <16 x i16>* %ptr.a, align 2
1207 %load.b = load <16 x i16>* %ptr.b, align 2
1208 %cmp = icmp ult <16 x i16> %load.a, %load.b
1209 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1210 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1211 %index.next = add i64 %index, 16
1212 %loop = icmp eq i64 %index.next, 16384
1213 br i1 %loop, label %for.end, label %vector.body
1215 for.end: ; preds = %vector.body
1218 ; AVX2-LABEL: test37:
1221 ; AVX512VL-LABEL: test37:
1225 define void @test38(i16* nocapture %a, i16* nocapture %b) nounwind {
1227 br label %vector.body
1229 vector.body: ; preds = %vector.body, %vector.ph
1230 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1231 %gep.a = getelementptr inbounds i16* %a, i64 %index
1232 %gep.b = getelementptr inbounds i16* %b, i64 %index
1233 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1234 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1235 %load.a = load <16 x i16>* %ptr.a, align 2
1236 %load.b = load <16 x i16>* %ptr.b, align 2
1237 %cmp = icmp ule <16 x i16> %load.a, %load.b
1238 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1239 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1240 %index.next = add i64 %index, 16
1241 %loop = icmp eq i64 %index.next, 16384
1242 br i1 %loop, label %for.end, label %vector.body
1244 for.end: ; preds = %vector.body
1247 ; AVX2-LABEL: test38:
1250 ; AVX512VL-LABEL: test38:
1254 define void @test39(i16* nocapture %a, i16* nocapture %b) nounwind {
1256 br label %vector.body
1258 vector.body: ; preds = %vector.body, %vector.ph
1259 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1260 %gep.a = getelementptr inbounds i16* %a, i64 %index
1261 %gep.b = getelementptr inbounds i16* %b, i64 %index
1262 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1263 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1264 %load.a = load <16 x i16>* %ptr.a, align 2
1265 %load.b = load <16 x i16>* %ptr.b, align 2
1266 %cmp = icmp ugt <16 x i16> %load.a, %load.b
1267 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1268 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1269 %index.next = add i64 %index, 16
1270 %loop = icmp eq i64 %index.next, 16384
1271 br i1 %loop, label %for.end, label %vector.body
1273 for.end: ; preds = %vector.body
1276 ; AVX2-LABEL: test39:
1279 ; AVX512VL-LABEL: test39:
1283 define void @test40(i16* nocapture %a, i16* nocapture %b) nounwind {
1285 br label %vector.body
1287 vector.body: ; preds = %vector.body, %vector.ph
1288 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1289 %gep.a = getelementptr inbounds i16* %a, i64 %index
1290 %gep.b = getelementptr inbounds i16* %b, i64 %index
1291 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
1292 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
1293 %load.a = load <16 x i16>* %ptr.a, align 2
1294 %load.b = load <16 x i16>* %ptr.b, align 2
1295 %cmp = icmp uge <16 x i16> %load.a, %load.b
1296 %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
1297 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
1298 %index.next = add i64 %index, 16
1299 %loop = icmp eq i64 %index.next, 16384
1300 br i1 %loop, label %for.end, label %vector.body
1302 for.end: ; preds = %vector.body
1305 ; AVX2-LABEL: test40:
1308 ; AVX512VL-LABEL: test40:
1312 define void @test41(i32* nocapture %a, i32* nocapture %b) nounwind {
1314 br label %vector.body
1316 vector.body: ; preds = %vector.body, %vector.ph
1317 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1318 %gep.a = getelementptr inbounds i32* %a, i64 %index
1319 %gep.b = getelementptr inbounds i32* %b, i64 %index
1320 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1321 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1322 %load.a = load <8 x i32>* %ptr.a, align 2
1323 %load.b = load <8 x i32>* %ptr.b, align 2
1324 %cmp = icmp slt <8 x i32> %load.a, %load.b
1325 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1326 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1327 %index.next = add i64 %index, 8
1328 %loop = icmp eq i64 %index.next, 16384
1329 br i1 %loop, label %for.end, label %vector.body
1331 for.end: ; preds = %vector.body
1334 ; AVX2-LABEL: test41:
1337 ; AVX512VL-LABEL: test41:
1341 define void @test42(i32* nocapture %a, i32* nocapture %b) nounwind {
1343 br label %vector.body
1345 vector.body: ; preds = %vector.body, %vector.ph
1346 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1347 %gep.a = getelementptr inbounds i32* %a, i64 %index
1348 %gep.b = getelementptr inbounds i32* %b, i64 %index
1349 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1350 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1351 %load.a = load <8 x i32>* %ptr.a, align 2
1352 %load.b = load <8 x i32>* %ptr.b, align 2
1353 %cmp = icmp sle <8 x i32> %load.a, %load.b
1354 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1355 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1356 %index.next = add i64 %index, 8
1357 %loop = icmp eq i64 %index.next, 16384
1358 br i1 %loop, label %for.end, label %vector.body
1360 for.end: ; preds = %vector.body
1363 ; AVX2-LABEL: test42:
1366 ; AVX512VL-LABEL: test42:
1370 define void @test43(i32* nocapture %a, i32* nocapture %b) nounwind {
1372 br label %vector.body
1374 vector.body: ; preds = %vector.body, %vector.ph
1375 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1376 %gep.a = getelementptr inbounds i32* %a, i64 %index
1377 %gep.b = getelementptr inbounds i32* %b, i64 %index
1378 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1379 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1380 %load.a = load <8 x i32>* %ptr.a, align 2
1381 %load.b = load <8 x i32>* %ptr.b, align 2
1382 %cmp = icmp sgt <8 x i32> %load.a, %load.b
1383 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1384 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1385 %index.next = add i64 %index, 8
1386 %loop = icmp eq i64 %index.next, 16384
1387 br i1 %loop, label %for.end, label %vector.body
1389 for.end: ; preds = %vector.body
1392 ; AVX2-LABEL: test43:
1395 ; AVX512VL-LABEL: test43:
1399 define void @test44(i32* nocapture %a, i32* nocapture %b) nounwind {
1401 br label %vector.body
1403 vector.body: ; preds = %vector.body, %vector.ph
1404 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1405 %gep.a = getelementptr inbounds i32* %a, i64 %index
1406 %gep.b = getelementptr inbounds i32* %b, i64 %index
1407 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1408 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1409 %load.a = load <8 x i32>* %ptr.a, align 2
1410 %load.b = load <8 x i32>* %ptr.b, align 2
1411 %cmp = icmp sge <8 x i32> %load.a, %load.b
1412 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1413 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1414 %index.next = add i64 %index, 8
1415 %loop = icmp eq i64 %index.next, 16384
1416 br i1 %loop, label %for.end, label %vector.body
1418 for.end: ; preds = %vector.body
1421 ; AVX2-LABEL: test44:
1424 ; AVX512VL-LABEL: test44:
1428 define void @test45(i32* nocapture %a, i32* nocapture %b) nounwind {
1430 br label %vector.body
1432 vector.body: ; preds = %vector.body, %vector.ph
1433 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1434 %gep.a = getelementptr inbounds i32* %a, i64 %index
1435 %gep.b = getelementptr inbounds i32* %b, i64 %index
1436 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1437 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1438 %load.a = load <8 x i32>* %ptr.a, align 2
1439 %load.b = load <8 x i32>* %ptr.b, align 2
1440 %cmp = icmp ult <8 x i32> %load.a, %load.b
1441 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1442 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1443 %index.next = add i64 %index, 8
1444 %loop = icmp eq i64 %index.next, 16384
1445 br i1 %loop, label %for.end, label %vector.body
1447 for.end: ; preds = %vector.body
1450 ; AVX2-LABEL: test45:
1453 ; AVX512VL-LABEL: test45:
1457 define void @test46(i32* nocapture %a, i32* nocapture %b) nounwind {
1459 br label %vector.body
1461 vector.body: ; preds = %vector.body, %vector.ph
1462 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1463 %gep.a = getelementptr inbounds i32* %a, i64 %index
1464 %gep.b = getelementptr inbounds i32* %b, i64 %index
1465 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1466 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1467 %load.a = load <8 x i32>* %ptr.a, align 2
1468 %load.b = load <8 x i32>* %ptr.b, align 2
1469 %cmp = icmp ule <8 x i32> %load.a, %load.b
1470 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1471 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1472 %index.next = add i64 %index, 8
1473 %loop = icmp eq i64 %index.next, 16384
1474 br i1 %loop, label %for.end, label %vector.body
1476 for.end: ; preds = %vector.body
1479 ; AVX2-LABEL: test46:
1482 ; AVX512VL-LABEL: test46:
1486 define void @test47(i32* nocapture %a, i32* nocapture %b) nounwind {
1488 br label %vector.body
1490 vector.body: ; preds = %vector.body, %vector.ph
1491 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1492 %gep.a = getelementptr inbounds i32* %a, i64 %index
1493 %gep.b = getelementptr inbounds i32* %b, i64 %index
1494 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1495 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1496 %load.a = load <8 x i32>* %ptr.a, align 2
1497 %load.b = load <8 x i32>* %ptr.b, align 2
1498 %cmp = icmp ugt <8 x i32> %load.a, %load.b
1499 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1500 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1501 %index.next = add i64 %index, 8
1502 %loop = icmp eq i64 %index.next, 16384
1503 br i1 %loop, label %for.end, label %vector.body
1505 for.end: ; preds = %vector.body
1508 ; AVX2-LABEL: test47:
1511 ; AVX512VL-LABEL: test47:
1515 define void @test48(i32* nocapture %a, i32* nocapture %b) nounwind {
1517 br label %vector.body
1519 vector.body: ; preds = %vector.body, %vector.ph
1520 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1521 %gep.a = getelementptr inbounds i32* %a, i64 %index
1522 %gep.b = getelementptr inbounds i32* %b, i64 %index
1523 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
1524 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
1525 %load.a = load <8 x i32>* %ptr.a, align 2
1526 %load.b = load <8 x i32>* %ptr.b, align 2
1527 %cmp = icmp uge <8 x i32> %load.a, %load.b
1528 %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
1529 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
1530 %index.next = add i64 %index, 8
1531 %loop = icmp eq i64 %index.next, 16384
1532 br i1 %loop, label %for.end, label %vector.body
1534 for.end: ; preds = %vector.body
1537 ; AVX2-LABEL: test48:
1540 ; AVX512VL-LABEL: test48:
1544 define void @test49(i8* nocapture %a, i8* nocapture %b) nounwind {
1546 br label %vector.body
1548 vector.body: ; preds = %vector.body, %vector.ph
1549 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1550 %gep.a = getelementptr inbounds i8* %a, i64 %index
1551 %gep.b = getelementptr inbounds i8* %b, i64 %index
1552 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1553 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1554 %load.a = load <16 x i8>* %ptr.a, align 2
1555 %load.b = load <16 x i8>* %ptr.b, align 2
1556 %cmp = icmp slt <16 x i8> %load.a, %load.b
1557 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1558 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1559 %index.next = add i64 %index, 16
1560 %loop = icmp eq i64 %index.next, 16384
1561 br i1 %loop, label %for.end, label %vector.body
1563 for.end: ; preds = %vector.body
1566 ; SSE4-LABEL: test49:
1569 ; AVX1-LABEL: test49:
1572 ; AVX2-LABEL: test49:
1575 ; AVX512VL-LABEL: test49:
1579 define void @test50(i8* nocapture %a, i8* nocapture %b) nounwind {
1581 br label %vector.body
1583 vector.body: ; preds = %vector.body, %vector.ph
1584 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1585 %gep.a = getelementptr inbounds i8* %a, i64 %index
1586 %gep.b = getelementptr inbounds i8* %b, i64 %index
1587 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1588 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1589 %load.a = load <16 x i8>* %ptr.a, align 2
1590 %load.b = load <16 x i8>* %ptr.b, align 2
1591 %cmp = icmp sle <16 x i8> %load.a, %load.b
1592 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1593 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1594 %index.next = add i64 %index, 16
1595 %loop = icmp eq i64 %index.next, 16384
1596 br i1 %loop, label %for.end, label %vector.body
1598 for.end: ; preds = %vector.body
1601 ; SSE4-LABEL: test50:
1604 ; AVX1-LABEL: test50:
1607 ; AVX2-LABEL: test50:
1610 ; AVX512VL-LABEL: test50:
1614 define void @test51(i8* nocapture %a, i8* nocapture %b) nounwind {
1616 br label %vector.body
1618 vector.body: ; preds = %vector.body, %vector.ph
1619 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1620 %gep.a = getelementptr inbounds i8* %a, i64 %index
1621 %gep.b = getelementptr inbounds i8* %b, i64 %index
1622 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1623 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1624 %load.a = load <16 x i8>* %ptr.a, align 2
1625 %load.b = load <16 x i8>* %ptr.b, align 2
1626 %cmp = icmp sgt <16 x i8> %load.a, %load.b
1627 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1628 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1629 %index.next = add i64 %index, 16
1630 %loop = icmp eq i64 %index.next, 16384
1631 br i1 %loop, label %for.end, label %vector.body
1633 for.end: ; preds = %vector.body
1636 ; SSE4-LABEL: test51:
1639 ; AVX1-LABEL: test51:
1642 ; AVX2-LABEL: test51:
1645 ; AVX512VL-LABEL: test51:
1649 define void @test52(i8* nocapture %a, i8* nocapture %b) nounwind {
1651 br label %vector.body
1653 vector.body: ; preds = %vector.body, %vector.ph
1654 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1655 %gep.a = getelementptr inbounds i8* %a, i64 %index
1656 %gep.b = getelementptr inbounds i8* %b, i64 %index
1657 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1658 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1659 %load.a = load <16 x i8>* %ptr.a, align 2
1660 %load.b = load <16 x i8>* %ptr.b, align 2
1661 %cmp = icmp sge <16 x i8> %load.a, %load.b
1662 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1663 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1664 %index.next = add i64 %index, 16
1665 %loop = icmp eq i64 %index.next, 16384
1666 br i1 %loop, label %for.end, label %vector.body
1668 for.end: ; preds = %vector.body
1671 ; SSE4-LABEL: test52:
1674 ; AVX1-LABEL: test52:
1677 ; AVX2-LABEL: test52:
1680 ; AVX512VL-LABEL: test52:
1684 define void @test53(i8* nocapture %a, i8* nocapture %b) nounwind {
1686 br label %vector.body
1688 vector.body: ; preds = %vector.body, %vector.ph
1689 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1690 %gep.a = getelementptr inbounds i8* %a, i64 %index
1691 %gep.b = getelementptr inbounds i8* %b, i64 %index
1692 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1693 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1694 %load.a = load <16 x i8>* %ptr.a, align 2
1695 %load.b = load <16 x i8>* %ptr.b, align 2
1696 %cmp = icmp ult <16 x i8> %load.a, %load.b
1697 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1698 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1699 %index.next = add i64 %index, 16
1700 %loop = icmp eq i64 %index.next, 16384
1701 br i1 %loop, label %for.end, label %vector.body
1703 for.end: ; preds = %vector.body
1706 ; SSE2-LABEL: test53:
1709 ; AVX1-LABEL: test53:
1712 ; AVX2-LABEL: test53:
1715 ; AVX512VL-LABEL: test53:
1719 define void @test54(i8* nocapture %a, i8* nocapture %b) nounwind {
1721 br label %vector.body
1723 vector.body: ; preds = %vector.body, %vector.ph
1724 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1725 %gep.a = getelementptr inbounds i8* %a, i64 %index
1726 %gep.b = getelementptr inbounds i8* %b, i64 %index
1727 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1728 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1729 %load.a = load <16 x i8>* %ptr.a, align 2
1730 %load.b = load <16 x i8>* %ptr.b, align 2
1731 %cmp = icmp ule <16 x i8> %load.a, %load.b
1732 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1733 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1734 %index.next = add i64 %index, 16
1735 %loop = icmp eq i64 %index.next, 16384
1736 br i1 %loop, label %for.end, label %vector.body
1738 for.end: ; preds = %vector.body
1741 ; SSE2-LABEL: test54:
1744 ; AVX1-LABEL: test54:
1747 ; AVX2-LABEL: test54:
1750 ; AVX512VL-LABEL: test54:
1754 define void @test55(i8* nocapture %a, i8* nocapture %b) nounwind {
1756 br label %vector.body
1758 vector.body: ; preds = %vector.body, %vector.ph
1759 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1760 %gep.a = getelementptr inbounds i8* %a, i64 %index
1761 %gep.b = getelementptr inbounds i8* %b, i64 %index
1762 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1763 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1764 %load.a = load <16 x i8>* %ptr.a, align 2
1765 %load.b = load <16 x i8>* %ptr.b, align 2
1766 %cmp = icmp ugt <16 x i8> %load.a, %load.b
1767 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1768 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1769 %index.next = add i64 %index, 16
1770 %loop = icmp eq i64 %index.next, 16384
1771 br i1 %loop, label %for.end, label %vector.body
1773 for.end: ; preds = %vector.body
1776 ; SSE2-LABEL: test55:
1779 ; AVX1-LABEL: test55:
1782 ; AVX2-LABEL: test55:
1785 ; AVX512VL-LABEL: test55:
1789 define void @test56(i8* nocapture %a, i8* nocapture %b) nounwind {
1791 br label %vector.body
1793 vector.body: ; preds = %vector.body, %vector.ph
1794 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1795 %gep.a = getelementptr inbounds i8* %a, i64 %index
1796 %gep.b = getelementptr inbounds i8* %b, i64 %index
1797 %ptr.a = bitcast i8* %gep.a to <16 x i8>*
1798 %ptr.b = bitcast i8* %gep.b to <16 x i8>*
1799 %load.a = load <16 x i8>* %ptr.a, align 2
1800 %load.b = load <16 x i8>* %ptr.b, align 2
1801 %cmp = icmp uge <16 x i8> %load.a, %load.b
1802 %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
1803 store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
1804 %index.next = add i64 %index, 16
1805 %loop = icmp eq i64 %index.next, 16384
1806 br i1 %loop, label %for.end, label %vector.body
1808 for.end: ; preds = %vector.body
1811 ; SSE2-LABEL: test56:
1814 ; AVX1-LABEL: test56:
1817 ; AVX2-LABEL: test56:
1820 ; AVX512VL-LABEL: test56:
1824 define void @test57(i16* nocapture %a, i16* nocapture %b) nounwind {
1826 br label %vector.body
1828 vector.body: ; preds = %vector.body, %vector.ph
1829 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1830 %gep.a = getelementptr inbounds i16* %a, i64 %index
1831 %gep.b = getelementptr inbounds i16* %b, i64 %index
1832 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
1833 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
1834 %load.a = load <8 x i16>* %ptr.a, align 2
1835 %load.b = load <8 x i16>* %ptr.b, align 2
1836 %cmp = icmp slt <8 x i16> %load.a, %load.b
1837 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
1838 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
1839 %index.next = add i64 %index, 8
1840 %loop = icmp eq i64 %index.next, 16384
1841 br i1 %loop, label %for.end, label %vector.body
1843 for.end: ; preds = %vector.body
1846 ; SSE2-LABEL: test57:
1849 ; AVX1-LABEL: test57:
1852 ; AVX2-LABEL: test57:
1855 ; AVX512VL-LABEL: test57:
1859 define void @test58(i16* nocapture %a, i16* nocapture %b) nounwind {
1861 br label %vector.body
1863 vector.body: ; preds = %vector.body, %vector.ph
1864 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1865 %gep.a = getelementptr inbounds i16* %a, i64 %index
1866 %gep.b = getelementptr inbounds i16* %b, i64 %index
1867 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
1868 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
1869 %load.a = load <8 x i16>* %ptr.a, align 2
1870 %load.b = load <8 x i16>* %ptr.b, align 2
1871 %cmp = icmp sle <8 x i16> %load.a, %load.b
1872 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
1873 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
1874 %index.next = add i64 %index, 8
1875 %loop = icmp eq i64 %index.next, 16384
1876 br i1 %loop, label %for.end, label %vector.body
1878 for.end: ; preds = %vector.body
1881 ; SSE2-LABEL: test58:
1884 ; AVX1-LABEL: test58:
1887 ; AVX2-LABEL: test58:
1890 ; AVX512VL-LABEL: test58:
1894 define void @test59(i16* nocapture %a, i16* nocapture %b) nounwind {
1896 br label %vector.body
1898 vector.body: ; preds = %vector.body, %vector.ph
1899 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1900 %gep.a = getelementptr inbounds i16* %a, i64 %index
1901 %gep.b = getelementptr inbounds i16* %b, i64 %index
1902 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
1903 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
1904 %load.a = load <8 x i16>* %ptr.a, align 2
1905 %load.b = load <8 x i16>* %ptr.b, align 2
1906 %cmp = icmp sgt <8 x i16> %load.a, %load.b
1907 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
1908 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
1909 %index.next = add i64 %index, 8
1910 %loop = icmp eq i64 %index.next, 16384
1911 br i1 %loop, label %for.end, label %vector.body
1913 for.end: ; preds = %vector.body
1916 ; SSE2-LABEL: test59:
1919 ; AVX1-LABEL: test59:
1922 ; AVX2-LABEL: test59:
1925 ; AVX512VL-LABEL: test59:
1929 define void @test60(i16* nocapture %a, i16* nocapture %b) nounwind {
1931 br label %vector.body
1933 vector.body: ; preds = %vector.body, %vector.ph
1934 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1935 %gep.a = getelementptr inbounds i16* %a, i64 %index
1936 %gep.b = getelementptr inbounds i16* %b, i64 %index
1937 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
1938 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
1939 %load.a = load <8 x i16>* %ptr.a, align 2
1940 %load.b = load <8 x i16>* %ptr.b, align 2
1941 %cmp = icmp sge <8 x i16> %load.a, %load.b
1942 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
1943 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
1944 %index.next = add i64 %index, 8
1945 %loop = icmp eq i64 %index.next, 16384
1946 br i1 %loop, label %for.end, label %vector.body
1948 for.end: ; preds = %vector.body
1951 ; SSE2-LABEL: test60:
1954 ; AVX1-LABEL: test60:
1957 ; AVX2-LABEL: test60:
1960 ; AVX512VL-LABEL: test60:
1964 define void @test61(i16* nocapture %a, i16* nocapture %b) nounwind {
1966 br label %vector.body
1968 vector.body: ; preds = %vector.body, %vector.ph
1969 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
1970 %gep.a = getelementptr inbounds i16* %a, i64 %index
1971 %gep.b = getelementptr inbounds i16* %b, i64 %index
1972 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
1973 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
1974 %load.a = load <8 x i16>* %ptr.a, align 2
1975 %load.b = load <8 x i16>* %ptr.b, align 2
1976 %cmp = icmp ult <8 x i16> %load.a, %load.b
1977 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
1978 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
1979 %index.next = add i64 %index, 8
1980 %loop = icmp eq i64 %index.next, 16384
1981 br i1 %loop, label %for.end, label %vector.body
1983 for.end: ; preds = %vector.body
1986 ; SSE4-LABEL: test61:
1989 ; AVX1-LABEL: test61:
1992 ; AVX2-LABEL: test61:
1995 ; AVX512VL-LABEL: test61:
1999 define void @test62(i16* nocapture %a, i16* nocapture %b) nounwind {
2001 br label %vector.body
2003 vector.body: ; preds = %vector.body, %vector.ph
2004 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2005 %gep.a = getelementptr inbounds i16* %a, i64 %index
2006 %gep.b = getelementptr inbounds i16* %b, i64 %index
2007 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
2008 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
2009 %load.a = load <8 x i16>* %ptr.a, align 2
2010 %load.b = load <8 x i16>* %ptr.b, align 2
2011 %cmp = icmp ule <8 x i16> %load.a, %load.b
2012 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
2013 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
2014 %index.next = add i64 %index, 8
2015 %loop = icmp eq i64 %index.next, 16384
2016 br i1 %loop, label %for.end, label %vector.body
2018 for.end: ; preds = %vector.body
2021 ; SSE4-LABEL: test62:
2024 ; AVX1-LABEL: test62:
2027 ; AVX2-LABEL: test62:
2030 ; AVX512VL-LABEL: test62:
2034 define void @test63(i16* nocapture %a, i16* nocapture %b) nounwind {
2036 br label %vector.body
2038 vector.body: ; preds = %vector.body, %vector.ph
2039 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2040 %gep.a = getelementptr inbounds i16* %a, i64 %index
2041 %gep.b = getelementptr inbounds i16* %b, i64 %index
2042 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
2043 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
2044 %load.a = load <8 x i16>* %ptr.a, align 2
2045 %load.b = load <8 x i16>* %ptr.b, align 2
2046 %cmp = icmp ugt <8 x i16> %load.a, %load.b
2047 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
2048 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
2049 %index.next = add i64 %index, 8
2050 %loop = icmp eq i64 %index.next, 16384
2051 br i1 %loop, label %for.end, label %vector.body
2053 for.end: ; preds = %vector.body
2056 ; SSE4-LABEL: test63:
2059 ; AVX1-LABEL: test63:
2062 ; AVX2-LABEL: test63:
2065 ; AVX512VL-LABEL: test63:
2069 define void @test64(i16* nocapture %a, i16* nocapture %b) nounwind {
2071 br label %vector.body
2073 vector.body: ; preds = %vector.body, %vector.ph
2074 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2075 %gep.a = getelementptr inbounds i16* %a, i64 %index
2076 %gep.b = getelementptr inbounds i16* %b, i64 %index
2077 %ptr.a = bitcast i16* %gep.a to <8 x i16>*
2078 %ptr.b = bitcast i16* %gep.b to <8 x i16>*
2079 %load.a = load <8 x i16>* %ptr.a, align 2
2080 %load.b = load <8 x i16>* %ptr.b, align 2
2081 %cmp = icmp uge <8 x i16> %load.a, %load.b
2082 %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
2083 store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
2084 %index.next = add i64 %index, 8
2085 %loop = icmp eq i64 %index.next, 16384
2086 br i1 %loop, label %for.end, label %vector.body
2088 for.end: ; preds = %vector.body
2091 ; SSE4-LABEL: test64:
2094 ; AVX1-LABEL: test64:
2097 ; AVX2-LABEL: test64:
2100 ; AVX512VL-LABEL: test64:
2104 define void @test65(i32* nocapture %a, i32* nocapture %b) nounwind {
2106 br label %vector.body
2108 vector.body: ; preds = %vector.body, %vector.ph
2109 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2110 %gep.a = getelementptr inbounds i32* %a, i64 %index
2111 %gep.b = getelementptr inbounds i32* %b, i64 %index
2112 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2113 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2114 %load.a = load <4 x i32>* %ptr.a, align 2
2115 %load.b = load <4 x i32>* %ptr.b, align 2
2116 %cmp = icmp slt <4 x i32> %load.a, %load.b
2117 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2118 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2119 %index.next = add i64 %index, 4
2120 %loop = icmp eq i64 %index.next, 16384
2121 br i1 %loop, label %for.end, label %vector.body
2123 for.end: ; preds = %vector.body
2126 ; SSE4-LABEL: test65:
2129 ; AVX1-LABEL: test65:
2132 ; AVX2-LABEL: test65:
2135 ; AVX512VL-LABEL: test65:
2139 define void @test66(i32* nocapture %a, i32* nocapture %b) nounwind {
2141 br label %vector.body
2143 vector.body: ; preds = %vector.body, %vector.ph
2144 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2145 %gep.a = getelementptr inbounds i32* %a, i64 %index
2146 %gep.b = getelementptr inbounds i32* %b, i64 %index
2147 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2148 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2149 %load.a = load <4 x i32>* %ptr.a, align 2
2150 %load.b = load <4 x i32>* %ptr.b, align 2
2151 %cmp = icmp sle <4 x i32> %load.a, %load.b
2152 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2153 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2154 %index.next = add i64 %index, 4
2155 %loop = icmp eq i64 %index.next, 16384
2156 br i1 %loop, label %for.end, label %vector.body
2158 for.end: ; preds = %vector.body
2161 ; SSE4-LABEL: test66:
2164 ; AVX1-LABEL: test66:
2167 ; AVX2-LABEL: test66:
2170 ; AVX512VL-LABEL: test66:
2174 define void @test67(i32* nocapture %a, i32* nocapture %b) nounwind {
2176 br label %vector.body
2178 vector.body: ; preds = %vector.body, %vector.ph
2179 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2180 %gep.a = getelementptr inbounds i32* %a, i64 %index
2181 %gep.b = getelementptr inbounds i32* %b, i64 %index
2182 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2183 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2184 %load.a = load <4 x i32>* %ptr.a, align 2
2185 %load.b = load <4 x i32>* %ptr.b, align 2
2186 %cmp = icmp sgt <4 x i32> %load.a, %load.b
2187 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2188 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2189 %index.next = add i64 %index, 4
2190 %loop = icmp eq i64 %index.next, 16384
2191 br i1 %loop, label %for.end, label %vector.body
2193 for.end: ; preds = %vector.body
2196 ; SSE4-LABEL: test67:
2199 ; AVX1-LABEL: test67:
2202 ; AVX2-LABEL: test67:
2205 ; AVX512VL-LABEL: test67:
2209 define void @test68(i32* nocapture %a, i32* nocapture %b) nounwind {
2211 br label %vector.body
2213 vector.body: ; preds = %vector.body, %vector.ph
2214 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2215 %gep.a = getelementptr inbounds i32* %a, i64 %index
2216 %gep.b = getelementptr inbounds i32* %b, i64 %index
2217 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2218 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2219 %load.a = load <4 x i32>* %ptr.a, align 2
2220 %load.b = load <4 x i32>* %ptr.b, align 2
2221 %cmp = icmp sge <4 x i32> %load.a, %load.b
2222 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2223 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2224 %index.next = add i64 %index, 4
2225 %loop = icmp eq i64 %index.next, 16384
2226 br i1 %loop, label %for.end, label %vector.body
2228 for.end: ; preds = %vector.body
2231 ; SSE4-LABEL: test68:
2234 ; AVX1-LABEL: test68:
2237 ; AVX2-LABEL: test68:
2240 ; AVX512VL-LABEL: test68:
2244 define void @test69(i32* nocapture %a, i32* nocapture %b) nounwind {
2246 br label %vector.body
2248 vector.body: ; preds = %vector.body, %vector.ph
2249 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2250 %gep.a = getelementptr inbounds i32* %a, i64 %index
2251 %gep.b = getelementptr inbounds i32* %b, i64 %index
2252 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2253 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2254 %load.a = load <4 x i32>* %ptr.a, align 2
2255 %load.b = load <4 x i32>* %ptr.b, align 2
2256 %cmp = icmp ult <4 x i32> %load.a, %load.b
2257 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2258 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2259 %index.next = add i64 %index, 4
2260 %loop = icmp eq i64 %index.next, 16384
2261 br i1 %loop, label %for.end, label %vector.body
2263 for.end: ; preds = %vector.body
2266 ; SSE4-LABEL: test69:
2269 ; AVX1-LABEL: test69:
2272 ; AVX2-LABEL: test69:
2275 ; AVX512VL-LABEL: test69:
2279 define void @test70(i32* nocapture %a, i32* nocapture %b) nounwind {
2281 br label %vector.body
2283 vector.body: ; preds = %vector.body, %vector.ph
2284 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2285 %gep.a = getelementptr inbounds i32* %a, i64 %index
2286 %gep.b = getelementptr inbounds i32* %b, i64 %index
2287 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2288 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2289 %load.a = load <4 x i32>* %ptr.a, align 2
2290 %load.b = load <4 x i32>* %ptr.b, align 2
2291 %cmp = icmp ule <4 x i32> %load.a, %load.b
2292 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2293 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2294 %index.next = add i64 %index, 4
2295 %loop = icmp eq i64 %index.next, 16384
2296 br i1 %loop, label %for.end, label %vector.body
2298 for.end: ; preds = %vector.body
2301 ; SSE4-LABEL: test70:
2304 ; AVX1-LABEL: test70:
2307 ; AVX2-LABEL: test70:
2310 ; AVX512VL-LABEL: test70:
2314 define void @test71(i32* nocapture %a, i32* nocapture %b) nounwind {
2316 br label %vector.body
2318 vector.body: ; preds = %vector.body, %vector.ph
2319 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2320 %gep.a = getelementptr inbounds i32* %a, i64 %index
2321 %gep.b = getelementptr inbounds i32* %b, i64 %index
2322 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2323 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2324 %load.a = load <4 x i32>* %ptr.a, align 2
2325 %load.b = load <4 x i32>* %ptr.b, align 2
2326 %cmp = icmp ugt <4 x i32> %load.a, %load.b
2327 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2328 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2329 %index.next = add i64 %index, 4
2330 %loop = icmp eq i64 %index.next, 16384
2331 br i1 %loop, label %for.end, label %vector.body
2333 for.end: ; preds = %vector.body
2336 ; SSE4-LABEL: test71:
2339 ; AVX1-LABEL: test71:
2342 ; AVX2-LABEL: test71:
2345 ; AVX512VL-LABEL: test71:
2349 define void @test72(i32* nocapture %a, i32* nocapture %b) nounwind {
2351 br label %vector.body
2353 vector.body: ; preds = %vector.body, %vector.ph
2354 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2355 %gep.a = getelementptr inbounds i32* %a, i64 %index
2356 %gep.b = getelementptr inbounds i32* %b, i64 %index
2357 %ptr.a = bitcast i32* %gep.a to <4 x i32>*
2358 %ptr.b = bitcast i32* %gep.b to <4 x i32>*
2359 %load.a = load <4 x i32>* %ptr.a, align 2
2360 %load.b = load <4 x i32>* %ptr.b, align 2
2361 %cmp = icmp uge <4 x i32> %load.a, %load.b
2362 %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
2363 store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
2364 %index.next = add i64 %index, 4
2365 %loop = icmp eq i64 %index.next, 16384
2366 br i1 %loop, label %for.end, label %vector.body
2368 for.end: ; preds = %vector.body
2371 ; SSE4-LABEL: test72:
2374 ; AVX1-LABEL: test72:
2377 ; AVX2-LABEL: test72:
2380 ; AVX512VL-LABEL: test72:
2384 define void @test73(i8* nocapture %a, i8* nocapture %b) nounwind {
2386 br label %vector.body
2388 vector.body: ; preds = %vector.body, %vector.ph
2389 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2390 %gep.a = getelementptr inbounds i8* %a, i64 %index
2391 %gep.b = getelementptr inbounds i8* %b, i64 %index
2392 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2393 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2394 %load.a = load <32 x i8>* %ptr.a, align 2
2395 %load.b = load <32 x i8>* %ptr.b, align 2
2396 %cmp = icmp slt <32 x i8> %load.a, %load.b
2397 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2398 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2399 %index.next = add i64 %index, 32
2400 %loop = icmp eq i64 %index.next, 16384
2401 br i1 %loop, label %for.end, label %vector.body
2403 for.end: ; preds = %vector.body
2406 ; AVX2-LABEL: test73:
2409 ; AVX512VL-LABEL: test73:
2413 define void @test74(i8* nocapture %a, i8* nocapture %b) nounwind {
2415 br label %vector.body
2417 vector.body: ; preds = %vector.body, %vector.ph
2418 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2419 %gep.a = getelementptr inbounds i8* %a, i64 %index
2420 %gep.b = getelementptr inbounds i8* %b, i64 %index
2421 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2422 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2423 %load.a = load <32 x i8>* %ptr.a, align 2
2424 %load.b = load <32 x i8>* %ptr.b, align 2
2425 %cmp = icmp sle <32 x i8> %load.a, %load.b
2426 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2427 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2428 %index.next = add i64 %index, 32
2429 %loop = icmp eq i64 %index.next, 16384
2430 br i1 %loop, label %for.end, label %vector.body
2432 for.end: ; preds = %vector.body
2435 ; AVX2-LABEL: test74:
2438 ; AVX512VL-LABEL: test74:
2442 define void @test75(i8* nocapture %a, i8* nocapture %b) nounwind {
2444 br label %vector.body
2446 vector.body: ; preds = %vector.body, %vector.ph
2447 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2448 %gep.a = getelementptr inbounds i8* %a, i64 %index
2449 %gep.b = getelementptr inbounds i8* %b, i64 %index
2450 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2451 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2452 %load.a = load <32 x i8>* %ptr.a, align 2
2453 %load.b = load <32 x i8>* %ptr.b, align 2
2454 %cmp = icmp sgt <32 x i8> %load.a, %load.b
2455 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2456 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2457 %index.next = add i64 %index, 32
2458 %loop = icmp eq i64 %index.next, 16384
2459 br i1 %loop, label %for.end, label %vector.body
2461 for.end: ; preds = %vector.body
2464 ; AVX2-LABEL: test75:
2467 ; AVX512VL-LABEL: test75:
2471 define void @test76(i8* nocapture %a, i8* nocapture %b) nounwind {
2473 br label %vector.body
2475 vector.body: ; preds = %vector.body, %vector.ph
2476 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2477 %gep.a = getelementptr inbounds i8* %a, i64 %index
2478 %gep.b = getelementptr inbounds i8* %b, i64 %index
2479 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2480 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2481 %load.a = load <32 x i8>* %ptr.a, align 2
2482 %load.b = load <32 x i8>* %ptr.b, align 2
2483 %cmp = icmp sge <32 x i8> %load.a, %load.b
2484 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2485 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2486 %index.next = add i64 %index, 32
2487 %loop = icmp eq i64 %index.next, 16384
2488 br i1 %loop, label %for.end, label %vector.body
2490 for.end: ; preds = %vector.body
2493 ; AVX2-LABEL: test76:
2496 ; AVX512VL-LABEL: test76:
2500 define void @test77(i8* nocapture %a, i8* nocapture %b) nounwind {
2502 br label %vector.body
2504 vector.body: ; preds = %vector.body, %vector.ph
2505 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2506 %gep.a = getelementptr inbounds i8* %a, i64 %index
2507 %gep.b = getelementptr inbounds i8* %b, i64 %index
2508 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2509 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2510 %load.a = load <32 x i8>* %ptr.a, align 2
2511 %load.b = load <32 x i8>* %ptr.b, align 2
2512 %cmp = icmp ult <32 x i8> %load.a, %load.b
2513 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2514 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2515 %index.next = add i64 %index, 32
2516 %loop = icmp eq i64 %index.next, 16384
2517 br i1 %loop, label %for.end, label %vector.body
2519 for.end: ; preds = %vector.body
2522 ; AVX2-LABEL: test77:
2525 ; AVX512VL-LABEL: test77:
2529 define void @test78(i8* nocapture %a, i8* nocapture %b) nounwind {
2531 br label %vector.body
2533 vector.body: ; preds = %vector.body, %vector.ph
2534 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2535 %gep.a = getelementptr inbounds i8* %a, i64 %index
2536 %gep.b = getelementptr inbounds i8* %b, i64 %index
2537 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2538 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2539 %load.a = load <32 x i8>* %ptr.a, align 2
2540 %load.b = load <32 x i8>* %ptr.b, align 2
2541 %cmp = icmp ule <32 x i8> %load.a, %load.b
2542 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2543 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2544 %index.next = add i64 %index, 32
2545 %loop = icmp eq i64 %index.next, 16384
2546 br i1 %loop, label %for.end, label %vector.body
2548 for.end: ; preds = %vector.body
2551 ; AVX2-LABEL: test78:
2554 ; AVX512VL-LABEL: test78:
2558 define void @test79(i8* nocapture %a, i8* nocapture %b) nounwind {
2560 br label %vector.body
2562 vector.body: ; preds = %vector.body, %vector.ph
2563 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2564 %gep.a = getelementptr inbounds i8* %a, i64 %index
2565 %gep.b = getelementptr inbounds i8* %b, i64 %index
2566 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2567 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2568 %load.a = load <32 x i8>* %ptr.a, align 2
2569 %load.b = load <32 x i8>* %ptr.b, align 2
2570 %cmp = icmp ugt <32 x i8> %load.a, %load.b
2571 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2572 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2573 %index.next = add i64 %index, 32
2574 %loop = icmp eq i64 %index.next, 16384
2575 br i1 %loop, label %for.end, label %vector.body
2577 for.end: ; preds = %vector.body
2580 ; AVX2-LABEL: test79:
2583 ; AVX512VL-LABEL: test79:
2587 define void @test80(i8* nocapture %a, i8* nocapture %b) nounwind {
2589 br label %vector.body
2591 vector.body: ; preds = %vector.body, %vector.ph
2592 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2593 %gep.a = getelementptr inbounds i8* %a, i64 %index
2594 %gep.b = getelementptr inbounds i8* %b, i64 %index
2595 %ptr.a = bitcast i8* %gep.a to <32 x i8>*
2596 %ptr.b = bitcast i8* %gep.b to <32 x i8>*
2597 %load.a = load <32 x i8>* %ptr.a, align 2
2598 %load.b = load <32 x i8>* %ptr.b, align 2
2599 %cmp = icmp uge <32 x i8> %load.a, %load.b
2600 %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
2601 store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
2602 %index.next = add i64 %index, 32
2603 %loop = icmp eq i64 %index.next, 16384
2604 br i1 %loop, label %for.end, label %vector.body
2606 for.end: ; preds = %vector.body
2609 ; AVX2-LABEL: test80:
2612 ; AVX512VL-LABEL: test80:
2616 define void @test81(i16* nocapture %a, i16* nocapture %b) nounwind {
2618 br label %vector.body
2620 vector.body: ; preds = %vector.body, %vector.ph
2621 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2622 %gep.a = getelementptr inbounds i16* %a, i64 %index
2623 %gep.b = getelementptr inbounds i16* %b, i64 %index
2624 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2625 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2626 %load.a = load <16 x i16>* %ptr.a, align 2
2627 %load.b = load <16 x i16>* %ptr.b, align 2
2628 %cmp = icmp slt <16 x i16> %load.a, %load.b
2629 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2630 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2631 %index.next = add i64 %index, 16
2632 %loop = icmp eq i64 %index.next, 16384
2633 br i1 %loop, label %for.end, label %vector.body
2635 for.end: ; preds = %vector.body
2638 ; AVX2-LABEL: test81:
2641 ; AVX512VL-LABEL: test81:
2645 define void @test82(i16* nocapture %a, i16* nocapture %b) nounwind {
2647 br label %vector.body
2649 vector.body: ; preds = %vector.body, %vector.ph
2650 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2651 %gep.a = getelementptr inbounds i16* %a, i64 %index
2652 %gep.b = getelementptr inbounds i16* %b, i64 %index
2653 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2654 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2655 %load.a = load <16 x i16>* %ptr.a, align 2
2656 %load.b = load <16 x i16>* %ptr.b, align 2
2657 %cmp = icmp sle <16 x i16> %load.a, %load.b
2658 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2659 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2660 %index.next = add i64 %index, 16
2661 %loop = icmp eq i64 %index.next, 16384
2662 br i1 %loop, label %for.end, label %vector.body
2664 for.end: ; preds = %vector.body
2667 ; AVX2-LABEL: test82:
2670 ; AVX512VL-LABEL: test82:
2674 define void @test83(i16* nocapture %a, i16* nocapture %b) nounwind {
2676 br label %vector.body
2678 vector.body: ; preds = %vector.body, %vector.ph
2679 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2680 %gep.a = getelementptr inbounds i16* %a, i64 %index
2681 %gep.b = getelementptr inbounds i16* %b, i64 %index
2682 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2683 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2684 %load.a = load <16 x i16>* %ptr.a, align 2
2685 %load.b = load <16 x i16>* %ptr.b, align 2
2686 %cmp = icmp sgt <16 x i16> %load.a, %load.b
2687 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2688 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2689 %index.next = add i64 %index, 16
2690 %loop = icmp eq i64 %index.next, 16384
2691 br i1 %loop, label %for.end, label %vector.body
2693 for.end: ; preds = %vector.body
2696 ; AVX2-LABEL: test83:
2699 ; AVX512VL-LABEL: test83:
2703 define void @test84(i16* nocapture %a, i16* nocapture %b) nounwind {
2705 br label %vector.body
2707 vector.body: ; preds = %vector.body, %vector.ph
2708 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2709 %gep.a = getelementptr inbounds i16* %a, i64 %index
2710 %gep.b = getelementptr inbounds i16* %b, i64 %index
2711 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2712 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2713 %load.a = load <16 x i16>* %ptr.a, align 2
2714 %load.b = load <16 x i16>* %ptr.b, align 2
2715 %cmp = icmp sge <16 x i16> %load.a, %load.b
2716 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2717 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2718 %index.next = add i64 %index, 16
2719 %loop = icmp eq i64 %index.next, 16384
2720 br i1 %loop, label %for.end, label %vector.body
2722 for.end: ; preds = %vector.body
2725 ; AVX2-LABEL: test84:
2728 ; AVX512VL-LABEL: test84:
2732 define void @test85(i16* nocapture %a, i16* nocapture %b) nounwind {
2734 br label %vector.body
2736 vector.body: ; preds = %vector.body, %vector.ph
2737 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2738 %gep.a = getelementptr inbounds i16* %a, i64 %index
2739 %gep.b = getelementptr inbounds i16* %b, i64 %index
2740 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2741 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2742 %load.a = load <16 x i16>* %ptr.a, align 2
2743 %load.b = load <16 x i16>* %ptr.b, align 2
2744 %cmp = icmp ult <16 x i16> %load.a, %load.b
2745 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2746 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2747 %index.next = add i64 %index, 16
2748 %loop = icmp eq i64 %index.next, 16384
2749 br i1 %loop, label %for.end, label %vector.body
2751 for.end: ; preds = %vector.body
2754 ; AVX2-LABEL: test85:
2757 ; AVX512VL-LABEL: test85:
2761 define void @test86(i16* nocapture %a, i16* nocapture %b) nounwind {
2763 br label %vector.body
2765 vector.body: ; preds = %vector.body, %vector.ph
2766 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2767 %gep.a = getelementptr inbounds i16* %a, i64 %index
2768 %gep.b = getelementptr inbounds i16* %b, i64 %index
2769 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2770 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2771 %load.a = load <16 x i16>* %ptr.a, align 2
2772 %load.b = load <16 x i16>* %ptr.b, align 2
2773 %cmp = icmp ule <16 x i16> %load.a, %load.b
2774 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2775 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2776 %index.next = add i64 %index, 16
2777 %loop = icmp eq i64 %index.next, 16384
2778 br i1 %loop, label %for.end, label %vector.body
2780 for.end: ; preds = %vector.body
2783 ; AVX2-LABEL: test86:
2786 ; AVX512VL-LABEL: test86:
2790 define void @test87(i16* nocapture %a, i16* nocapture %b) nounwind {
2792 br label %vector.body
2794 vector.body: ; preds = %vector.body, %vector.ph
2795 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2796 %gep.a = getelementptr inbounds i16* %a, i64 %index
2797 %gep.b = getelementptr inbounds i16* %b, i64 %index
2798 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2799 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2800 %load.a = load <16 x i16>* %ptr.a, align 2
2801 %load.b = load <16 x i16>* %ptr.b, align 2
2802 %cmp = icmp ugt <16 x i16> %load.a, %load.b
2803 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2804 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2805 %index.next = add i64 %index, 16
2806 %loop = icmp eq i64 %index.next, 16384
2807 br i1 %loop, label %for.end, label %vector.body
2809 for.end: ; preds = %vector.body
2812 ; AVX2-LABEL: test87:
2815 ; AVX512VL-LABEL: test87:
2819 define void @test88(i16* nocapture %a, i16* nocapture %b) nounwind {
2821 br label %vector.body
2823 vector.body: ; preds = %vector.body, %vector.ph
2824 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2825 %gep.a = getelementptr inbounds i16* %a, i64 %index
2826 %gep.b = getelementptr inbounds i16* %b, i64 %index
2827 %ptr.a = bitcast i16* %gep.a to <16 x i16>*
2828 %ptr.b = bitcast i16* %gep.b to <16 x i16>*
2829 %load.a = load <16 x i16>* %ptr.a, align 2
2830 %load.b = load <16 x i16>* %ptr.b, align 2
2831 %cmp = icmp uge <16 x i16> %load.a, %load.b
2832 %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
2833 store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
2834 %index.next = add i64 %index, 16
2835 %loop = icmp eq i64 %index.next, 16384
2836 br i1 %loop, label %for.end, label %vector.body
2838 for.end: ; preds = %vector.body
2841 ; AVX2-LABEL: test88:
2844 ; AVX512VL-LABEL: test88:
2848 define void @test89(i32* nocapture %a, i32* nocapture %b) nounwind {
2850 br label %vector.body
2852 vector.body: ; preds = %vector.body, %vector.ph
2853 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2854 %gep.a = getelementptr inbounds i32* %a, i64 %index
2855 %gep.b = getelementptr inbounds i32* %b, i64 %index
2856 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
2857 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
2858 %load.a = load <8 x i32>* %ptr.a, align 2
2859 %load.b = load <8 x i32>* %ptr.b, align 2
2860 %cmp = icmp slt <8 x i32> %load.a, %load.b
2861 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
2862 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
2863 %index.next = add i64 %index, 8
2864 %loop = icmp eq i64 %index.next, 16384
2865 br i1 %loop, label %for.end, label %vector.body
2867 for.end: ; preds = %vector.body
2870 ; AVX2-LABEL: test89:
2873 ; AVX512VL-LABEL: test89:
2877 define void @test90(i32* nocapture %a, i32* nocapture %b) nounwind {
2879 br label %vector.body
2881 vector.body: ; preds = %vector.body, %vector.ph
2882 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2883 %gep.a = getelementptr inbounds i32* %a, i64 %index
2884 %gep.b = getelementptr inbounds i32* %b, i64 %index
2885 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
2886 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
2887 %load.a = load <8 x i32>* %ptr.a, align 2
2888 %load.b = load <8 x i32>* %ptr.b, align 2
2889 %cmp = icmp sle <8 x i32> %load.a, %load.b
2890 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
2891 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
2892 %index.next = add i64 %index, 8
2893 %loop = icmp eq i64 %index.next, 16384
2894 br i1 %loop, label %for.end, label %vector.body
2896 for.end: ; preds = %vector.body
2899 ; AVX2-LABEL: test90:
2902 ; AVX512VL-LABEL: test90:
2906 define void @test91(i32* nocapture %a, i32* nocapture %b) nounwind {
2908 br label %vector.body
2910 vector.body: ; preds = %vector.body, %vector.ph
2911 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2912 %gep.a = getelementptr inbounds i32* %a, i64 %index
2913 %gep.b = getelementptr inbounds i32* %b, i64 %index
2914 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
2915 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
2916 %load.a = load <8 x i32>* %ptr.a, align 2
2917 %load.b = load <8 x i32>* %ptr.b, align 2
2918 %cmp = icmp sgt <8 x i32> %load.a, %load.b
2919 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
2920 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
2921 %index.next = add i64 %index, 8
2922 %loop = icmp eq i64 %index.next, 16384
2923 br i1 %loop, label %for.end, label %vector.body
2925 for.end: ; preds = %vector.body
2928 ; AVX2-LABEL: test91:
2931 ; AVX512VL-LABEL: test91:
2935 define void @test92(i32* nocapture %a, i32* nocapture %b) nounwind {
2937 br label %vector.body
2939 vector.body: ; preds = %vector.body, %vector.ph
2940 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2941 %gep.a = getelementptr inbounds i32* %a, i64 %index
2942 %gep.b = getelementptr inbounds i32* %b, i64 %index
2943 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
2944 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
2945 %load.a = load <8 x i32>* %ptr.a, align 2
2946 %load.b = load <8 x i32>* %ptr.b, align 2
2947 %cmp = icmp sge <8 x i32> %load.a, %load.b
2948 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
2949 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
2950 %index.next = add i64 %index, 8
2951 %loop = icmp eq i64 %index.next, 16384
2952 br i1 %loop, label %for.end, label %vector.body
2954 for.end: ; preds = %vector.body
2957 ; AVX2-LABEL: test92:
2960 ; AVX512VL-LABEL: test92:
2964 define void @test93(i32* nocapture %a, i32* nocapture %b) nounwind {
2966 br label %vector.body
2968 vector.body: ; preds = %vector.body, %vector.ph
2969 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2970 %gep.a = getelementptr inbounds i32* %a, i64 %index
2971 %gep.b = getelementptr inbounds i32* %b, i64 %index
2972 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
2973 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
2974 %load.a = load <8 x i32>* %ptr.a, align 2
2975 %load.b = load <8 x i32>* %ptr.b, align 2
2976 %cmp = icmp ult <8 x i32> %load.a, %load.b
2977 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
2978 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
2979 %index.next = add i64 %index, 8
2980 %loop = icmp eq i64 %index.next, 16384
2981 br i1 %loop, label %for.end, label %vector.body
2983 for.end: ; preds = %vector.body
2986 ; AVX2-LABEL: test93:
2989 ; AVX512VL-LABEL: test93:
2993 define void @test94(i32* nocapture %a, i32* nocapture %b) nounwind {
2995 br label %vector.body
2997 vector.body: ; preds = %vector.body, %vector.ph
2998 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
2999 %gep.a = getelementptr inbounds i32* %a, i64 %index
3000 %gep.b = getelementptr inbounds i32* %b, i64 %index
3001 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
3002 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
3003 %load.a = load <8 x i32>* %ptr.a, align 2
3004 %load.b = load <8 x i32>* %ptr.b, align 2
3005 %cmp = icmp ule <8 x i32> %load.a, %load.b
3006 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
3007 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
3008 %index.next = add i64 %index, 8
3009 %loop = icmp eq i64 %index.next, 16384
3010 br i1 %loop, label %for.end, label %vector.body
3012 for.end: ; preds = %vector.body
3015 ; AVX2-LABEL: test94:
3018 ; AVX512VL-LABEL: test94:
3022 define void @test95(i32* nocapture %a, i32* nocapture %b) nounwind {
3024 br label %vector.body
3026 vector.body: ; preds = %vector.body, %vector.ph
3027 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3028 %gep.a = getelementptr inbounds i32* %a, i64 %index
3029 %gep.b = getelementptr inbounds i32* %b, i64 %index
3030 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
3031 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
3032 %load.a = load <8 x i32>* %ptr.a, align 2
3033 %load.b = load <8 x i32>* %ptr.b, align 2
3034 %cmp = icmp ugt <8 x i32> %load.a, %load.b
3035 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
3036 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
3037 %index.next = add i64 %index, 8
3038 %loop = icmp eq i64 %index.next, 16384
3039 br i1 %loop, label %for.end, label %vector.body
3041 for.end: ; preds = %vector.body
3044 ; AVX2-LABEL: test95:
3047 ; AVX512VL-LABEL: test95:
3051 define void @test96(i32* nocapture %a, i32* nocapture %b) nounwind {
3053 br label %vector.body
3055 vector.body: ; preds = %vector.body, %vector.ph
3056 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3057 %gep.a = getelementptr inbounds i32* %a, i64 %index
3058 %gep.b = getelementptr inbounds i32* %b, i64 %index
3059 %ptr.a = bitcast i32* %gep.a to <8 x i32>*
3060 %ptr.b = bitcast i32* %gep.b to <8 x i32>*
3061 %load.a = load <8 x i32>* %ptr.a, align 2
3062 %load.b = load <8 x i32>* %ptr.b, align 2
3063 %cmp = icmp uge <8 x i32> %load.a, %load.b
3064 %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
3065 store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
3066 %index.next = add i64 %index, 8
3067 %loop = icmp eq i64 %index.next, 16384
3068 br i1 %loop, label %for.end, label %vector.body
3070 for.end: ; preds = %vector.body
3073 ; AVX2-LABEL: test96:
3076 ; AVX512VL-LABEL: test96:
3080 ; ----------------------------
3082 define void @test97(i8* nocapture %a, i8* nocapture %b) nounwind {
3084 br label %vector.body
3086 vector.body: ; preds = %vector.body, %vector.ph
3087 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3088 %gep.a = getelementptr inbounds i8* %a, i64 %index
3089 %gep.b = getelementptr inbounds i8* %b, i64 %index
3090 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3091 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3092 %load.a = load <64 x i8>* %ptr.a, align 2
3093 %load.b = load <64 x i8>* %ptr.b, align 2
3094 %cmp = icmp slt <64 x i8> %load.a, %load.b
3095 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3096 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3097 %index.next = add i64 %index, 32
3098 %loop = icmp eq i64 %index.next, 16384
3099 br i1 %loop, label %for.end, label %vector.body
3101 for.end: ; preds = %vector.body
3104 ; AVX512BW-LABEL: test97:
3105 ; AVX512BW: vpminsb {{.*}}
3108 define void @test98(i8* nocapture %a, i8* nocapture %b) nounwind {
3110 br label %vector.body
3112 vector.body: ; preds = %vector.body, %vector.ph
3113 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3114 %gep.a = getelementptr inbounds i8* %a, i64 %index
3115 %gep.b = getelementptr inbounds i8* %b, i64 %index
3116 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3117 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3118 %load.a = load <64 x i8>* %ptr.a, align 2
3119 %load.b = load <64 x i8>* %ptr.b, align 2
3120 %cmp = icmp sle <64 x i8> %load.a, %load.b
3121 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3122 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3123 %index.next = add i64 %index, 32
3124 %loop = icmp eq i64 %index.next, 16384
3125 br i1 %loop, label %for.end, label %vector.body
3127 for.end: ; preds = %vector.body
3130 ; AVX512BW-LABEL: test98:
3131 ; AVX512BW: vpminsb {{.*}}
3134 define void @test99(i8* nocapture %a, i8* nocapture %b) nounwind {
3136 br label %vector.body
3138 vector.body: ; preds = %vector.body, %vector.ph
3139 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3140 %gep.a = getelementptr inbounds i8* %a, i64 %index
3141 %gep.b = getelementptr inbounds i8* %b, i64 %index
3142 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3143 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3144 %load.a = load <64 x i8>* %ptr.a, align 2
3145 %load.b = load <64 x i8>* %ptr.b, align 2
3146 %cmp = icmp sgt <64 x i8> %load.a, %load.b
3147 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3148 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3149 %index.next = add i64 %index, 32
3150 %loop = icmp eq i64 %index.next, 16384
3151 br i1 %loop, label %for.end, label %vector.body
3153 for.end: ; preds = %vector.body
3156 ; AVX512BW-LABEL: test99:
3157 ; AVX512BW: vpmaxsb {{.*}}
3160 define void @test100(i8* nocapture %a, i8* nocapture %b) nounwind {
3162 br label %vector.body
3164 vector.body: ; preds = %vector.body, %vector.ph
3165 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3166 %gep.a = getelementptr inbounds i8* %a, i64 %index
3167 %gep.b = getelementptr inbounds i8* %b, i64 %index
3168 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3169 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3170 %load.a = load <64 x i8>* %ptr.a, align 2
3171 %load.b = load <64 x i8>* %ptr.b, align 2
3172 %cmp = icmp sge <64 x i8> %load.a, %load.b
3173 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3174 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3175 %index.next = add i64 %index, 32
3176 %loop = icmp eq i64 %index.next, 16384
3177 br i1 %loop, label %for.end, label %vector.body
3179 for.end: ; preds = %vector.body
3182 ; AVX512BW-LABEL: test100:
3183 ; AVX512BW: vpmaxsb {{.*}}
3186 define void @test101(i8* nocapture %a, i8* nocapture %b) nounwind {
3188 br label %vector.body
3190 vector.body: ; preds = %vector.body, %vector.ph
3191 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3192 %gep.a = getelementptr inbounds i8* %a, i64 %index
3193 %gep.b = getelementptr inbounds i8* %b, i64 %index
3194 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3195 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3196 %load.a = load <64 x i8>* %ptr.a, align 2
3197 %load.b = load <64 x i8>* %ptr.b, align 2
3198 %cmp = icmp ult <64 x i8> %load.a, %load.b
3199 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3200 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3201 %index.next = add i64 %index, 32
3202 %loop = icmp eq i64 %index.next, 16384
3203 br i1 %loop, label %for.end, label %vector.body
3205 for.end: ; preds = %vector.body
3208 ; AVX512BW-LABEL: test101:
3209 ; AVX512BW: vpminub {{.*}}
3212 define void @test102(i8* nocapture %a, i8* nocapture %b) nounwind {
3214 br label %vector.body
3216 vector.body: ; preds = %vector.body, %vector.ph
3217 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3218 %gep.a = getelementptr inbounds i8* %a, i64 %index
3219 %gep.b = getelementptr inbounds i8* %b, i64 %index
3220 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3221 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3222 %load.a = load <64 x i8>* %ptr.a, align 2
3223 %load.b = load <64 x i8>* %ptr.b, align 2
3224 %cmp = icmp ule <64 x i8> %load.a, %load.b
3225 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3226 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3227 %index.next = add i64 %index, 32
3228 %loop = icmp eq i64 %index.next, 16384
3229 br i1 %loop, label %for.end, label %vector.body
3231 for.end: ; preds = %vector.body
3234 ; AVX512BW-LABEL: test102:
3235 ; AVX512BW: vpminub {{.*}}
3238 define void @test103(i8* nocapture %a, i8* nocapture %b) nounwind {
3240 br label %vector.body
3242 vector.body: ; preds = %vector.body, %vector.ph
3243 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3244 %gep.a = getelementptr inbounds i8* %a, i64 %index
3245 %gep.b = getelementptr inbounds i8* %b, i64 %index
3246 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3247 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3248 %load.a = load <64 x i8>* %ptr.a, align 2
3249 %load.b = load <64 x i8>* %ptr.b, align 2
3250 %cmp = icmp ugt <64 x i8> %load.a, %load.b
3251 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3252 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3253 %index.next = add i64 %index, 32
3254 %loop = icmp eq i64 %index.next, 16384
3255 br i1 %loop, label %for.end, label %vector.body
3257 for.end: ; preds = %vector.body
3260 ; AVX512BW-LABEL: test103:
3261 ; AVX512BW: vpmaxub {{.*}}
3264 define void @test104(i8* nocapture %a, i8* nocapture %b) nounwind {
3266 br label %vector.body
3268 vector.body: ; preds = %vector.body, %vector.ph
3269 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3270 %gep.a = getelementptr inbounds i8* %a, i64 %index
3271 %gep.b = getelementptr inbounds i8* %b, i64 %index
3272 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3273 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3274 %load.a = load <64 x i8>* %ptr.a, align 2
3275 %load.b = load <64 x i8>* %ptr.b, align 2
3276 %cmp = icmp uge <64 x i8> %load.a, %load.b
3277 %sel = select <64 x i1> %cmp, <64 x i8> %load.a, <64 x i8> %load.b
3278 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3279 %index.next = add i64 %index, 32
3280 %loop = icmp eq i64 %index.next, 16384
3281 br i1 %loop, label %for.end, label %vector.body
3283 for.end: ; preds = %vector.body
3286 ; AVX512BW-LABEL: test104:
3287 ; AVX512BW: vpmaxub {{.*}}
3290 define void @test105(i16* nocapture %a, i16* nocapture %b) nounwind {
3292 br label %vector.body
3294 vector.body: ; preds = %vector.body, %vector.ph
3295 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3296 %gep.a = getelementptr inbounds i16* %a, i64 %index
3297 %gep.b = getelementptr inbounds i16* %b, i64 %index
3298 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3299 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3300 %load.a = load <32 x i16>* %ptr.a, align 2
3301 %load.b = load <32 x i16>* %ptr.b, align 2
3302 %cmp = icmp slt <32 x i16> %load.a, %load.b
3303 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3304 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3305 %index.next = add i64 %index, 16
3306 %loop = icmp eq i64 %index.next, 16384
3307 br i1 %loop, label %for.end, label %vector.body
3309 for.end: ; preds = %vector.body
3312 ; AVX512BW-LABEL: test105:
3313 ; AVX512BW: vpminsw {{.*}}
3316 define void @test106(i16* nocapture %a, i16* nocapture %b) nounwind {
3318 br label %vector.body
3320 vector.body: ; preds = %vector.body, %vector.ph
3321 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3322 %gep.a = getelementptr inbounds i16* %a, i64 %index
3323 %gep.b = getelementptr inbounds i16* %b, i64 %index
3324 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3325 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3326 %load.a = load <32 x i16>* %ptr.a, align 2
3327 %load.b = load <32 x i16>* %ptr.b, align 2
3328 %cmp = icmp sle <32 x i16> %load.a, %load.b
3329 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3330 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3331 %index.next = add i64 %index, 16
3332 %loop = icmp eq i64 %index.next, 16384
3333 br i1 %loop, label %for.end, label %vector.body
3335 for.end: ; preds = %vector.body
3338 ; AVX512BW-LABEL: test106:
3339 ; AVX512BW: vpminsw {{.*}}
3342 define void @test107(i16* nocapture %a, i16* nocapture %b) nounwind {
3344 br label %vector.body
3346 vector.body: ; preds = %vector.body, %vector.ph
3347 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3348 %gep.a = getelementptr inbounds i16* %a, i64 %index
3349 %gep.b = getelementptr inbounds i16* %b, i64 %index
3350 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3351 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3352 %load.a = load <32 x i16>* %ptr.a, align 2
3353 %load.b = load <32 x i16>* %ptr.b, align 2
3354 %cmp = icmp sgt <32 x i16> %load.a, %load.b
3355 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3356 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3357 %index.next = add i64 %index, 16
3358 %loop = icmp eq i64 %index.next, 16384
3359 br i1 %loop, label %for.end, label %vector.body
3361 for.end: ; preds = %vector.body
3364 ; AVX512BW-LABEL: test107:
3365 ; AVX512BW: vpmaxsw {{.*}}
3368 define void @test108(i16* nocapture %a, i16* nocapture %b) nounwind {
3370 br label %vector.body
3372 vector.body: ; preds = %vector.body, %vector.ph
3373 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3374 %gep.a = getelementptr inbounds i16* %a, i64 %index
3375 %gep.b = getelementptr inbounds i16* %b, i64 %index
3376 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3377 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3378 %load.a = load <32 x i16>* %ptr.a, align 2
3379 %load.b = load <32 x i16>* %ptr.b, align 2
3380 %cmp = icmp sge <32 x i16> %load.a, %load.b
3381 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3382 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3383 %index.next = add i64 %index, 16
3384 %loop = icmp eq i64 %index.next, 16384
3385 br i1 %loop, label %for.end, label %vector.body
3387 for.end: ; preds = %vector.body
3390 ; AVX512BW-LABEL: test108:
3391 ; AVX512BW: vpmaxsw {{.*}}
3394 define void @test109(i16* nocapture %a, i16* nocapture %b) nounwind {
3396 br label %vector.body
3398 vector.body: ; preds = %vector.body, %vector.ph
3399 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3400 %gep.a = getelementptr inbounds i16* %a, i64 %index
3401 %gep.b = getelementptr inbounds i16* %b, i64 %index
3402 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3403 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3404 %load.a = load <32 x i16>* %ptr.a, align 2
3405 %load.b = load <32 x i16>* %ptr.b, align 2
3406 %cmp = icmp ult <32 x i16> %load.a, %load.b
3407 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3408 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3409 %index.next = add i64 %index, 16
3410 %loop = icmp eq i64 %index.next, 16384
3411 br i1 %loop, label %for.end, label %vector.body
3413 for.end: ; preds = %vector.body
3416 ; AVX512BW-LABEL: test109:
3417 ; AVX512BW: vpminuw {{.*}}
3420 define void @test110(i16* nocapture %a, i16* nocapture %b) nounwind {
3422 br label %vector.body
3424 vector.body: ; preds = %vector.body, %vector.ph
3425 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3426 %gep.a = getelementptr inbounds i16* %a, i64 %index
3427 %gep.b = getelementptr inbounds i16* %b, i64 %index
3428 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3429 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3430 %load.a = load <32 x i16>* %ptr.a, align 2
3431 %load.b = load <32 x i16>* %ptr.b, align 2
3432 %cmp = icmp ule <32 x i16> %load.a, %load.b
3433 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3434 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3435 %index.next = add i64 %index, 16
3436 %loop = icmp eq i64 %index.next, 16384
3437 br i1 %loop, label %for.end, label %vector.body
3439 for.end: ; preds = %vector.body
3442 ; AVX512BW-LABEL: test110:
3443 ; AVX512BW: vpminuw {{.*}}
3446 define void @test111(i16* nocapture %a, i16* nocapture %b) nounwind {
3448 br label %vector.body
3450 vector.body: ; preds = %vector.body, %vector.ph
3451 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3452 %gep.a = getelementptr inbounds i16* %a, i64 %index
3453 %gep.b = getelementptr inbounds i16* %b, i64 %index
3454 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3455 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3456 %load.a = load <32 x i16>* %ptr.a, align 2
3457 %load.b = load <32 x i16>* %ptr.b, align 2
3458 %cmp = icmp ugt <32 x i16> %load.a, %load.b
3459 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3460 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3461 %index.next = add i64 %index, 16
3462 %loop = icmp eq i64 %index.next, 16384
3463 br i1 %loop, label %for.end, label %vector.body
3465 for.end: ; preds = %vector.body
3468 ; AVX512BW-LABEL: test111:
3469 ; AVX512BW: vpmaxuw {{.*}}
3472 define void @test112(i16* nocapture %a, i16* nocapture %b) nounwind {
3474 br label %vector.body
3476 vector.body: ; preds = %vector.body, %vector.ph
3477 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3478 %gep.a = getelementptr inbounds i16* %a, i64 %index
3479 %gep.b = getelementptr inbounds i16* %b, i64 %index
3480 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
3481 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
3482 %load.a = load <32 x i16>* %ptr.a, align 2
3483 %load.b = load <32 x i16>* %ptr.b, align 2
3484 %cmp = icmp uge <32 x i16> %load.a, %load.b
3485 %sel = select <32 x i1> %cmp, <32 x i16> %load.a, <32 x i16> %load.b
3486 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
3487 %index.next = add i64 %index, 16
3488 %loop = icmp eq i64 %index.next, 16384
3489 br i1 %loop, label %for.end, label %vector.body
3491 for.end: ; preds = %vector.body
3494 ; AVX512BW-LABEL: test112:
3495 ; AVX512BW: vpmaxuw {{.*}}
3498 define void @test113(i32* nocapture %a, i32* nocapture %b) nounwind {
3500 br label %vector.body
3502 vector.body: ; preds = %vector.body, %vector.ph
3503 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3504 %gep.a = getelementptr inbounds i32* %a, i64 %index
3505 %gep.b = getelementptr inbounds i32* %b, i64 %index
3506 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3507 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3508 %load.a = load <16 x i32>* %ptr.a, align 2
3509 %load.b = load <16 x i32>* %ptr.b, align 2
3510 %cmp = icmp slt <16 x i32> %load.a, %load.b
3511 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3512 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3513 %index.next = add i64 %index, 8
3514 %loop = icmp eq i64 %index.next, 16384
3515 br i1 %loop, label %for.end, label %vector.body
3517 for.end: ; preds = %vector.body
3520 ; AVX512F-LABEL: test113:
3521 ; AVX512F: vpminsd {{.*}}
3524 define void @test114(i32* nocapture %a, i32* nocapture %b) nounwind {
3526 br label %vector.body
3528 vector.body: ; preds = %vector.body, %vector.ph
3529 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3530 %gep.a = getelementptr inbounds i32* %a, i64 %index
3531 %gep.b = getelementptr inbounds i32* %b, i64 %index
3532 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3533 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3534 %load.a = load <16 x i32>* %ptr.a, align 2
3535 %load.b = load <16 x i32>* %ptr.b, align 2
3536 %cmp = icmp sle <16 x i32> %load.a, %load.b
3537 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3538 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3539 %index.next = add i64 %index, 8
3540 %loop = icmp eq i64 %index.next, 16384
3541 br i1 %loop, label %for.end, label %vector.body
3543 for.end: ; preds = %vector.body
3546 ; AVX512F-LABEL: test114:
3547 ; AVX512F: vpminsd {{.*}}
3550 define void @test115(i32* nocapture %a, i32* nocapture %b) nounwind {
3552 br label %vector.body
3554 vector.body: ; preds = %vector.body, %vector.ph
3555 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3556 %gep.a = getelementptr inbounds i32* %a, i64 %index
3557 %gep.b = getelementptr inbounds i32* %b, i64 %index
3558 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3559 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3560 %load.a = load <16 x i32>* %ptr.a, align 2
3561 %load.b = load <16 x i32>* %ptr.b, align 2
3562 %cmp = icmp sgt <16 x i32> %load.a, %load.b
3563 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3564 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3565 %index.next = add i64 %index, 8
3566 %loop = icmp eq i64 %index.next, 16384
3567 br i1 %loop, label %for.end, label %vector.body
3569 for.end: ; preds = %vector.body
3572 ; AVX512F-LABEL: test115:
3573 ; AVX512F: vpmaxsd {{.*}}
3576 define void @test116(i32* nocapture %a, i32* nocapture %b) nounwind {
3578 br label %vector.body
3580 vector.body: ; preds = %vector.body, %vector.ph
3581 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3582 %gep.a = getelementptr inbounds i32* %a, i64 %index
3583 %gep.b = getelementptr inbounds i32* %b, i64 %index
3584 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3585 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3586 %load.a = load <16 x i32>* %ptr.a, align 2
3587 %load.b = load <16 x i32>* %ptr.b, align 2
3588 %cmp = icmp sge <16 x i32> %load.a, %load.b
3589 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3590 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3591 %index.next = add i64 %index, 8
3592 %loop = icmp eq i64 %index.next, 16384
3593 br i1 %loop, label %for.end, label %vector.body
3595 for.end: ; preds = %vector.body
3598 ; AVX512F-LABEL: test116:
3599 ; AVX512F: vpmaxsd {{.*}}
3602 define void @test117(i32* nocapture %a, i32* nocapture %b) nounwind {
3604 br label %vector.body
3606 vector.body: ; preds = %vector.body, %vector.ph
3607 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3608 %gep.a = getelementptr inbounds i32* %a, i64 %index
3609 %gep.b = getelementptr inbounds i32* %b, i64 %index
3610 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3611 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3612 %load.a = load <16 x i32>* %ptr.a, align 2
3613 %load.b = load <16 x i32>* %ptr.b, align 2
3614 %cmp = icmp ult <16 x i32> %load.a, %load.b
3615 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3616 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3617 %index.next = add i64 %index, 8
3618 %loop = icmp eq i64 %index.next, 16384
3619 br i1 %loop, label %for.end, label %vector.body
3621 for.end: ; preds = %vector.body
3624 ; AVX512F-LABEL: test117:
3625 ; AVX512F: vpminud {{.*}}
3628 define void @test118(i32* nocapture %a, i32* nocapture %b) nounwind {
3630 br label %vector.body
3632 vector.body: ; preds = %vector.body, %vector.ph
3633 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3634 %gep.a = getelementptr inbounds i32* %a, i64 %index
3635 %gep.b = getelementptr inbounds i32* %b, i64 %index
3636 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3637 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3638 %load.a = load <16 x i32>* %ptr.a, align 2
3639 %load.b = load <16 x i32>* %ptr.b, align 2
3640 %cmp = icmp ule <16 x i32> %load.a, %load.b
3641 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3642 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3643 %index.next = add i64 %index, 8
3644 %loop = icmp eq i64 %index.next, 16384
3645 br i1 %loop, label %for.end, label %vector.body
3647 for.end: ; preds = %vector.body
3650 ; AVX512F-LABEL: test118:
3651 ; AVX512F: vpminud {{.*}}
3654 define void @test119(i32* nocapture %a, i32* nocapture %b) nounwind {
3656 br label %vector.body
3658 vector.body: ; preds = %vector.body, %vector.ph
3659 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3660 %gep.a = getelementptr inbounds i32* %a, i64 %index
3661 %gep.b = getelementptr inbounds i32* %b, i64 %index
3662 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3663 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3664 %load.a = load <16 x i32>* %ptr.a, align 2
3665 %load.b = load <16 x i32>* %ptr.b, align 2
3666 %cmp = icmp ugt <16 x i32> %load.a, %load.b
3667 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3668 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3669 %index.next = add i64 %index, 8
3670 %loop = icmp eq i64 %index.next, 16384
3671 br i1 %loop, label %for.end, label %vector.body
3673 for.end: ; preds = %vector.body
3676 ; AVX512F-LABEL: test119:
3677 ; AVX512F: vpmaxud {{.*}}
3680 define void @test120(i32* nocapture %a, i32* nocapture %b) nounwind {
3682 br label %vector.body
3684 vector.body: ; preds = %vector.body, %vector.ph
3685 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3686 %gep.a = getelementptr inbounds i32* %a, i64 %index
3687 %gep.b = getelementptr inbounds i32* %b, i64 %index
3688 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
3689 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
3690 %load.a = load <16 x i32>* %ptr.a, align 2
3691 %load.b = load <16 x i32>* %ptr.b, align 2
3692 %cmp = icmp uge <16 x i32> %load.a, %load.b
3693 %sel = select <16 x i1> %cmp, <16 x i32> %load.a, <16 x i32> %load.b
3694 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
3695 %index.next = add i64 %index, 8
3696 %loop = icmp eq i64 %index.next, 16384
3697 br i1 %loop, label %for.end, label %vector.body
3699 for.end: ; preds = %vector.body
3702 ; AVX512F-LABEL: test120:
3703 ; AVX512F: vpmaxud {{.*}}
3706 define void @test121(i32* nocapture %a, i32* nocapture %b) nounwind {
3708 br label %vector.body
3710 vector.body: ; preds = %vector.body, %vector.ph
3711 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3712 %gep.a = getelementptr inbounds i32* %a, i64 %index
3713 %gep.b = getelementptr inbounds i32* %b, i64 %index
3714 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3715 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3716 %load.a = load <8 x i64>* %ptr.a, align 2
3717 %load.b = load <8 x i64>* %ptr.b, align 2
3718 %cmp = icmp slt <8 x i64> %load.a, %load.b
3719 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3720 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3721 %index.next = add i64 %index, 8
3722 %loop = icmp eq i64 %index.next, 16384
3723 br i1 %loop, label %for.end, label %vector.body
3725 for.end: ; preds = %vector.body
3728 ; AVX512F-LABEL: test121:
3729 ; AVX512F: vpminsq {{.*}}
3732 define void @test122(i32* nocapture %a, i32* nocapture %b) nounwind {
3734 br label %vector.body
3736 vector.body: ; preds = %vector.body, %vector.ph
3737 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3738 %gep.a = getelementptr inbounds i32* %a, i64 %index
3739 %gep.b = getelementptr inbounds i32* %b, i64 %index
3740 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3741 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3742 %load.a = load <8 x i64>* %ptr.a, align 2
3743 %load.b = load <8 x i64>* %ptr.b, align 2
3744 %cmp = icmp sle <8 x i64> %load.a, %load.b
3745 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3746 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3747 %index.next = add i64 %index, 8
3748 %loop = icmp eq i64 %index.next, 16384
3749 br i1 %loop, label %for.end, label %vector.body
3751 for.end: ; preds = %vector.body
3754 ; AVX512F-LABEL: test122:
3755 ; AVX512F: vpminsq {{.*}}
3758 define void @test123(i32* nocapture %a, i32* nocapture %b) nounwind {
3760 br label %vector.body
3762 vector.body: ; preds = %vector.body, %vector.ph
3763 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3764 %gep.a = getelementptr inbounds i32* %a, i64 %index
3765 %gep.b = getelementptr inbounds i32* %b, i64 %index
3766 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3767 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3768 %load.a = load <8 x i64>* %ptr.a, align 2
3769 %load.b = load <8 x i64>* %ptr.b, align 2
3770 %cmp = icmp sgt <8 x i64> %load.a, %load.b
3771 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3772 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3773 %index.next = add i64 %index, 8
3774 %loop = icmp eq i64 %index.next, 16384
3775 br i1 %loop, label %for.end, label %vector.body
3777 for.end: ; preds = %vector.body
3780 ; AVX512F-LABEL: test123:
3781 ; AVX512F: vpmaxsq {{.*}}
3784 define void @test124(i32* nocapture %a, i32* nocapture %b) nounwind {
3786 br label %vector.body
3788 vector.body: ; preds = %vector.body, %vector.ph
3789 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3790 %gep.a = getelementptr inbounds i32* %a, i64 %index
3791 %gep.b = getelementptr inbounds i32* %b, i64 %index
3792 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3793 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3794 %load.a = load <8 x i64>* %ptr.a, align 2
3795 %load.b = load <8 x i64>* %ptr.b, align 2
3796 %cmp = icmp sge <8 x i64> %load.a, %load.b
3797 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3798 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3799 %index.next = add i64 %index, 8
3800 %loop = icmp eq i64 %index.next, 16384
3801 br i1 %loop, label %for.end, label %vector.body
3803 for.end: ; preds = %vector.body
3806 ; AVX512F-LABEL: test124:
3807 ; AVX512F: vpmaxsq {{.*}}
3810 define void @test125(i32* nocapture %a, i32* nocapture %b) nounwind {
3812 br label %vector.body
3814 vector.body: ; preds = %vector.body, %vector.ph
3815 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3816 %gep.a = getelementptr inbounds i32* %a, i64 %index
3817 %gep.b = getelementptr inbounds i32* %b, i64 %index
3818 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3819 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3820 %load.a = load <8 x i64>* %ptr.a, align 2
3821 %load.b = load <8 x i64>* %ptr.b, align 2
3822 %cmp = icmp ult <8 x i64> %load.a, %load.b
3823 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3824 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3825 %index.next = add i64 %index, 8
3826 %loop = icmp eq i64 %index.next, 16384
3827 br i1 %loop, label %for.end, label %vector.body
3829 for.end: ; preds = %vector.body
3832 ; AVX512F-LABEL: test125:
3833 ; AVX512F: vpminuq {{.*}}
3836 define void @test126(i32* nocapture %a, i32* nocapture %b) nounwind {
3838 br label %vector.body
3840 vector.body: ; preds = %vector.body, %vector.ph
3841 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3842 %gep.a = getelementptr inbounds i32* %a, i64 %index
3843 %gep.b = getelementptr inbounds i32* %b, i64 %index
3844 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3845 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3846 %load.a = load <8 x i64>* %ptr.a, align 2
3847 %load.b = load <8 x i64>* %ptr.b, align 2
3848 %cmp = icmp ule <8 x i64> %load.a, %load.b
3849 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3850 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3851 %index.next = add i64 %index, 8
3852 %loop = icmp eq i64 %index.next, 16384
3853 br i1 %loop, label %for.end, label %vector.body
3855 for.end: ; preds = %vector.body
3858 ; AVX512F-LABEL: test126:
3859 ; AVX512F: vpminuq {{.*}}
3862 define void @test127(i32* nocapture %a, i32* nocapture %b) nounwind {
3864 br label %vector.body
3866 vector.body: ; preds = %vector.body, %vector.ph
3867 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3868 %gep.a = getelementptr inbounds i32* %a, i64 %index
3869 %gep.b = getelementptr inbounds i32* %b, i64 %index
3870 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3871 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3872 %load.a = load <8 x i64>* %ptr.a, align 2
3873 %load.b = load <8 x i64>* %ptr.b, align 2
3874 %cmp = icmp ugt <8 x i64> %load.a, %load.b
3875 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3876 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3877 %index.next = add i64 %index, 8
3878 %loop = icmp eq i64 %index.next, 16384
3879 br i1 %loop, label %for.end, label %vector.body
3881 for.end: ; preds = %vector.body
3884 ; AVX512F-LABEL: test127:
3885 ; AVX512F: vpmaxuq {{.*}}
3888 define void @test128(i32* nocapture %a, i32* nocapture %b) nounwind {
3890 br label %vector.body
3892 vector.body: ; preds = %vector.body, %vector.ph
3893 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3894 %gep.a = getelementptr inbounds i32* %a, i64 %index
3895 %gep.b = getelementptr inbounds i32* %b, i64 %index
3896 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
3897 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
3898 %load.a = load <8 x i64>* %ptr.a, align 2
3899 %load.b = load <8 x i64>* %ptr.b, align 2
3900 %cmp = icmp uge <8 x i64> %load.a, %load.b
3901 %sel = select <8 x i1> %cmp, <8 x i64> %load.a, <8 x i64> %load.b
3902 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
3903 %index.next = add i64 %index, 8
3904 %loop = icmp eq i64 %index.next, 16384
3905 br i1 %loop, label %for.end, label %vector.body
3907 for.end: ; preds = %vector.body
3910 ; AVX512F-LABEL: test128:
3911 ; AVX512F: vpmaxuq {{.*}}
3914 define void @test129(i8* nocapture %a, i8* nocapture %b) nounwind {
3916 br label %vector.body
3918 vector.body: ; preds = %vector.body, %vector.ph
3919 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3920 %gep.a = getelementptr inbounds i8* %a, i64 %index
3921 %gep.b = getelementptr inbounds i8* %b, i64 %index
3922 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3923 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3924 %load.a = load <64 x i8>* %ptr.a, align 2
3925 %load.b = load <64 x i8>* %ptr.b, align 2
3926 %cmp = icmp slt <64 x i8> %load.a, %load.b
3927 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
3928 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3929 %index.next = add i64 %index, 32
3930 %loop = icmp eq i64 %index.next, 16384
3931 br i1 %loop, label %for.end, label %vector.body
3933 for.end: ; preds = %vector.body
3936 ; AVX512BW-LABEL: test129:
3940 define void @test130(i8* nocapture %a, i8* nocapture %b) nounwind {
3942 br label %vector.body
3944 vector.body: ; preds = %vector.body, %vector.ph
3945 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3946 %gep.a = getelementptr inbounds i8* %a, i64 %index
3947 %gep.b = getelementptr inbounds i8* %b, i64 %index
3948 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3949 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3950 %load.a = load <64 x i8>* %ptr.a, align 2
3951 %load.b = load <64 x i8>* %ptr.b, align 2
3952 %cmp = icmp sle <64 x i8> %load.a, %load.b
3953 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
3954 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3955 %index.next = add i64 %index, 32
3956 %loop = icmp eq i64 %index.next, 16384
3957 br i1 %loop, label %for.end, label %vector.body
3959 for.end: ; preds = %vector.body
3962 ; AVX512BW-LABEL: test130:
3966 define void @test131(i8* nocapture %a, i8* nocapture %b) nounwind {
3968 br label %vector.body
3970 vector.body: ; preds = %vector.body, %vector.ph
3971 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3972 %gep.a = getelementptr inbounds i8* %a, i64 %index
3973 %gep.b = getelementptr inbounds i8* %b, i64 %index
3974 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
3975 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
3976 %load.a = load <64 x i8>* %ptr.a, align 2
3977 %load.b = load <64 x i8>* %ptr.b, align 2
3978 %cmp = icmp sgt <64 x i8> %load.a, %load.b
3979 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
3980 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
3981 %index.next = add i64 %index, 32
3982 %loop = icmp eq i64 %index.next, 16384
3983 br i1 %loop, label %for.end, label %vector.body
3985 for.end: ; preds = %vector.body
3988 ; AVX512BW-LABEL: test131:
3992 define void @test132(i8* nocapture %a, i8* nocapture %b) nounwind {
3994 br label %vector.body
3996 vector.body: ; preds = %vector.body, %vector.ph
3997 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
3998 %gep.a = getelementptr inbounds i8* %a, i64 %index
3999 %gep.b = getelementptr inbounds i8* %b, i64 %index
4000 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
4001 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
4002 %load.a = load <64 x i8>* %ptr.a, align 2
4003 %load.b = load <64 x i8>* %ptr.b, align 2
4004 %cmp = icmp sge <64 x i8> %load.a, %load.b
4005 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
4006 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
4007 %index.next = add i64 %index, 32
4008 %loop = icmp eq i64 %index.next, 16384
4009 br i1 %loop, label %for.end, label %vector.body
4011 for.end: ; preds = %vector.body
4014 ; AVX512BW-LABEL: test132:
4018 define void @test133(i8* nocapture %a, i8* nocapture %b) nounwind {
4020 br label %vector.body
4022 vector.body: ; preds = %vector.body, %vector.ph
4023 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4024 %gep.a = getelementptr inbounds i8* %a, i64 %index
4025 %gep.b = getelementptr inbounds i8* %b, i64 %index
4026 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
4027 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
4028 %load.a = load <64 x i8>* %ptr.a, align 2
4029 %load.b = load <64 x i8>* %ptr.b, align 2
4030 %cmp = icmp ult <64 x i8> %load.a, %load.b
4031 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
4032 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
4033 %index.next = add i64 %index, 32
4034 %loop = icmp eq i64 %index.next, 16384
4035 br i1 %loop, label %for.end, label %vector.body
4037 for.end: ; preds = %vector.body
4040 ; AVX512BW-LABEL: test133:
4044 define void @test134(i8* nocapture %a, i8* nocapture %b) nounwind {
4046 br label %vector.body
4048 vector.body: ; preds = %vector.body, %vector.ph
4049 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4050 %gep.a = getelementptr inbounds i8* %a, i64 %index
4051 %gep.b = getelementptr inbounds i8* %b, i64 %index
4052 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
4053 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
4054 %load.a = load <64 x i8>* %ptr.a, align 2
4055 %load.b = load <64 x i8>* %ptr.b, align 2
4056 %cmp = icmp ule <64 x i8> %load.a, %load.b
4057 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
4058 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
4059 %index.next = add i64 %index, 32
4060 %loop = icmp eq i64 %index.next, 16384
4061 br i1 %loop, label %for.end, label %vector.body
4063 for.end: ; preds = %vector.body
4066 ; AVX512BW-LABEL: test134:
4070 define void @test135(i8* nocapture %a, i8* nocapture %b) nounwind {
4072 br label %vector.body
4074 vector.body: ; preds = %vector.body, %vector.ph
4075 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4076 %gep.a = getelementptr inbounds i8* %a, i64 %index
4077 %gep.b = getelementptr inbounds i8* %b, i64 %index
4078 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
4079 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
4080 %load.a = load <64 x i8>* %ptr.a, align 2
4081 %load.b = load <64 x i8>* %ptr.b, align 2
4082 %cmp = icmp ugt <64 x i8> %load.a, %load.b
4083 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
4084 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
4085 %index.next = add i64 %index, 32
4086 %loop = icmp eq i64 %index.next, 16384
4087 br i1 %loop, label %for.end, label %vector.body
4089 for.end: ; preds = %vector.body
4092 ; AVX512BW-LABEL: test135:
4096 define void @test136(i8* nocapture %a, i8* nocapture %b) nounwind {
4098 br label %vector.body
4100 vector.body: ; preds = %vector.body, %vector.ph
4101 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4102 %gep.a = getelementptr inbounds i8* %a, i64 %index
4103 %gep.b = getelementptr inbounds i8* %b, i64 %index
4104 %ptr.a = bitcast i8* %gep.a to <64 x i8>*
4105 %ptr.b = bitcast i8* %gep.b to <64 x i8>*
4106 %load.a = load <64 x i8>* %ptr.a, align 2
4107 %load.b = load <64 x i8>* %ptr.b, align 2
4108 %cmp = icmp uge <64 x i8> %load.a, %load.b
4109 %sel = select <64 x i1> %cmp, <64 x i8> %load.b, <64 x i8> %load.a
4110 store <64 x i8> %sel, <64 x i8>* %ptr.a, align 2
4111 %index.next = add i64 %index, 32
4112 %loop = icmp eq i64 %index.next, 16384
4113 br i1 %loop, label %for.end, label %vector.body
4115 for.end: ; preds = %vector.body
4118 ; AVX512BW-LABEL: test136:
4122 define void @test137(i16* nocapture %a, i16* nocapture %b) nounwind {
4124 br label %vector.body
4126 vector.body: ; preds = %vector.body, %vector.ph
4127 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4128 %gep.a = getelementptr inbounds i16* %a, i64 %index
4129 %gep.b = getelementptr inbounds i16* %b, i64 %index
4130 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4131 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4132 %load.a = load <32 x i16>* %ptr.a, align 2
4133 %load.b = load <32 x i16>* %ptr.b, align 2
4134 %cmp = icmp slt <32 x i16> %load.a, %load.b
4135 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4136 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4137 %index.next = add i64 %index, 16
4138 %loop = icmp eq i64 %index.next, 16384
4139 br i1 %loop, label %for.end, label %vector.body
4141 for.end: ; preds = %vector.body
4144 ; AVX512BW-LABEL: test137:
4148 define void @test138(i16* nocapture %a, i16* nocapture %b) nounwind {
4150 br label %vector.body
4152 vector.body: ; preds = %vector.body, %vector.ph
4153 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4154 %gep.a = getelementptr inbounds i16* %a, i64 %index
4155 %gep.b = getelementptr inbounds i16* %b, i64 %index
4156 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4157 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4158 %load.a = load <32 x i16>* %ptr.a, align 2
4159 %load.b = load <32 x i16>* %ptr.b, align 2
4160 %cmp = icmp sle <32 x i16> %load.a, %load.b
4161 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4162 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4163 %index.next = add i64 %index, 16
4164 %loop = icmp eq i64 %index.next, 16384
4165 br i1 %loop, label %for.end, label %vector.body
4167 for.end: ; preds = %vector.body
4170 ; AVX512BW-LABEL: test138:
4174 define void @test139(i16* nocapture %a, i16* nocapture %b) nounwind {
4176 br label %vector.body
4178 vector.body: ; preds = %vector.body, %vector.ph
4179 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4180 %gep.a = getelementptr inbounds i16* %a, i64 %index
4181 %gep.b = getelementptr inbounds i16* %b, i64 %index
4182 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4183 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4184 %load.a = load <32 x i16>* %ptr.a, align 2
4185 %load.b = load <32 x i16>* %ptr.b, align 2
4186 %cmp = icmp sgt <32 x i16> %load.a, %load.b
4187 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4188 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4189 %index.next = add i64 %index, 16
4190 %loop = icmp eq i64 %index.next, 16384
4191 br i1 %loop, label %for.end, label %vector.body
4193 for.end: ; preds = %vector.body
4196 ; AVX512BW-LABEL: test139:
4200 define void @test140(i16* nocapture %a, i16* nocapture %b) nounwind {
4202 br label %vector.body
4204 vector.body: ; preds = %vector.body, %vector.ph
4205 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4206 %gep.a = getelementptr inbounds i16* %a, i64 %index
4207 %gep.b = getelementptr inbounds i16* %b, i64 %index
4208 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4209 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4210 %load.a = load <32 x i16>* %ptr.a, align 2
4211 %load.b = load <32 x i16>* %ptr.b, align 2
4212 %cmp = icmp sge <32 x i16> %load.a, %load.b
4213 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4214 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4215 %index.next = add i64 %index, 16
4216 %loop = icmp eq i64 %index.next, 16384
4217 br i1 %loop, label %for.end, label %vector.body
4219 for.end: ; preds = %vector.body
4222 ; AVX512BW-LABEL: test140:
4226 define void @test141(i16* nocapture %a, i16* nocapture %b) nounwind {
4228 br label %vector.body
4230 vector.body: ; preds = %vector.body, %vector.ph
4231 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4232 %gep.a = getelementptr inbounds i16* %a, i64 %index
4233 %gep.b = getelementptr inbounds i16* %b, i64 %index
4234 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4235 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4236 %load.a = load <32 x i16>* %ptr.a, align 2
4237 %load.b = load <32 x i16>* %ptr.b, align 2
4238 %cmp = icmp ult <32 x i16> %load.a, %load.b
4239 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4240 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4241 %index.next = add i64 %index, 16
4242 %loop = icmp eq i64 %index.next, 16384
4243 br i1 %loop, label %for.end, label %vector.body
4245 for.end: ; preds = %vector.body
4248 ; AVX512BW-LABEL: test141:
4252 define void @test142(i16* nocapture %a, i16* nocapture %b) nounwind {
4254 br label %vector.body
4256 vector.body: ; preds = %vector.body, %vector.ph
4257 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4258 %gep.a = getelementptr inbounds i16* %a, i64 %index
4259 %gep.b = getelementptr inbounds i16* %b, i64 %index
4260 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4261 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4262 %load.a = load <32 x i16>* %ptr.a, align 2
4263 %load.b = load <32 x i16>* %ptr.b, align 2
4264 %cmp = icmp ule <32 x i16> %load.a, %load.b
4265 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4266 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4267 %index.next = add i64 %index, 16
4268 %loop = icmp eq i64 %index.next, 16384
4269 br i1 %loop, label %for.end, label %vector.body
4271 for.end: ; preds = %vector.body
4274 ; AVX512BW-LABEL: test142:
4278 define void @test143(i16* nocapture %a, i16* nocapture %b) nounwind {
4280 br label %vector.body
4282 vector.body: ; preds = %vector.body, %vector.ph
4283 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4284 %gep.a = getelementptr inbounds i16* %a, i64 %index
4285 %gep.b = getelementptr inbounds i16* %b, i64 %index
4286 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4287 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4288 %load.a = load <32 x i16>* %ptr.a, align 2
4289 %load.b = load <32 x i16>* %ptr.b, align 2
4290 %cmp = icmp ugt <32 x i16> %load.a, %load.b
4291 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4292 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4293 %index.next = add i64 %index, 16
4294 %loop = icmp eq i64 %index.next, 16384
4295 br i1 %loop, label %for.end, label %vector.body
4297 for.end: ; preds = %vector.body
4300 ; AVX512BW-LABEL: test143:
4304 define void @test144(i16* nocapture %a, i16* nocapture %b) nounwind {
4306 br label %vector.body
4308 vector.body: ; preds = %vector.body, %vector.ph
4309 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4310 %gep.a = getelementptr inbounds i16* %a, i64 %index
4311 %gep.b = getelementptr inbounds i16* %b, i64 %index
4312 %ptr.a = bitcast i16* %gep.a to <32 x i16>*
4313 %ptr.b = bitcast i16* %gep.b to <32 x i16>*
4314 %load.a = load <32 x i16>* %ptr.a, align 2
4315 %load.b = load <32 x i16>* %ptr.b, align 2
4316 %cmp = icmp uge <32 x i16> %load.a, %load.b
4317 %sel = select <32 x i1> %cmp, <32 x i16> %load.b, <32 x i16> %load.a
4318 store <32 x i16> %sel, <32 x i16>* %ptr.a, align 2
4319 %index.next = add i64 %index, 16
4320 %loop = icmp eq i64 %index.next, 16384
4321 br i1 %loop, label %for.end, label %vector.body
4323 for.end: ; preds = %vector.body
4326 ; AVX512BW-LABEL: test144:
4330 define void @test145(i32* nocapture %a, i32* nocapture %b) nounwind {
4332 br label %vector.body
4334 vector.body: ; preds = %vector.body, %vector.ph
4335 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4336 %gep.a = getelementptr inbounds i32* %a, i64 %index
4337 %gep.b = getelementptr inbounds i32* %b, i64 %index
4338 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4339 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4340 %load.a = load <16 x i32>* %ptr.a, align 2
4341 %load.b = load <16 x i32>* %ptr.b, align 2
4342 %cmp = icmp slt <16 x i32> %load.a, %load.b
4343 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4344 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4345 %index.next = add i64 %index, 8
4346 %loop = icmp eq i64 %index.next, 16384
4347 br i1 %loop, label %for.end, label %vector.body
4349 for.end: ; preds = %vector.body
4352 ; AVX512F-LABEL: test145:
4356 define void @test146(i32* nocapture %a, i32* nocapture %b) nounwind {
4358 br label %vector.body
4360 vector.body: ; preds = %vector.body, %vector.ph
4361 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4362 %gep.a = getelementptr inbounds i32* %a, i64 %index
4363 %gep.b = getelementptr inbounds i32* %b, i64 %index
4364 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4365 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4366 %load.a = load <16 x i32>* %ptr.a, align 2
4367 %load.b = load <16 x i32>* %ptr.b, align 2
4368 %cmp = icmp sle <16 x i32> %load.a, %load.b
4369 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4370 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4371 %index.next = add i64 %index, 8
4372 %loop = icmp eq i64 %index.next, 16384
4373 br i1 %loop, label %for.end, label %vector.body
4375 for.end: ; preds = %vector.body
4378 ; AVX512F-LABEL: test146:
4382 define void @test147(i32* nocapture %a, i32* nocapture %b) nounwind {
4384 br label %vector.body
4386 vector.body: ; preds = %vector.body, %vector.ph
4387 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4388 %gep.a = getelementptr inbounds i32* %a, i64 %index
4389 %gep.b = getelementptr inbounds i32* %b, i64 %index
4390 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4391 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4392 %load.a = load <16 x i32>* %ptr.a, align 2
4393 %load.b = load <16 x i32>* %ptr.b, align 2
4394 %cmp = icmp sgt <16 x i32> %load.a, %load.b
4395 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4396 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4397 %index.next = add i64 %index, 8
4398 %loop = icmp eq i64 %index.next, 16384
4399 br i1 %loop, label %for.end, label %vector.body
4401 for.end: ; preds = %vector.body
4404 ; AVX512F-LABEL: test147:
4408 define void @test148(i32* nocapture %a, i32* nocapture %b) nounwind {
4410 br label %vector.body
4412 vector.body: ; preds = %vector.body, %vector.ph
4413 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4414 %gep.a = getelementptr inbounds i32* %a, i64 %index
4415 %gep.b = getelementptr inbounds i32* %b, i64 %index
4416 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4417 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4418 %load.a = load <16 x i32>* %ptr.a, align 2
4419 %load.b = load <16 x i32>* %ptr.b, align 2
4420 %cmp = icmp sge <16 x i32> %load.a, %load.b
4421 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4422 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4423 %index.next = add i64 %index, 8
4424 %loop = icmp eq i64 %index.next, 16384
4425 br i1 %loop, label %for.end, label %vector.body
4427 for.end: ; preds = %vector.body
4430 ; AVX512F-LABEL: test148:
4434 define void @test149(i32* nocapture %a, i32* nocapture %b) nounwind {
4436 br label %vector.body
4438 vector.body: ; preds = %vector.body, %vector.ph
4439 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4440 %gep.a = getelementptr inbounds i32* %a, i64 %index
4441 %gep.b = getelementptr inbounds i32* %b, i64 %index
4442 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4443 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4444 %load.a = load <16 x i32>* %ptr.a, align 2
4445 %load.b = load <16 x i32>* %ptr.b, align 2
4446 %cmp = icmp ult <16 x i32> %load.a, %load.b
4447 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4448 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4449 %index.next = add i64 %index, 8
4450 %loop = icmp eq i64 %index.next, 16384
4451 br i1 %loop, label %for.end, label %vector.body
4453 for.end: ; preds = %vector.body
4456 ; AVX512F-LABEL: test149:
4460 define void @test150(i32* nocapture %a, i32* nocapture %b) nounwind {
4462 br label %vector.body
4464 vector.body: ; preds = %vector.body, %vector.ph
4465 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4466 %gep.a = getelementptr inbounds i32* %a, i64 %index
4467 %gep.b = getelementptr inbounds i32* %b, i64 %index
4468 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4469 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4470 %load.a = load <16 x i32>* %ptr.a, align 2
4471 %load.b = load <16 x i32>* %ptr.b, align 2
4472 %cmp = icmp ule <16 x i32> %load.a, %load.b
4473 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4474 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4475 %index.next = add i64 %index, 8
4476 %loop = icmp eq i64 %index.next, 16384
4477 br i1 %loop, label %for.end, label %vector.body
4479 for.end: ; preds = %vector.body
4482 ; AVX512F-LABEL: test150:
4486 define void @test151(i32* nocapture %a, i32* nocapture %b) nounwind {
4488 br label %vector.body
4490 vector.body: ; preds = %vector.body, %vector.ph
4491 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4492 %gep.a = getelementptr inbounds i32* %a, i64 %index
4493 %gep.b = getelementptr inbounds i32* %b, i64 %index
4494 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4495 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4496 %load.a = load <16 x i32>* %ptr.a, align 2
4497 %load.b = load <16 x i32>* %ptr.b, align 2
4498 %cmp = icmp ugt <16 x i32> %load.a, %load.b
4499 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4500 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4501 %index.next = add i64 %index, 8
4502 %loop = icmp eq i64 %index.next, 16384
4503 br i1 %loop, label %for.end, label %vector.body
4505 for.end: ; preds = %vector.body
4508 ; AVX512F-LABEL: test151:
4512 define void @test152(i32* nocapture %a, i32* nocapture %b) nounwind {
4514 br label %vector.body
4516 vector.body: ; preds = %vector.body, %vector.ph
4517 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4518 %gep.a = getelementptr inbounds i32* %a, i64 %index
4519 %gep.b = getelementptr inbounds i32* %b, i64 %index
4520 %ptr.a = bitcast i32* %gep.a to <16 x i32>*
4521 %ptr.b = bitcast i32* %gep.b to <16 x i32>*
4522 %load.a = load <16 x i32>* %ptr.a, align 2
4523 %load.b = load <16 x i32>* %ptr.b, align 2
4524 %cmp = icmp uge <16 x i32> %load.a, %load.b
4525 %sel = select <16 x i1> %cmp, <16 x i32> %load.b, <16 x i32> %load.a
4526 store <16 x i32> %sel, <16 x i32>* %ptr.a, align 2
4527 %index.next = add i64 %index, 8
4528 %loop = icmp eq i64 %index.next, 16384
4529 br i1 %loop, label %for.end, label %vector.body
4531 for.end: ; preds = %vector.body
4534 ; AVX512F-LABEL: test152:
4538 ; -----------------------
4540 define void @test153(i32* nocapture %a, i32* nocapture %b) nounwind {
4542 br label %vector.body
4544 vector.body: ; preds = %vector.body, %vector.ph
4545 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4546 %gep.a = getelementptr inbounds i32* %a, i64 %index
4547 %gep.b = getelementptr inbounds i32* %b, i64 %index
4548 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4549 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4550 %load.a = load <8 x i64>* %ptr.a, align 2
4551 %load.b = load <8 x i64>* %ptr.b, align 2
4552 %cmp = icmp slt <8 x i64> %load.a, %load.b
4553 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4554 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4555 %index.next = add i64 %index, 8
4556 %loop = icmp eq i64 %index.next, 16384
4557 br i1 %loop, label %for.end, label %vector.body
4559 for.end: ; preds = %vector.body
4562 ; AVX512F-LABEL: test153:
4566 define void @test154(i32* nocapture %a, i32* nocapture %b) nounwind {
4568 br label %vector.body
4570 vector.body: ; preds = %vector.body, %vector.ph
4571 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4572 %gep.a = getelementptr inbounds i32* %a, i64 %index
4573 %gep.b = getelementptr inbounds i32* %b, i64 %index
4574 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4575 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4576 %load.a = load <8 x i64>* %ptr.a, align 2
4577 %load.b = load <8 x i64>* %ptr.b, align 2
4578 %cmp = icmp sle <8 x i64> %load.a, %load.b
4579 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4580 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4581 %index.next = add i64 %index, 8
4582 %loop = icmp eq i64 %index.next, 16384
4583 br i1 %loop, label %for.end, label %vector.body
4585 for.end: ; preds = %vector.body
4588 ; AVX512F-LABEL: test154:
4592 define void @test155(i32* nocapture %a, i32* nocapture %b) nounwind {
4594 br label %vector.body
4596 vector.body: ; preds = %vector.body, %vector.ph
4597 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4598 %gep.a = getelementptr inbounds i32* %a, i64 %index
4599 %gep.b = getelementptr inbounds i32* %b, i64 %index
4600 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4601 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4602 %load.a = load <8 x i64>* %ptr.a, align 2
4603 %load.b = load <8 x i64>* %ptr.b, align 2
4604 %cmp = icmp sgt <8 x i64> %load.a, %load.b
4605 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4606 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4607 %index.next = add i64 %index, 8
4608 %loop = icmp eq i64 %index.next, 16384
4609 br i1 %loop, label %for.end, label %vector.body
4611 for.end: ; preds = %vector.body
4614 ; AVX512F-LABEL: test155:
4618 define void @test156(i32* nocapture %a, i32* nocapture %b) nounwind {
4620 br label %vector.body
4622 vector.body: ; preds = %vector.body, %vector.ph
4623 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4624 %gep.a = getelementptr inbounds i32* %a, i64 %index
4625 %gep.b = getelementptr inbounds i32* %b, i64 %index
4626 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4627 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4628 %load.a = load <8 x i64>* %ptr.a, align 2
4629 %load.b = load <8 x i64>* %ptr.b, align 2
4630 %cmp = icmp sge <8 x i64> %load.a, %load.b
4631 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4632 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4633 %index.next = add i64 %index, 8
4634 %loop = icmp eq i64 %index.next, 16384
4635 br i1 %loop, label %for.end, label %vector.body
4637 for.end: ; preds = %vector.body
4640 ; AVX512F-LABEL: test156:
4644 define void @test157(i32* nocapture %a, i32* nocapture %b) nounwind {
4646 br label %vector.body
4648 vector.body: ; preds = %vector.body, %vector.ph
4649 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4650 %gep.a = getelementptr inbounds i32* %a, i64 %index
4651 %gep.b = getelementptr inbounds i32* %b, i64 %index
4652 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4653 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4654 %load.a = load <8 x i64>* %ptr.a, align 2
4655 %load.b = load <8 x i64>* %ptr.b, align 2
4656 %cmp = icmp ult <8 x i64> %load.a, %load.b
4657 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4658 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4659 %index.next = add i64 %index, 8
4660 %loop = icmp eq i64 %index.next, 16384
4661 br i1 %loop, label %for.end, label %vector.body
4663 for.end: ; preds = %vector.body
4666 ; AVX512F-LABEL: test157:
4670 define void @test158(i32* nocapture %a, i32* nocapture %b) nounwind {
4672 br label %vector.body
4674 vector.body: ; preds = %vector.body, %vector.ph
4675 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4676 %gep.a = getelementptr inbounds i32* %a, i64 %index
4677 %gep.b = getelementptr inbounds i32* %b, i64 %index
4678 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4679 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4680 %load.a = load <8 x i64>* %ptr.a, align 2
4681 %load.b = load <8 x i64>* %ptr.b, align 2
4682 %cmp = icmp ule <8 x i64> %load.a, %load.b
4683 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4684 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4685 %index.next = add i64 %index, 8
4686 %loop = icmp eq i64 %index.next, 16384
4687 br i1 %loop, label %for.end, label %vector.body
4689 for.end: ; preds = %vector.body
4692 ; AVX512F-LABEL: test158:
4696 define void @test159(i32* nocapture %a, i32* nocapture %b) nounwind {
4698 br label %vector.body
4700 vector.body: ; preds = %vector.body, %vector.ph
4701 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4702 %gep.a = getelementptr inbounds i32* %a, i64 %index
4703 %gep.b = getelementptr inbounds i32* %b, i64 %index
4704 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4705 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4706 %load.a = load <8 x i64>* %ptr.a, align 2
4707 %load.b = load <8 x i64>* %ptr.b, align 2
4708 %cmp = icmp ugt <8 x i64> %load.a, %load.b
4709 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4710 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4711 %index.next = add i64 %index, 8
4712 %loop = icmp eq i64 %index.next, 16384
4713 br i1 %loop, label %for.end, label %vector.body
4715 for.end: ; preds = %vector.body
4718 ; AVX512F-LABEL: test159:
4722 define void @test160(i32* nocapture %a, i32* nocapture %b) nounwind {
4724 br label %vector.body
4726 vector.body: ; preds = %vector.body, %vector.ph
4727 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4728 %gep.a = getelementptr inbounds i32* %a, i64 %index
4729 %gep.b = getelementptr inbounds i32* %b, i64 %index
4730 %ptr.a = bitcast i32* %gep.a to <8 x i64>*
4731 %ptr.b = bitcast i32* %gep.b to <8 x i64>*
4732 %load.a = load <8 x i64>* %ptr.a, align 2
4733 %load.b = load <8 x i64>* %ptr.b, align 2
4734 %cmp = icmp uge <8 x i64> %load.a, %load.b
4735 %sel = select <8 x i1> %cmp, <8 x i64> %load.b, <8 x i64> %load.a
4736 store <8 x i64> %sel, <8 x i64>* %ptr.a, align 2
4737 %index.next = add i64 %index, 8
4738 %loop = icmp eq i64 %index.next, 16384
4739 br i1 %loop, label %for.end, label %vector.body
4741 for.end: ; preds = %vector.body
4744 ; AVX512F-LABEL: test160:
4748 define void @test161(i32* nocapture %a, i32* nocapture %b) nounwind {
4750 br label %vector.body
4752 vector.body: ; preds = %vector.body, %vector.ph
4753 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4754 %gep.a = getelementptr inbounds i32* %a, i64 %index
4755 %gep.b = getelementptr inbounds i32* %b, i64 %index
4756 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4757 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4758 %load.a = load <4 x i64>* %ptr.a, align 2
4759 %load.b = load <4 x i64>* %ptr.b, align 2
4760 %cmp = icmp slt <4 x i64> %load.a, %load.b
4761 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4762 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4763 %index.next = add i64 %index, 8
4764 %loop = icmp eq i64 %index.next, 16384
4765 br i1 %loop, label %for.end, label %vector.body
4767 for.end: ; preds = %vector.body
4770 ; AVX512VL-LABEL: test161:
4774 define void @test162(i32* nocapture %a, i32* nocapture %b) nounwind {
4776 br label %vector.body
4778 vector.body: ; preds = %vector.body, %vector.ph
4779 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4780 %gep.a = getelementptr inbounds i32* %a, i64 %index
4781 %gep.b = getelementptr inbounds i32* %b, i64 %index
4782 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4783 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4784 %load.a = load <4 x i64>* %ptr.a, align 2
4785 %load.b = load <4 x i64>* %ptr.b, align 2
4786 %cmp = icmp sle <4 x i64> %load.a, %load.b
4787 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4788 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4789 %index.next = add i64 %index, 8
4790 %loop = icmp eq i64 %index.next, 16384
4791 br i1 %loop, label %for.end, label %vector.body
4793 for.end: ; preds = %vector.body
4796 ; AVX512VL-LABEL: test162:
4800 define void @test163(i32* nocapture %a, i32* nocapture %b) nounwind {
4802 br label %vector.body
4804 vector.body: ; preds = %vector.body, %vector.ph
4805 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4806 %gep.a = getelementptr inbounds i32* %a, i64 %index
4807 %gep.b = getelementptr inbounds i32* %b, i64 %index
4808 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4809 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4810 %load.a = load <4 x i64>* %ptr.a, align 2
4811 %load.b = load <4 x i64>* %ptr.b, align 2
4812 %cmp = icmp sgt <4 x i64> %load.a, %load.b
4813 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4814 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4815 %index.next = add i64 %index, 8
4816 %loop = icmp eq i64 %index.next, 16384
4817 br i1 %loop, label %for.end, label %vector.body
4819 for.end: ; preds = %vector.body
4822 ; AVX512VL-LABEL: test163:
4826 define void @test164(i32* nocapture %a, i32* nocapture %b) nounwind {
4828 br label %vector.body
4830 vector.body: ; preds = %vector.body, %vector.ph
4831 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4832 %gep.a = getelementptr inbounds i32* %a, i64 %index
4833 %gep.b = getelementptr inbounds i32* %b, i64 %index
4834 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4835 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4836 %load.a = load <4 x i64>* %ptr.a, align 2
4837 %load.b = load <4 x i64>* %ptr.b, align 2
4838 %cmp = icmp sge <4 x i64> %load.a, %load.b
4839 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4840 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4841 %index.next = add i64 %index, 8
4842 %loop = icmp eq i64 %index.next, 16384
4843 br i1 %loop, label %for.end, label %vector.body
4845 for.end: ; preds = %vector.body
4848 ; AVX512VL-LABEL: test164:
4852 define void @test165(i32* nocapture %a, i32* nocapture %b) nounwind {
4854 br label %vector.body
4856 vector.body: ; preds = %vector.body, %vector.ph
4857 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4858 %gep.a = getelementptr inbounds i32* %a, i64 %index
4859 %gep.b = getelementptr inbounds i32* %b, i64 %index
4860 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4861 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4862 %load.a = load <4 x i64>* %ptr.a, align 2
4863 %load.b = load <4 x i64>* %ptr.b, align 2
4864 %cmp = icmp ult <4 x i64> %load.a, %load.b
4865 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4866 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4867 %index.next = add i64 %index, 8
4868 %loop = icmp eq i64 %index.next, 16384
4869 br i1 %loop, label %for.end, label %vector.body
4871 for.end: ; preds = %vector.body
4874 ; AVX512VL-LABEL: test165:
4878 define void @test166(i32* nocapture %a, i32* nocapture %b) nounwind {
4880 br label %vector.body
4882 vector.body: ; preds = %vector.body, %vector.ph
4883 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4884 %gep.a = getelementptr inbounds i32* %a, i64 %index
4885 %gep.b = getelementptr inbounds i32* %b, i64 %index
4886 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4887 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4888 %load.a = load <4 x i64>* %ptr.a, align 2
4889 %load.b = load <4 x i64>* %ptr.b, align 2
4890 %cmp = icmp ule <4 x i64> %load.a, %load.b
4891 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4892 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4893 %index.next = add i64 %index, 8
4894 %loop = icmp eq i64 %index.next, 16384
4895 br i1 %loop, label %for.end, label %vector.body
4897 for.end: ; preds = %vector.body
4900 ; AVX512VL-LABEL: test166:
4904 define void @test167(i32* nocapture %a, i32* nocapture %b) nounwind {
4906 br label %vector.body
4908 vector.body: ; preds = %vector.body, %vector.ph
4909 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4910 %gep.a = getelementptr inbounds i32* %a, i64 %index
4911 %gep.b = getelementptr inbounds i32* %b, i64 %index
4912 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4913 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4914 %load.a = load <4 x i64>* %ptr.a, align 2
4915 %load.b = load <4 x i64>* %ptr.b, align 2
4916 %cmp = icmp ugt <4 x i64> %load.a, %load.b
4917 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4918 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4919 %index.next = add i64 %index, 8
4920 %loop = icmp eq i64 %index.next, 16384
4921 br i1 %loop, label %for.end, label %vector.body
4923 for.end: ; preds = %vector.body
4926 ; AVX512VL-LABEL: test167:
4930 define void @test168(i32* nocapture %a, i32* nocapture %b) nounwind {
4932 br label %vector.body
4934 vector.body: ; preds = %vector.body, %vector.ph
4935 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4936 %gep.a = getelementptr inbounds i32* %a, i64 %index
4937 %gep.b = getelementptr inbounds i32* %b, i64 %index
4938 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4939 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4940 %load.a = load <4 x i64>* %ptr.a, align 2
4941 %load.b = load <4 x i64>* %ptr.b, align 2
4942 %cmp = icmp uge <4 x i64> %load.a, %load.b
4943 %sel = select <4 x i1> %cmp, <4 x i64> %load.a, <4 x i64> %load.b
4944 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4945 %index.next = add i64 %index, 8
4946 %loop = icmp eq i64 %index.next, 16384
4947 br i1 %loop, label %for.end, label %vector.body
4949 for.end: ; preds = %vector.body
4952 ; AVX512VL-LABEL: test168:
4956 define void @test169(i32* nocapture %a, i32* nocapture %b) nounwind {
4958 br label %vector.body
4960 vector.body: ; preds = %vector.body, %vector.ph
4961 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4962 %gep.a = getelementptr inbounds i32* %a, i64 %index
4963 %gep.b = getelementptr inbounds i32* %b, i64 %index
4964 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4965 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4966 %load.a = load <4 x i64>* %ptr.a, align 2
4967 %load.b = load <4 x i64>* %ptr.b, align 2
4968 %cmp = icmp slt <4 x i64> %load.a, %load.b
4969 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
4970 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4971 %index.next = add i64 %index, 8
4972 %loop = icmp eq i64 %index.next, 16384
4973 br i1 %loop, label %for.end, label %vector.body
4975 for.end: ; preds = %vector.body
4978 ; AVX512VL-LABEL: test169:
4982 define void @test170(i32* nocapture %a, i32* nocapture %b) nounwind {
4984 br label %vector.body
4986 vector.body: ; preds = %vector.body, %vector.ph
4987 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
4988 %gep.a = getelementptr inbounds i32* %a, i64 %index
4989 %gep.b = getelementptr inbounds i32* %b, i64 %index
4990 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
4991 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
4992 %load.a = load <4 x i64>* %ptr.a, align 2
4993 %load.b = load <4 x i64>* %ptr.b, align 2
4994 %cmp = icmp sle <4 x i64> %load.a, %load.b
4995 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
4996 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
4997 %index.next = add i64 %index, 8
4998 %loop = icmp eq i64 %index.next, 16384
4999 br i1 %loop, label %for.end, label %vector.body
5001 for.end: ; preds = %vector.body
5004 ; AVX512VL-LABEL: test170:
5008 define void @test171(i32* nocapture %a, i32* nocapture %b) nounwind {
5010 br label %vector.body
5012 vector.body: ; preds = %vector.body, %vector.ph
5013 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5014 %gep.a = getelementptr inbounds i32* %a, i64 %index
5015 %gep.b = getelementptr inbounds i32* %b, i64 %index
5016 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
5017 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
5018 %load.a = load <4 x i64>* %ptr.a, align 2
5019 %load.b = load <4 x i64>* %ptr.b, align 2
5020 %cmp = icmp sgt <4 x i64> %load.a, %load.b
5021 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
5022 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
5023 %index.next = add i64 %index, 8
5024 %loop = icmp eq i64 %index.next, 16384
5025 br i1 %loop, label %for.end, label %vector.body
5027 for.end: ; preds = %vector.body
5030 ; AVX512VL-LABEL: test171:
5034 define void @test172(i32* nocapture %a, i32* nocapture %b) nounwind {
5036 br label %vector.body
5038 vector.body: ; preds = %vector.body, %vector.ph
5039 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5040 %gep.a = getelementptr inbounds i32* %a, i64 %index
5041 %gep.b = getelementptr inbounds i32* %b, i64 %index
5042 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
5043 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
5044 %load.a = load <4 x i64>* %ptr.a, align 2
5045 %load.b = load <4 x i64>* %ptr.b, align 2
5046 %cmp = icmp sge <4 x i64> %load.a, %load.b
5047 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
5048 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
5049 %index.next = add i64 %index, 8
5050 %loop = icmp eq i64 %index.next, 16384
5051 br i1 %loop, label %for.end, label %vector.body
5053 for.end: ; preds = %vector.body
5056 ; AVX512VL-LABEL: test172:
5060 define void @test173(i32* nocapture %a, i32* nocapture %b) nounwind {
5062 br label %vector.body
5064 vector.body: ; preds = %vector.body, %vector.ph
5065 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5066 %gep.a = getelementptr inbounds i32* %a, i64 %index
5067 %gep.b = getelementptr inbounds i32* %b, i64 %index
5068 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
5069 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
5070 %load.a = load <4 x i64>* %ptr.a, align 2
5071 %load.b = load <4 x i64>* %ptr.b, align 2
5072 %cmp = icmp ult <4 x i64> %load.a, %load.b
5073 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
5074 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
5075 %index.next = add i64 %index, 8
5076 %loop = icmp eq i64 %index.next, 16384
5077 br i1 %loop, label %for.end, label %vector.body
5079 for.end: ; preds = %vector.body
5082 ; AVX512VL-LABEL: test173:
5086 define void @test174(i32* nocapture %a, i32* nocapture %b) nounwind {
5088 br label %vector.body
5090 vector.body: ; preds = %vector.body, %vector.ph
5091 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5092 %gep.a = getelementptr inbounds i32* %a, i64 %index
5093 %gep.b = getelementptr inbounds i32* %b, i64 %index
5094 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
5095 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
5096 %load.a = load <4 x i64>* %ptr.a, align 2
5097 %load.b = load <4 x i64>* %ptr.b, align 2
5098 %cmp = icmp ule <4 x i64> %load.a, %load.b
5099 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
5100 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
5101 %index.next = add i64 %index, 8
5102 %loop = icmp eq i64 %index.next, 16384
5103 br i1 %loop, label %for.end, label %vector.body
5105 for.end: ; preds = %vector.body
5108 ; AVX512VL-LABEL: test174:
5112 define void @test175(i32* nocapture %a, i32* nocapture %b) nounwind {
5114 br label %vector.body
5116 vector.body: ; preds = %vector.body, %vector.ph
5117 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5118 %gep.a = getelementptr inbounds i32* %a, i64 %index
5119 %gep.b = getelementptr inbounds i32* %b, i64 %index
5120 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
5121 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
5122 %load.a = load <4 x i64>* %ptr.a, align 2
5123 %load.b = load <4 x i64>* %ptr.b, align 2
5124 %cmp = icmp ugt <4 x i64> %load.a, %load.b
5125 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
5126 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
5127 %index.next = add i64 %index, 8
5128 %loop = icmp eq i64 %index.next, 16384
5129 br i1 %loop, label %for.end, label %vector.body
5131 for.end: ; preds = %vector.body
5134 ; AVX512VL-LABEL: test175:
5138 define void @test176(i32* nocapture %a, i32* nocapture %b) nounwind {
5140 br label %vector.body
5142 vector.body: ; preds = %vector.body, %vector.ph
5143 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5144 %gep.a = getelementptr inbounds i32* %a, i64 %index
5145 %gep.b = getelementptr inbounds i32* %b, i64 %index
5146 %ptr.a = bitcast i32* %gep.a to <4 x i64>*
5147 %ptr.b = bitcast i32* %gep.b to <4 x i64>*
5148 %load.a = load <4 x i64>* %ptr.a, align 2
5149 %load.b = load <4 x i64>* %ptr.b, align 2
5150 %cmp = icmp uge <4 x i64> %load.a, %load.b
5151 %sel = select <4 x i1> %cmp, <4 x i64> %load.b, <4 x i64> %load.a
5152 store <4 x i64> %sel, <4 x i64>* %ptr.a, align 2
5153 %index.next = add i64 %index, 8
5154 %loop = icmp eq i64 %index.next, 16384
5155 br i1 %loop, label %for.end, label %vector.body
5157 for.end: ; preds = %vector.body
5160 ; AVX512VL-LABEL: test176:
5164 define void @test177(i32* nocapture %a, i32* nocapture %b) nounwind {
5166 br label %vector.body
5168 vector.body: ; preds = %vector.body, %vector.ph
5169 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5170 %gep.a = getelementptr inbounds i32* %a, i64 %index
5171 %gep.b = getelementptr inbounds i32* %b, i64 %index
5172 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5173 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5174 %load.a = load <2 x i64>* %ptr.a, align 2
5175 %load.b = load <2 x i64>* %ptr.b, align 2
5176 %cmp = icmp slt <2 x i64> %load.a, %load.b
5177 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5178 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5179 %index.next = add i64 %index, 8
5180 %loop = icmp eq i64 %index.next, 16384
5181 br i1 %loop, label %for.end, label %vector.body
5183 for.end: ; preds = %vector.body
5186 ; AVX512VL-LABEL: test177:
5190 define void @test178(i32* nocapture %a, i32* nocapture %b) nounwind {
5192 br label %vector.body
5194 vector.body: ; preds = %vector.body, %vector.ph
5195 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5196 %gep.a = getelementptr inbounds i32* %a, i64 %index
5197 %gep.b = getelementptr inbounds i32* %b, i64 %index
5198 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5199 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5200 %load.a = load <2 x i64>* %ptr.a, align 2
5201 %load.b = load <2 x i64>* %ptr.b, align 2
5202 %cmp = icmp sle <2 x i64> %load.a, %load.b
5203 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5204 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5205 %index.next = add i64 %index, 8
5206 %loop = icmp eq i64 %index.next, 16384
5207 br i1 %loop, label %for.end, label %vector.body
5209 for.end: ; preds = %vector.body
5212 ; AVX512VL-LABEL: test178:
5216 define void @test179(i32* nocapture %a, i32* nocapture %b) nounwind {
5218 br label %vector.body
5220 vector.body: ; preds = %vector.body, %vector.ph
5221 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5222 %gep.a = getelementptr inbounds i32* %a, i64 %index
5223 %gep.b = getelementptr inbounds i32* %b, i64 %index
5224 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5225 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5226 %load.a = load <2 x i64>* %ptr.a, align 2
5227 %load.b = load <2 x i64>* %ptr.b, align 2
5228 %cmp = icmp sgt <2 x i64> %load.a, %load.b
5229 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5230 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5231 %index.next = add i64 %index, 8
5232 %loop = icmp eq i64 %index.next, 16384
5233 br i1 %loop, label %for.end, label %vector.body
5235 for.end: ; preds = %vector.body
5238 ; AVX512VL-LABEL: test179:
5242 define void @test180(i32* nocapture %a, i32* nocapture %b) nounwind {
5244 br label %vector.body
5246 vector.body: ; preds = %vector.body, %vector.ph
5247 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5248 %gep.a = getelementptr inbounds i32* %a, i64 %index
5249 %gep.b = getelementptr inbounds i32* %b, i64 %index
5250 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5251 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5252 %load.a = load <2 x i64>* %ptr.a, align 2
5253 %load.b = load <2 x i64>* %ptr.b, align 2
5254 %cmp = icmp sge <2 x i64> %load.a, %load.b
5255 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5256 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5257 %index.next = add i64 %index, 8
5258 %loop = icmp eq i64 %index.next, 16384
5259 br i1 %loop, label %for.end, label %vector.body
5261 for.end: ; preds = %vector.body
5264 ; AVX512VL-LABEL: test180:
5268 define void @test181(i32* nocapture %a, i32* nocapture %b) nounwind {
5270 br label %vector.body
5272 vector.body: ; preds = %vector.body, %vector.ph
5273 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5274 %gep.a = getelementptr inbounds i32* %a, i64 %index
5275 %gep.b = getelementptr inbounds i32* %b, i64 %index
5276 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5277 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5278 %load.a = load <2 x i64>* %ptr.a, align 2
5279 %load.b = load <2 x i64>* %ptr.b, align 2
5280 %cmp = icmp ult <2 x i64> %load.a, %load.b
5281 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5282 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5283 %index.next = add i64 %index, 8
5284 %loop = icmp eq i64 %index.next, 16384
5285 br i1 %loop, label %for.end, label %vector.body
5287 for.end: ; preds = %vector.body
5290 ; AVX512VL-LABEL: test181:
5294 define void @test182(i32* nocapture %a, i32* nocapture %b) nounwind {
5296 br label %vector.body
5298 vector.body: ; preds = %vector.body, %vector.ph
5299 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5300 %gep.a = getelementptr inbounds i32* %a, i64 %index
5301 %gep.b = getelementptr inbounds i32* %b, i64 %index
5302 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5303 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5304 %load.a = load <2 x i64>* %ptr.a, align 2
5305 %load.b = load <2 x i64>* %ptr.b, align 2
5306 %cmp = icmp ule <2 x i64> %load.a, %load.b
5307 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5308 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5309 %index.next = add i64 %index, 8
5310 %loop = icmp eq i64 %index.next, 16384
5311 br i1 %loop, label %for.end, label %vector.body
5313 for.end: ; preds = %vector.body
5316 ; AVX512VL-LABEL: test182:
5320 define void @test183(i32* nocapture %a, i32* nocapture %b) nounwind {
5322 br label %vector.body
5324 vector.body: ; preds = %vector.body, %vector.ph
5325 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5326 %gep.a = getelementptr inbounds i32* %a, i64 %index
5327 %gep.b = getelementptr inbounds i32* %b, i64 %index
5328 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5329 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5330 %load.a = load <2 x i64>* %ptr.a, align 2
5331 %load.b = load <2 x i64>* %ptr.b, align 2
5332 %cmp = icmp ugt <2 x i64> %load.a, %load.b
5333 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5334 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5335 %index.next = add i64 %index, 8
5336 %loop = icmp eq i64 %index.next, 16384
5337 br i1 %loop, label %for.end, label %vector.body
5339 for.end: ; preds = %vector.body
5342 ; AVX512VL-LABEL: test183:
5346 define void @test184(i32* nocapture %a, i32* nocapture %b) nounwind {
5348 br label %vector.body
5350 vector.body: ; preds = %vector.body, %vector.ph
5351 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5352 %gep.a = getelementptr inbounds i32* %a, i64 %index
5353 %gep.b = getelementptr inbounds i32* %b, i64 %index
5354 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5355 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5356 %load.a = load <2 x i64>* %ptr.a, align 2
5357 %load.b = load <2 x i64>* %ptr.b, align 2
5358 %cmp = icmp uge <2 x i64> %load.a, %load.b
5359 %sel = select <2 x i1> %cmp, <2 x i64> %load.a, <2 x i64> %load.b
5360 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5361 %index.next = add i64 %index, 8
5362 %loop = icmp eq i64 %index.next, 16384
5363 br i1 %loop, label %for.end, label %vector.body
5365 for.end: ; preds = %vector.body
5368 ; AVX512VL-LABEL: test184:
5372 define void @test185(i32* nocapture %a, i32* nocapture %b) nounwind {
5374 br label %vector.body
5376 vector.body: ; preds = %vector.body, %vector.ph
5377 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5378 %gep.a = getelementptr inbounds i32* %a, i64 %index
5379 %gep.b = getelementptr inbounds i32* %b, i64 %index
5380 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5381 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5382 %load.a = load <2 x i64>* %ptr.a, align 2
5383 %load.b = load <2 x i64>* %ptr.b, align 2
5384 %cmp = icmp slt <2 x i64> %load.a, %load.b
5385 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5386 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5387 %index.next = add i64 %index, 8
5388 %loop = icmp eq i64 %index.next, 16384
5389 br i1 %loop, label %for.end, label %vector.body
5391 for.end: ; preds = %vector.body
5394 ; AVX512VL-LABEL: test185:
5398 define void @test186(i32* nocapture %a, i32* nocapture %b) nounwind {
5400 br label %vector.body
5402 vector.body: ; preds = %vector.body, %vector.ph
5403 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5404 %gep.a = getelementptr inbounds i32* %a, i64 %index
5405 %gep.b = getelementptr inbounds i32* %b, i64 %index
5406 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5407 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5408 %load.a = load <2 x i64>* %ptr.a, align 2
5409 %load.b = load <2 x i64>* %ptr.b, align 2
5410 %cmp = icmp sle <2 x i64> %load.a, %load.b
5411 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5412 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5413 %index.next = add i64 %index, 8
5414 %loop = icmp eq i64 %index.next, 16384
5415 br i1 %loop, label %for.end, label %vector.body
5417 for.end: ; preds = %vector.body
5420 ; AVX512VL-LABEL: test186:
5424 define void @test187(i32* nocapture %a, i32* nocapture %b) nounwind {
5426 br label %vector.body
5428 vector.body: ; preds = %vector.body, %vector.ph
5429 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5430 %gep.a = getelementptr inbounds i32* %a, i64 %index
5431 %gep.b = getelementptr inbounds i32* %b, i64 %index
5432 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5433 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5434 %load.a = load <2 x i64>* %ptr.a, align 2
5435 %load.b = load <2 x i64>* %ptr.b, align 2
5436 %cmp = icmp sgt <2 x i64> %load.a, %load.b
5437 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5438 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5439 %index.next = add i64 %index, 8
5440 %loop = icmp eq i64 %index.next, 16384
5441 br i1 %loop, label %for.end, label %vector.body
5443 for.end: ; preds = %vector.body
5446 ; AVX512VL-LABEL: test187:
5450 define void @test188(i32* nocapture %a, i32* nocapture %b) nounwind {
5452 br label %vector.body
5454 vector.body: ; preds = %vector.body, %vector.ph
5455 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5456 %gep.a = getelementptr inbounds i32* %a, i64 %index
5457 %gep.b = getelementptr inbounds i32* %b, i64 %index
5458 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5459 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5460 %load.a = load <2 x i64>* %ptr.a, align 2
5461 %load.b = load <2 x i64>* %ptr.b, align 2
5462 %cmp = icmp sge <2 x i64> %load.a, %load.b
5463 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5464 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5465 %index.next = add i64 %index, 8
5466 %loop = icmp eq i64 %index.next, 16384
5467 br i1 %loop, label %for.end, label %vector.body
5469 for.end: ; preds = %vector.body
5472 ; AVX512VL-LABEL: test188:
5476 define void @test189(i32* nocapture %a, i32* nocapture %b) nounwind {
5478 br label %vector.body
5480 vector.body: ; preds = %vector.body, %vector.ph
5481 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5482 %gep.a = getelementptr inbounds i32* %a, i64 %index
5483 %gep.b = getelementptr inbounds i32* %b, i64 %index
5484 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5485 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5486 %load.a = load <2 x i64>* %ptr.a, align 2
5487 %load.b = load <2 x i64>* %ptr.b, align 2
5488 %cmp = icmp ult <2 x i64> %load.a, %load.b
5489 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5490 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5491 %index.next = add i64 %index, 8
5492 %loop = icmp eq i64 %index.next, 16384
5493 br i1 %loop, label %for.end, label %vector.body
5495 for.end: ; preds = %vector.body
5498 ; AVX512VL-LABEL: test189:
5502 define void @test190(i32* nocapture %a, i32* nocapture %b) nounwind {
5504 br label %vector.body
5506 vector.body: ; preds = %vector.body, %vector.ph
5507 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5508 %gep.a = getelementptr inbounds i32* %a, i64 %index
5509 %gep.b = getelementptr inbounds i32* %b, i64 %index
5510 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5511 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5512 %load.a = load <2 x i64>* %ptr.a, align 2
5513 %load.b = load <2 x i64>* %ptr.b, align 2
5514 %cmp = icmp ule <2 x i64> %load.a, %load.b
5515 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5516 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5517 %index.next = add i64 %index, 8
5518 %loop = icmp eq i64 %index.next, 16384
5519 br i1 %loop, label %for.end, label %vector.body
5521 for.end: ; preds = %vector.body
5524 ; AVX512VL-LABEL: test190:
5528 define void @test191(i32* nocapture %a, i32* nocapture %b) nounwind {
5530 br label %vector.body
5532 vector.body: ; preds = %vector.body, %vector.ph
5533 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5534 %gep.a = getelementptr inbounds i32* %a, i64 %index
5535 %gep.b = getelementptr inbounds i32* %b, i64 %index
5536 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5537 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5538 %load.a = load <2 x i64>* %ptr.a, align 2
5539 %load.b = load <2 x i64>* %ptr.b, align 2
5540 %cmp = icmp ugt <2 x i64> %load.a, %load.b
5541 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5542 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5543 %index.next = add i64 %index, 8
5544 %loop = icmp eq i64 %index.next, 16384
5545 br i1 %loop, label %for.end, label %vector.body
5547 for.end: ; preds = %vector.body
5550 ; AVX512VL-LABEL: test191:
5554 define void @test192(i32* nocapture %a, i32* nocapture %b) nounwind {
5556 br label %vector.body
5558 vector.body: ; preds = %vector.body, %vector.ph
5559 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
5560 %gep.a = getelementptr inbounds i32* %a, i64 %index
5561 %gep.b = getelementptr inbounds i32* %b, i64 %index
5562 %ptr.a = bitcast i32* %gep.a to <2 x i64>*
5563 %ptr.b = bitcast i32* %gep.b to <2 x i64>*
5564 %load.a = load <2 x i64>* %ptr.a, align 2
5565 %load.b = load <2 x i64>* %ptr.b, align 2
5566 %cmp = icmp uge <2 x i64> %load.a, %load.b
5567 %sel = select <2 x i1> %cmp, <2 x i64> %load.b, <2 x i64> %load.a
5568 store <2 x i64> %sel, <2 x i64>* %ptr.a, align 2
5569 %index.next = add i64 %index, 8
5570 %loop = icmp eq i64 %index.next, 16384
5571 br i1 %loop, label %for.end, label %vector.body
5573 for.end: ; preds = %vector.body
5576 ; AVX512VL-LABEL: test192: