mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	This was done with the following sed invocation to catch label lines demarking function boundaries:
    sed -i '' "s/^;\( *\)\([A-Z0-9_]*\):\( *\)test\([A-Za-z0-9_-]*\):\( *\)$/;\1\2-LABEL:\3test\4:\5/g" test/CodeGen/*/*.ll
which was written conservatively to avoid false positives rather than false negatives. I scanned through all the changes and everything looks correct.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186258 91177308-0d34-0410-b5e6-96231b3b80d8
		
	
		
			
				
	
	
		
			2789 lines
		
	
	
		
			94 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			2789 lines
		
	
	
		
			94 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc -march=x86-64 -mcpu=core2 < %s | FileCheck %s -check-prefix=SSE2
 | |
| ; RUN: llc -march=x86-64 -mcpu=corei7 < %s | FileCheck %s -check-prefix=SSE4
 | |
| ; RUN: llc -march=x86-64 -mcpu=corei7-avx < %s | FileCheck %s -check-prefix=AVX1
 | |
| ; RUN: llc -march=x86-64 -mcpu=core-avx2 -mattr=+avx2 < %s | FileCheck %s -check-prefix=AVX2
 | |
| 
 | |
| define void @test1(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test1:
 | |
| ; SSE4: pminsb
 | |
| 
 | |
| ; AVX1-LABEL: test1:
 | |
| ; AVX1: vpminsb
 | |
| 
 | |
| ; AVX2-LABEL: test1:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test2(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test2:
 | |
| ; SSE4: pminsb
 | |
| 
 | |
| ; AVX1-LABEL: test2:
 | |
| ; AVX1: vpminsb
 | |
| 
 | |
| ; AVX2-LABEL: test2:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test3(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test3:
 | |
| ; SSE4: pmaxsb
 | |
| 
 | |
| ; AVX1-LABEL: test3:
 | |
| ; AVX1: vpmaxsb
 | |
| 
 | |
| ; AVX2-LABEL: test3:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test4(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test4:
 | |
| ; SSE4: pmaxsb
 | |
| 
 | |
| ; AVX1-LABEL: test4:
 | |
| ; AVX1: vpmaxsb
 | |
| 
 | |
| ; AVX2-LABEL: test4:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test5(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test5:
 | |
| ; SSE2: pminub
 | |
| 
 | |
| ; AVX1-LABEL: test5:
 | |
| ; AVX1: vpminub
 | |
| 
 | |
| ; AVX2-LABEL: test5:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test6(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test6:
 | |
| ; SSE2: pminub
 | |
| 
 | |
| ; AVX1-LABEL: test6:
 | |
| ; AVX1: vpminub
 | |
| 
 | |
| ; AVX2-LABEL: test6:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test7(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test7:
 | |
| ; SSE2: pmaxub
 | |
| 
 | |
| ; AVX1-LABEL: test7:
 | |
| ; AVX1: vpmaxub
 | |
| 
 | |
| ; AVX2-LABEL: test7:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test8(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.a, <16 x i8> %load.b
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test8:
 | |
| ; SSE2: pmaxub
 | |
| 
 | |
| ; AVX1-LABEL: test8:
 | |
| ; AVX1: vpmaxub
 | |
| 
 | |
| ; AVX2-LABEL: test8:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test9(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test9:
 | |
| ; SSE2: pminsw
 | |
| 
 | |
| ; AVX1-LABEL: test9:
 | |
| ; AVX1: vpminsw
 | |
| 
 | |
| ; AVX2-LABEL: test9:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test10(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test10:
 | |
| ; SSE2: pminsw
 | |
| 
 | |
| ; AVX1-LABEL: test10:
 | |
| ; AVX1: vpminsw
 | |
| 
 | |
| ; AVX2-LABEL: test10:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test11(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test11:
 | |
| ; SSE2: pmaxsw
 | |
| 
 | |
| ; AVX1-LABEL: test11:
 | |
| ; AVX1: vpmaxsw
 | |
| 
 | |
| ; AVX2-LABEL: test11:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test12(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test12:
 | |
| ; SSE2: pmaxsw
 | |
| 
 | |
| ; AVX1-LABEL: test12:
 | |
| ; AVX1: vpmaxsw
 | |
| 
 | |
| ; AVX2-LABEL: test12:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test13(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test13:
 | |
| ; SSE4: pminuw
 | |
| 
 | |
| ; AVX1-LABEL: test13:
 | |
| ; AVX1: vpminuw
 | |
| 
 | |
| ; AVX2-LABEL: test13:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test14(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test14:
 | |
| ; SSE4: pminuw
 | |
| 
 | |
| ; AVX1-LABEL: test14:
 | |
| ; AVX1: vpminuw
 | |
| 
 | |
| ; AVX2-LABEL: test14:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test15(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test15:
 | |
| ; SSE4: pmaxuw
 | |
| 
 | |
| ; AVX1-LABEL: test15:
 | |
| ; AVX1: vpmaxuw
 | |
| 
 | |
| ; AVX2-LABEL: test15:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test16(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.a, <8 x i16> %load.b
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test16:
 | |
| ; SSE4: pmaxuw
 | |
| 
 | |
| ; AVX1-LABEL: test16:
 | |
| ; AVX1: vpmaxuw
 | |
| 
 | |
| ; AVX2-LABEL: test16:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test17(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test17:
 | |
| ; SSE4: pminsd
 | |
| 
 | |
| ; AVX1-LABEL: test17:
 | |
| ; AVX1: vpminsd
 | |
| 
 | |
| ; AVX2-LABEL: test17:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test18(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test18:
 | |
| ; SSE4: pminsd
 | |
| 
 | |
| ; AVX1-LABEL: test18:
 | |
| ; AVX1: vpminsd
 | |
| 
 | |
| ; AVX2-LABEL: test18:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test19(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test19:
 | |
| ; SSE4: pmaxsd
 | |
| 
 | |
| ; AVX1-LABEL: test19:
 | |
| ; AVX1: vpmaxsd
 | |
| 
 | |
| ; AVX2-LABEL: test19:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test20(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test20:
 | |
| ; SSE4: pmaxsd
 | |
| 
 | |
| ; AVX1-LABEL: test20:
 | |
| ; AVX1: vpmaxsd
 | |
| 
 | |
| ; AVX2-LABEL: test20:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test21(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test21:
 | |
| ; SSE4: pminud
 | |
| 
 | |
| ; AVX1-LABEL: test21:
 | |
| ; AVX1: vpminud
 | |
| 
 | |
| ; AVX2-LABEL: test21:
 | |
| ; AVX2: vpminud
 | |
| }
 | |
| 
 | |
| define void @test22(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test22:
 | |
| ; SSE4: pminud
 | |
| 
 | |
| ; AVX1-LABEL: test22:
 | |
| ; AVX1: vpminud
 | |
| 
 | |
| ; AVX2-LABEL: test22:
 | |
| ; AVX2: vpminud
 | |
| }
 | |
| 
 | |
| define void @test23(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test23:
 | |
| ; SSE4: pmaxud
 | |
| 
 | |
| ; AVX1-LABEL: test23:
 | |
| ; AVX1: vpmaxud
 | |
| 
 | |
| ; AVX2-LABEL: test23:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test24(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.a, <4 x i32> %load.b
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test24:
 | |
| ; SSE4: pmaxud
 | |
| 
 | |
| ; AVX1-LABEL: test24:
 | |
| ; AVX1: vpmaxud
 | |
| 
 | |
| ; AVX2-LABEL: test24:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test25(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test25:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test26(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test26:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test27(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test27:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test28(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test28:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test29(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test29:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test30(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test30:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test31(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test31:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test32(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.a, <32 x i8> %load.b
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test32:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test33(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test33:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test34(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test34:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test35(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test35:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test36(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test36:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test37(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test37:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test38(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test38:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test39(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test39:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test40(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.a, <16 x i16> %load.b
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test40:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test41(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test41:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test42(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test42:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test43(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test43:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test44(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test44:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test45(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test45:
 | |
| ; AVX2: vpminud
 | |
| }
 | |
| 
 | |
| define void @test46(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test46:
 | |
| ; AVX2: vpminud
 | |
| }
 | |
| 
 | |
| define void @test47(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test47:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test48(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.a, <8 x i32> %load.b
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test48:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test49(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test49:
 | |
| ; SSE4: pmaxsb
 | |
| 
 | |
| ; AVX1-LABEL: test49:
 | |
| ; AVX1: vpmaxsb
 | |
| 
 | |
| ; AVX2-LABEL: test49:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test50(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test50:
 | |
| ; SSE4: pmaxsb
 | |
| 
 | |
| ; AVX1-LABEL: test50:
 | |
| ; AVX1: vpmaxsb
 | |
| 
 | |
| ; AVX2-LABEL: test50:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test51(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test51:
 | |
| ; SSE4: pminsb
 | |
| 
 | |
| ; AVX1-LABEL: test51:
 | |
| ; AVX1: vpminsb
 | |
| 
 | |
| ; AVX2-LABEL: test51:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test52(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test52:
 | |
| ; SSE4: pminsb
 | |
| 
 | |
| ; AVX1-LABEL: test52:
 | |
| ; AVX1: vpminsb
 | |
| 
 | |
| ; AVX2-LABEL: test52:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test53(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test53:
 | |
| ; SSE2: pmaxub
 | |
| 
 | |
| ; AVX1-LABEL: test53:
 | |
| ; AVX1: vpmaxub
 | |
| 
 | |
| ; AVX2-LABEL: test53:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test54(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test54:
 | |
| ; SSE2: pmaxub
 | |
| 
 | |
| ; AVX1-LABEL: test54:
 | |
| ; AVX1: vpmaxub
 | |
| 
 | |
| ; AVX2-LABEL: test54:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test55(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test55:
 | |
| ; SSE2: pminub
 | |
| 
 | |
| ; AVX1-LABEL: test55:
 | |
| ; AVX1: vpminub
 | |
| 
 | |
| ; AVX2-LABEL: test55:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test56(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <16 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <16 x i8>*
 | |
|   %load.a = load <16 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <16 x i8> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i8> %load.b, <16 x i8> %load.a
 | |
|   store <16 x i8> %sel, <16 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test56:
 | |
| ; SSE2: pminub
 | |
| 
 | |
| ; AVX1-LABEL: test56:
 | |
| ; AVX1: vpminub
 | |
| 
 | |
| ; AVX2-LABEL: test56:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test57(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test57:
 | |
| ; SSE2: pmaxsw
 | |
| 
 | |
| ; AVX1-LABEL: test57:
 | |
| ; AVX1: vpmaxsw
 | |
| 
 | |
| ; AVX2-LABEL: test57:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test58(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test58:
 | |
| ; SSE2: pmaxsw
 | |
| 
 | |
| ; AVX1-LABEL: test58:
 | |
| ; AVX1: vpmaxsw
 | |
| 
 | |
| ; AVX2-LABEL: test58:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test59(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test59:
 | |
| ; SSE2: pminsw
 | |
| 
 | |
| ; AVX1-LABEL: test59:
 | |
| ; AVX1: vpminsw
 | |
| 
 | |
| ; AVX2-LABEL: test59:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test60(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE2-LABEL: test60:
 | |
| ; SSE2: pminsw
 | |
| 
 | |
| ; AVX1-LABEL: test60:
 | |
| ; AVX1: vpminsw
 | |
| 
 | |
| ; AVX2-LABEL: test60:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test61(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test61:
 | |
| ; SSE4: pmaxuw
 | |
| 
 | |
| ; AVX1-LABEL: test61:
 | |
| ; AVX1: vpmaxuw
 | |
| 
 | |
| ; AVX2-LABEL: test61:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test62(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test62:
 | |
| ; SSE4: pmaxuw
 | |
| 
 | |
| ; AVX1-LABEL: test62:
 | |
| ; AVX1: vpmaxuw
 | |
| 
 | |
| ; AVX2-LABEL: test62:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test63(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test63:
 | |
| ; SSE4: pminuw
 | |
| 
 | |
| ; AVX1-LABEL: test63:
 | |
| ; AVX1: vpminuw
 | |
| 
 | |
| ; AVX2-LABEL: test63:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test64(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <8 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <8 x i16>*
 | |
|   %load.a = load <8 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <8 x i16> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i16> %load.b, <8 x i16> %load.a
 | |
|   store <8 x i16> %sel, <8 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test64:
 | |
| ; SSE4: pminuw
 | |
| 
 | |
| ; AVX1-LABEL: test64:
 | |
| ; AVX1: vpminuw
 | |
| 
 | |
| ; AVX2-LABEL: test64:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test65(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test65:
 | |
| ; SSE4: pmaxsd
 | |
| 
 | |
| ; AVX1-LABEL: test65:
 | |
| ; AVX1: vpmaxsd
 | |
| 
 | |
| ; AVX2-LABEL: test65:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test66(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test66:
 | |
| ; SSE4: pmaxsd
 | |
| 
 | |
| ; AVX1-LABEL: test66:
 | |
| ; AVX1: vpmaxsd
 | |
| 
 | |
| ; AVX2-LABEL: test66:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test67(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test67:
 | |
| ; SSE4: pminsd
 | |
| 
 | |
| ; AVX1-LABEL: test67:
 | |
| ; AVX1: vpminsd
 | |
| 
 | |
| ; AVX2-LABEL: test67:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test68(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test68:
 | |
| ; SSE4: pminsd
 | |
| 
 | |
| ; AVX1-LABEL: test68:
 | |
| ; AVX1: vpminsd
 | |
| 
 | |
| ; AVX2-LABEL: test68:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test69(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test69:
 | |
| ; SSE4: pmaxud
 | |
| 
 | |
| ; AVX1-LABEL: test69:
 | |
| ; AVX1: vpmaxud
 | |
| 
 | |
| ; AVX2-LABEL: test69:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test70(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test70:
 | |
| ; SSE4: pmaxud
 | |
| 
 | |
| ; AVX1-LABEL: test70:
 | |
| ; AVX1: vpmaxud
 | |
| 
 | |
| ; AVX2-LABEL: test70:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test71(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test71:
 | |
| ; SSE4: pminud
 | |
| 
 | |
| ; AVX1-LABEL: test71:
 | |
| ; AVX1: vpminud
 | |
| 
 | |
| ; AVX2-LABEL: test71:
 | |
| ; AVX2: vpminud
 | |
| }
 | |
| 
 | |
| define void @test72(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <4 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <4 x i32>*
 | |
|   %load.a = load <4 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <4 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <4 x i32> %load.a, %load.b
 | |
|   %sel = select <4 x i1> %cmp, <4 x i32> %load.b, <4 x i32> %load.a
 | |
|   store <4 x i32> %sel, <4 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 4
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; SSE4-LABEL: test72:
 | |
| ; SSE4: pminud
 | |
| 
 | |
| ; AVX1-LABEL: test72:
 | |
| ; AVX1: vpminud
 | |
| 
 | |
| ; AVX2-LABEL: test72:
 | |
| ; AVX2: vpminud
 | |
| }
 | |
| 
 | |
| define void @test73(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test73:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test74(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test74:
 | |
| ; AVX2: vpmaxsb
 | |
| }
 | |
| 
 | |
| define void @test75(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test75:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test76(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test76:
 | |
| ; AVX2: vpminsb
 | |
| }
 | |
| 
 | |
| define void @test77(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test77:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test78(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test78:
 | |
| ; AVX2: vpmaxub
 | |
| }
 | |
| 
 | |
| define void @test79(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test79:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test80(i8* nocapture %a, i8* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i8* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i8* %b, i64 %index
 | |
|   %ptr.a = bitcast i8* %gep.a to <32 x i8>*
 | |
|   %ptr.b = bitcast i8* %gep.b to <32 x i8>*
 | |
|   %load.a = load <32 x i8>* %ptr.a, align 2
 | |
|   %load.b = load <32 x i8>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <32 x i8> %load.a, %load.b
 | |
|   %sel = select <32 x i1> %cmp, <32 x i8> %load.b, <32 x i8> %load.a
 | |
|   store <32 x i8> %sel, <32 x i8>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 32
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test80:
 | |
| ; AVX2: vpminub
 | |
| }
 | |
| 
 | |
| define void @test81(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test81:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test82(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test82:
 | |
| ; AVX2: vpmaxsw
 | |
| }
 | |
| 
 | |
| define void @test83(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test83:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test84(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test84:
 | |
| ; AVX2: vpminsw
 | |
| }
 | |
| 
 | |
| define void @test85(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test85:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test86(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test86:
 | |
| ; AVX2: vpmaxuw
 | |
| }
 | |
| 
 | |
| define void @test87(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test87:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test88(i16* nocapture %a, i16* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i16* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i16* %b, i64 %index
 | |
|   %ptr.a = bitcast i16* %gep.a to <16 x i16>*
 | |
|   %ptr.b = bitcast i16* %gep.b to <16 x i16>*
 | |
|   %load.a = load <16 x i16>* %ptr.a, align 2
 | |
|   %load.b = load <16 x i16>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <16 x i16> %load.a, %load.b
 | |
|   %sel = select <16 x i1> %cmp, <16 x i16> %load.b, <16 x i16> %load.a
 | |
|   store <16 x i16> %sel, <16 x i16>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 16
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test88:
 | |
| ; AVX2: vpminuw
 | |
| }
 | |
| 
 | |
| define void @test89(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp slt <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test89:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test90(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sle <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test90:
 | |
| ; AVX2: vpmaxsd
 | |
| }
 | |
| 
 | |
| define void @test91(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sgt <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test91:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test92(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp sge <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test92:
 | |
| ; AVX2: vpminsd
 | |
| }
 | |
| 
 | |
| define void @test93(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ult <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test93:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test94(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ule <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test94:
 | |
| ; AVX2: vpmaxud
 | |
| }
 | |
| 
 | |
| define void @test95(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp ugt <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test95:
 | |
| ; AVX2: vpminud
 | |
| }
 | |
| 
 | |
| define void @test96(i32* nocapture %a, i32* nocapture %b) nounwind {
 | |
| vector.ph:
 | |
|   br label %vector.body
 | |
| 
 | |
| vector.body:                                      ; preds = %vector.body, %vector.ph
 | |
|   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
 | |
|   %gep.a = getelementptr inbounds i32* %a, i64 %index
 | |
|   %gep.b = getelementptr inbounds i32* %b, i64 %index
 | |
|   %ptr.a = bitcast i32* %gep.a to <8 x i32>*
 | |
|   %ptr.b = bitcast i32* %gep.b to <8 x i32>*
 | |
|   %load.a = load <8 x i32>* %ptr.a, align 2
 | |
|   %load.b = load <8 x i32>* %ptr.b, align 2
 | |
|   %cmp = icmp uge <8 x i32> %load.a, %load.b
 | |
|   %sel = select <8 x i1> %cmp, <8 x i32> %load.b, <8 x i32> %load.a
 | |
|   store <8 x i32> %sel, <8 x i32>* %ptr.a, align 2
 | |
|   %index.next = add i64 %index, 8
 | |
|   %loop = icmp eq i64 %index.next, 16384
 | |
|   br i1 %loop, label %for.end, label %vector.body
 | |
| 
 | |
| for.end:                                          ; preds = %vector.body
 | |
|   ret void
 | |
| 
 | |
| ; AVX2-LABEL: test96:
 | |
| ; AVX2: vpminud
 | |
| }
 |