1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=+sse4.1 | FileCheck %s --check-prefix=CHECK --check-prefix=SSE41 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i386-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=KNL 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) { 6*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_blendvpd: 7*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 8*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movapd %xmm0, %xmm3 9*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movaps %xmm2, %xmm0 10*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: blendvpd %xmm1, %xmm3 11*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movapd %xmm3, %xmm0 12*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 13*9880d681SAndroid Build Coastguard Worker; 14*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_blendvpd: 15*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 16*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 17*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 18*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) ; <<2 x double>> [#uses=1] 19*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) { 25*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_blendvps: 26*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 27*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movaps %xmm0, %xmm3 28*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movaps %xmm2, %xmm0 29*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: blendvps %xmm1, %xmm3 30*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movaps %xmm3, %xmm0 31*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 32*9880d681SAndroid Build Coastguard Worker; 33*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_blendvps: 34*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 35*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvps %xmm2, %xmm1, %xmm0, %xmm0 36*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 37*9880d681SAndroid Build Coastguard Worker %res = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) ; <<4 x float>> [#uses=1] 38*9880d681SAndroid Build Coastguard Worker ret <4 x float> %res 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_dppd(<2 x double> %a0, <2 x double> %a1) { 44*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_dppd: 45*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 46*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: dppd $7, %xmm1, %xmm0 47*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 48*9880d681SAndroid Build Coastguard Worker; 49*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_dppd: 50*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 51*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vdppd $7, %xmm1, %xmm0, %xmm0 52*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 53*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %a0, <2 x double> %a1, i8 7) ; <<2 x double>> [#uses=1] 54*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.dppd(<2 x double>, <2 x double>, i8) nounwind readnone 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_dpps(<4 x float> %a0, <4 x float> %a1) { 60*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_dpps: 61*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 62*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: dpps $7, %xmm1, %xmm0 63*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 64*9880d681SAndroid Build Coastguard Worker; 65*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_dpps: 66*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 67*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vdpps $7, %xmm1, %xmm0, %xmm0 68*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 69*9880d681SAndroid Build Coastguard Worker %res = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1] 70*9880d681SAndroid Build Coastguard Worker ret <4 x float> %res 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i8) nounwind readnone 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_insertps(<4 x float> %a0, <4 x float> %a1) { 76*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_insertps: 77*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 78*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] 79*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 80*9880d681SAndroid Build Coastguard Worker; 81*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_insertps: 82*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 83*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] 84*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 85*9880d681SAndroid Build Coastguard Worker %res = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i8 17) ; <<4 x float>> [#uses=1] 86*9880d681SAndroid Build Coastguard Worker ret <4 x float> %res 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i8) nounwind readnone 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_mpsadbw(<16 x i8> %a0, <16 x i8> %a1) { 93*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_mpsadbw: 94*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 95*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: mpsadbw $7, %xmm1, %xmm0 96*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 97*9880d681SAndroid Build Coastguard Worker; 98*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_mpsadbw: 99*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 100*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmpsadbw $7, %xmm1, %xmm0, %xmm0 101*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 102*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <<8 x i16>> [#uses=1] 103*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8>, <16 x i8>, i8) nounwind readnone 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_packusdw(<4 x i32> %a0, <4 x i32> %a1) { 109*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_packusdw: 110*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 111*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packusdw %xmm1, %xmm0 112*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 113*9880d681SAndroid Build Coastguard Worker; 114*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_packusdw: 115*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 116*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 117*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 118*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %a0, <4 x i32> %a1) ; <<8 x i16>> [#uses=1] 119*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) nounwind readnone 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_x86_sse41_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) { 125*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pblendvb: 126*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 127*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm3 128*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movaps %xmm2, %xmm0 129*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm1, %xmm3 130*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm0 131*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 132*9880d681SAndroid Build Coastguard Worker; 133*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pblendvb: 134*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 135*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 136*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 137*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) ; <<16 x i8>> [#uses=1] 138*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_phminposuw(<8 x i16> %a0) { 144*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_phminposuw: 145*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 146*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: phminposuw %xmm0, %xmm0 147*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 148*9880d681SAndroid Build Coastguard Worker; 149*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_phminposuw: 150*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 151*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vphminposuw %xmm0, %xmm0 152*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 153*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %a0) ; <<8 x i16>> [#uses=1] 154*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 155*9880d681SAndroid Build Coastguard Worker} 156*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>) nounwind readnone 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_x86_sse41_pmaxsb(<16 x i8> %a0, <16 x i8> %a1) { 160*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxsb: 161*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 162*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmaxsb %xmm1, %xmm0 163*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 164*9880d681SAndroid Build Coastguard Worker; 165*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxsb: 166*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 167*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 168*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 169*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1] 170*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8>, <16 x i8>) nounwind readnone 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pmaxsd(<4 x i32> %a0, <4 x i32> %a1) { 176*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxsd: 177*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 178*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmaxsd %xmm1, %xmm0 179*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 180*9880d681SAndroid Build Coastguard Worker; 181*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxsd: 182*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 183*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 185*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1] 186*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 187*9880d681SAndroid Build Coastguard Worker} 188*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32>, <4 x i32>) nounwind readnone 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pmaxud(<4 x i32> %a0, <4 x i32> %a1) { 192*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxud: 193*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 194*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmaxud %xmm1, %xmm0 195*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 196*9880d681SAndroid Build Coastguard Worker; 197*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxud: 198*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 199*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 200*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 201*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1] 202*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32>, <4 x i32>) nounwind readnone 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_pmaxuw(<8 x i16> %a0, <8 x i16> %a1) { 208*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxuw: 209*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 210*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmaxuw %xmm1, %xmm0 211*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 212*9880d681SAndroid Build Coastguard Worker; 213*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxuw: 214*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 215*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 216*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 217*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1] 218*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16>, <8 x i16>) nounwind readnone 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_x86_sse41_pminsb(<16 x i8> %a0, <16 x i8> %a1) { 224*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminsb: 225*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 226*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pminsb %xmm1, %xmm0 227*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 228*9880d681SAndroid Build Coastguard Worker; 229*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminsb: 230*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 231*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpminsb %xmm1, %xmm0, %xmm0 232*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 233*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1] 234*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8>, <16 x i8>) nounwind readnone 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pminsd(<4 x i32> %a0, <4 x i32> %a1) { 240*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminsd: 241*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 242*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pminsd %xmm1, %xmm0 243*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 244*9880d681SAndroid Build Coastguard Worker; 245*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminsd: 246*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 247*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpminsd %xmm1, %xmm0, %xmm0 248*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 249*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1] 250*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32>, <4 x i32>) nounwind readnone 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pminud(<4 x i32> %a0, <4 x i32> %a1) { 256*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminud: 257*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 258*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pminud %xmm1, %xmm0 259*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 260*9880d681SAndroid Build Coastguard Worker; 261*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminud: 262*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 263*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpminud %xmm1, %xmm0, %xmm0 264*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 265*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.sse41.pminud(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1] 266*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 267*9880d681SAndroid Build Coastguard Worker} 268*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pminud(<4 x i32>, <4 x i32>) nounwind readnone 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_pminuw(<8 x i16> %a0, <8 x i16> %a1) { 272*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminuw: 273*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 274*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pminuw %xmm1, %xmm0 275*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 276*9880d681SAndroid Build Coastguard Worker; 277*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminuw: 278*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 279*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpminuw %xmm1, %xmm0, %xmm0 280*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 281*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1] 282*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 283*9880d681SAndroid Build Coastguard Worker} 284*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16>, <8 x i16>) nounwind readnone 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_sse41_pmuldq(<4 x i32> %a0, <4 x i32> %a1) { 288*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmuldq: 289*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 290*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmuldq %xmm1, %xmm0 291*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 292*9880d681SAndroid Build Coastguard Worker; 293*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmuldq: 294*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 295*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmuldq %xmm1, %xmm0, %xmm0 296*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 297*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32> %a0, <4 x i32> %a1) ; <<2 x i64>> [#uses=1] 298*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32>, <4 x i32>) nounwind readnone 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_sse41_ptestc(<2 x i64> %a0, <2 x i64> %a1) { 304*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_ptestc: 305*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 306*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: ptest %xmm1, %xmm0 307*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: sbbl %eax, %eax 308*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: andl $1, %eax 309*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 310*9880d681SAndroid Build Coastguard Worker; 311*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_ptestc: 312*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 313*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptest %xmm1, %xmm0 314*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: sbbl %eax, %eax 315*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: andl $1, %eax 316*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 317*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.x86.sse41.ptestc(<2 x i64> %a0, <2 x i64> %a1) ; <i32> [#uses=1] 318*9880d681SAndroid Build Coastguard Worker ret i32 %res 319*9880d681SAndroid Build Coastguard Worker} 320*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestc(<2 x i64>, <2 x i64>) nounwind readnone 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Worker 323*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_sse41_ptestnzc(<2 x i64> %a0, <2 x i64> %a1) { 324*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_ptestnzc: 325*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 326*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: xorl %eax, %eax 327*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: ptest %xmm1, %xmm0 328*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: seta %al 329*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 330*9880d681SAndroid Build Coastguard Worker; 331*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_ptestnzc: 332*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 333*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: xorl %eax, %eax 334*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptest %xmm1, %xmm0 335*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: seta %al 336*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 337*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.x86.sse41.ptestnzc(<2 x i64> %a0, <2 x i64> %a1) ; <i32> [#uses=1] 338*9880d681SAndroid Build Coastguard Worker ret i32 %res 339*9880d681SAndroid Build Coastguard Worker} 340*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestnzc(<2 x i64>, <2 x i64>) nounwind readnone 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_sse41_ptestz(<2 x i64> %a0, <2 x i64> %a1) { 344*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_ptestz: 345*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 346*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: xorl %eax, %eax 347*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: ptest %xmm1, %xmm0 348*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: sete %al 349*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 350*9880d681SAndroid Build Coastguard Worker; 351*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_ptestz: 352*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 353*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: xorl %eax, %eax 354*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vptest %xmm1, %xmm0 355*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: sete %al 356*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 357*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.x86.sse41.ptestz(<2 x i64> %a0, <2 x i64> %a1) ; <i32> [#uses=1] 358*9880d681SAndroid Build Coastguard Worker ret i32 %res 359*9880d681SAndroid Build Coastguard Worker} 360*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestz(<2 x i64>, <2 x i64>) nounwind readnone 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Worker 363*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_round_pd(<2 x double> %a0) { 364*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_pd: 365*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 366*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: roundpd $7, %xmm0, %xmm0 367*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 368*9880d681SAndroid Build Coastguard Worker; 369*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_pd: 370*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 371*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vroundpd $7, %xmm0, %xmm0 372*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 373*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 7) ; <<2 x double>> [#uses=1] 374*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 375*9880d681SAndroid Build Coastguard Worker} 376*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.round.pd(<2 x double>, i32) nounwind readnone 377*9880d681SAndroid Build Coastguard Worker 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_round_ps(<4 x float> %a0) { 380*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_ps: 381*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 382*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: roundps $7, %xmm0, %xmm0 383*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 384*9880d681SAndroid Build Coastguard Worker; 385*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_ps: 386*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 387*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vroundps $7, %xmm0, %xmm0 388*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 389*9880d681SAndroid Build Coastguard Worker %res = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 7) ; <<4 x float>> [#uses=1] 390*9880d681SAndroid Build Coastguard Worker ret <4 x float> %res 391*9880d681SAndroid Build Coastguard Worker} 392*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.round.ps(<4 x float>, i32) nounwind readnone 393*9880d681SAndroid Build Coastguard Worker 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_round_sd(<2 x double> %a0, <2 x double> %a1) { 396*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_sd: 397*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 398*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: roundsd $7, %xmm1, %xmm0 399*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 400*9880d681SAndroid Build Coastguard Worker; 401*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_sd: 402*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 403*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vroundsd $7, %xmm1, %xmm0, %xmm0 404*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 405*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 7) ; <<2 x double>> [#uses=1] 406*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 407*9880d681SAndroid Build Coastguard Worker} 408*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.round.sd(<2 x double>, <2 x double>, i32) nounwind readnone 409*9880d681SAndroid Build Coastguard Worker 410*9880d681SAndroid Build Coastguard Worker 411*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_round_ss(<4 x float> %a0, <4 x float> %a1) { 412*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_ss: 413*9880d681SAndroid Build Coastguard Worker; SSE41: ## BB#0: 414*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: roundss $7, %xmm1, %xmm0 415*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retl 416*9880d681SAndroid Build Coastguard Worker; 417*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_ss: 418*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 419*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vroundss $7, %xmm1, %xmm0, %xmm0 420*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retl 421*9880d681SAndroid Build Coastguard Worker %res = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 7) ; <<4 x float>> [#uses=1] 422*9880d681SAndroid Build Coastguard Worker ret <4 x float> %res 423*9880d681SAndroid Build Coastguard Worker} 424*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.round.ss(<4 x float>, <4 x float>, i32) nounwind readnone 425