1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-linux-pc -mcpu=corei7 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pminud(<4 x i32>, <4 x i32>) 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <2 x i16> @good(<4 x i32>*, <4 x i8>*) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: good: 7*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rdi), %xmm0 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pminud {{.*}}(%rip), %xmm0 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwq %xmm0, %xmm0 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 12*9880d681SAndroid Build Coastguard Workerentry: 13*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %0, align 16 14*9880d681SAndroid Build Coastguard Worker %3 = call <4 x i32> @llvm.x86.sse41.pminud(<4 x i32> %2, <4 x i32> <i32 127, i32 127, i32 127, i32 127>) 15*9880d681SAndroid Build Coastguard Worker %4 = extractelement <4 x i32> %3, i32 0 16*9880d681SAndroid Build Coastguard Worker %5 = extractelement <4 x i32> %3, i32 1 17*9880d681SAndroid Build Coastguard Worker %6 = extractelement <4 x i32> %3, i32 2 18*9880d681SAndroid Build Coastguard Worker %7 = extractelement <4 x i32> %3, i32 3 19*9880d681SAndroid Build Coastguard Worker %8 = bitcast i32 %4 to <2 x i16> 20*9880d681SAndroid Build Coastguard Worker %9 = bitcast i32 %5 to <2 x i16> 21*9880d681SAndroid Build Coastguard Worker ret <2 x i16> %8 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine <2 x i16> @bad(<4 x i32>*, <4 x i8>*) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bad: 26*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rdi), %xmm0 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pminud {{.*}}(%rip), %xmm0 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %0, align 16 34*9880d681SAndroid Build Coastguard Worker %3 = call <4 x i32> @llvm.x86.sse41.pminud(<4 x i32> %2, <4 x i32> <i32 127, i32 127, i32 127, i32 127>) 35*9880d681SAndroid Build Coastguard Worker %4 = extractelement <4 x i32> %3, i32 0 36*9880d681SAndroid Build Coastguard Worker %5 = extractelement <4 x i32> %3, i32 1 37*9880d681SAndroid Build Coastguard Worker %6 = extractelement <4 x i32> %3, i32 2 38*9880d681SAndroid Build Coastguard Worker %7 = extractelement <4 x i32> %3, i32 3 39*9880d681SAndroid Build Coastguard Worker %8 = bitcast i32 %4 to <2 x i16> 40*9880d681SAndroid Build Coastguard Worker %9 = bitcast i32 %5 to <2 x i16> 41*9880d681SAndroid Build Coastguard Worker ret <2 x i16> %9 42*9880d681SAndroid Build Coastguard Worker} 43