1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+sse2 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_sse2_psll_dq_bs(<2 x i64> %a0) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_psll_dq_bs: 6*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8] 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 9*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.sse2.psll.dq.bs(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1] 10*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse2.psll.dq.bs(<2 x i64>, i32) nounwind readnone 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_sse2_psrl_dq_bs(<2 x i64> %a0) { 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_psrl_dq_bs: 17*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrldq {{.*#+}} xmm0 = xmm0[7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 20*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.sse2.psrl.dq.bs(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1] 21*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse2.psrl.dq.bs(<2 x i64>, i32) nounwind readnone 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_sse2_psll_dq(<2 x i64> %a0) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_psll_dq: 27*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslldq {{.*#+}} xmm0 = zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 30*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.sse2.psll.dq(<2 x i64> %a0, i32 8) ; <<2 x i64>> [#uses=1] 31*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse2.psll.dq(<2 x i64>, i32) nounwind readnone 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_sse2_psrl_dq(<2 x i64> %a0) { 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_psrl_dq: 38*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 41*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.sse2.psrl.dq(<2 x i64> %a0, i32 8) ; <<2 x i64>> [#uses=1] 42*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse2.psrl.dq(<2 x i64>, i32) nounwind readnone 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse2_cvtdq2pd(<4 x i32> %a0) { 48*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_cvtdq2pd: 49*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cvtdq2pd %xmm0, %xmm0 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 52*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.x86.sse2.cvtdq2pd(<4 x i32> %a0) ; <<2 x double>> [#uses=1] 53*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse2.cvtdq2pd(<4 x i32>) nounwind readnone 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse2_cvtps2pd(<4 x float> %a0) { 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_cvtps2pd: 60*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cvtps2pd %xmm0, %xmm0 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 63*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.x86.sse2.cvtps2pd(<4 x float> %a0) ; <<2 x double>> [#uses=1] 64*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse2.cvtps2pd(<4 x float>) nounwind readnone 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse2_cvttps2dq(<4 x float> %a0) { 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_cvttps2dq: 71*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cvttps2dq %xmm0, %xmm0 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 74*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float> %a0) ; <<4 x i32>> [#uses=1] 75*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float>) nounwind readnone 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine void @test_x86_sse2_storel_dq(i8* %a0, <4 x i32> %a1) { 81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_storel_dq: 82*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movlps %xmm0, (%eax) 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 86*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.sse2.storel.dq(i8* %a0, <4 x i32> %a1) 87*9880d681SAndroid Build Coastguard Worker ret void 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.sse2.storel.dq(i8*, <4 x i32>) nounwind 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerdefine void @test_x86_sse2_storeu_dq(i8* %a0, <16 x i8> %a1) { 93*9880d681SAndroid Build Coastguard Worker ; add operation forces the execution domain. 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_storeu_dq: 95*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddb LCPI8_0, %xmm0 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqu %xmm0, (%eax) 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 100*9880d681SAndroid Build Coastguard Worker %a2 = add <16 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 101*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.sse2.storeu.dq(i8* %a0, <16 x i8> %a2) 102*9880d681SAndroid Build Coastguard Worker ret void 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.sse2.storeu.dq(i8*, <16 x i8>) nounwind 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdefine void @test_x86_sse2_storeu_pd(i8* %a0, <2 x double> %a1) { 108*9880d681SAndroid Build Coastguard Worker ; fadd operation forces the execution domain. 109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_storeu_pd: 110*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7] 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addpd %xmm0, %xmm1 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movupd %xmm1, (%eax) 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 117*9880d681SAndroid Build Coastguard Worker %a2 = fadd <2 x double> %a1, <double 0x0, double 0x4200000000000000> 118*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.sse2.storeu.pd(i8* %a0, <2 x double> %a2) 119*9880d681SAndroid Build Coastguard Worker ret void 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.sse2.storeu.pd(i8*, <2 x double>) nounwind 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse2_pshuf_d(<4 x i32> %a) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_pshuf_d: 125*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0] 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 128*9880d681SAndroid Build Coastguard Workerentry: 129*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.sse2.pshuf.d(<4 x i32> %a, i8 27) nounwind readnone 130*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse2.pshuf.d(<4 x i32>, i8) nounwind readnone 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse2_pshufl_w(<8 x i16> %a) { 135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_pshufl_w: 136*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7] 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 139*9880d681SAndroid Build Coastguard Workerentry: 140*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse2.pshufl.w(<8 x i16> %a, i8 27) nounwind readnone 141*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse2.pshufl.w(<8 x i16>, i8) nounwind readnone 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse2_pshufh_w(<8 x i16> %a) { 146*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_sse2_pshufh_w: 147*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: ## %entry 148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4] 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 150*9880d681SAndroid Build Coastguard Workerentry: 151*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse2.pshufh.w(<8 x i16> %a, i8 27) nounwind readnone 152*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse2.pshufh.w(<8 x i16>, i8) nounwind readnone 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @max_epu8(<16 x i8> %a0, <16 x i8> %a1) { 157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: max_epu8: 158*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmaxub %xmm1, %xmm0 160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 161*9880d681SAndroid Build Coastguard Worker; 162*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8> %a0, <16 x i8> %a1) 163*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 164*9880d681SAndroid Build Coastguard Worker} 165*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8>, <16 x i8>) nounwind readnone 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @min_epu8(<16 x i8> %a0, <16 x i8> %a1) { 168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: min_epu8: 169*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pminub %xmm1, %xmm0 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 172*9880d681SAndroid Build Coastguard Worker; 173*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8> %a0, <16 x i8> %a1) 174*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8>, <16 x i8>) nounwind readnone 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @max_epi16(<8 x i16> %a0, <8 x i16> %a1) { 179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: max_epi16: 180*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmaxsw %xmm1, %xmm0 182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 183*9880d681SAndroid Build Coastguard Worker; 184*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16> %a0, <8 x i16> %a1) 185*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 186*9880d681SAndroid Build Coastguard Worker} 187*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16>, <8 x i16>) nounwind readnone 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @min_epi16(<8 x i16> %a0, <8 x i16> %a1) { 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: min_epi16: 191*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pminsw %xmm1, %xmm0 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 194*9880d681SAndroid Build Coastguard Worker; 195*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16> %a0, <8 x i16> %a1) 196*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 197*9880d681SAndroid Build Coastguard Worker} 198*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16>, <8 x i16>) nounwind readnone 199*9880d681SAndroid Build Coastguard Worker 200