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 -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck --check-prefix=KNL %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck --check-prefix=SKX %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test1(<16 x float> %x, float* %br, float %y) nounwind { 6*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test1: 7*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 8*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm2 = xmm0[0],mem[0],xmm0[2,3] 9*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf32x4 $0, %xmm2, %zmm0, %zmm0 10*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextractf32x4 $3, %zmm0, %xmm2 11*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 12*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf32x4 $3, %xmm1, %zmm0, %zmm0 13*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 14*9880d681SAndroid Build Coastguard Worker; 15*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test1: 16*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 17*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertps {{.*#+}} xmm2 = xmm0[0],mem[0],xmm0[2,3] 18*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf32x4 $0, %xmm2, %zmm0, %zmm0 19*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextractf32x4 $3, %zmm0, %xmm2 20*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3] 21*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf32x4 $3, %xmm1, %zmm0, %zmm0 22*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 23*9880d681SAndroid Build Coastguard Worker %rrr = load float, float* %br 24*9880d681SAndroid Build Coastguard Worker %rrr2 = insertelement <16 x float> %x, float %rrr, i32 1 25*9880d681SAndroid Build Coastguard Worker %rrr3 = insertelement <16 x float> %rrr2, float %y, i32 14 26*9880d681SAndroid Build Coastguard Worker ret <16 x float> %rrr3 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test2(<8 x double> %x, double* %br, double %y) nounwind { 30*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test2: 31*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 32*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovhpd {{.*#+}} xmm2 = xmm0[0],mem[0] 33*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf32x4 $0, %xmm2, %zmm0, %zmm0 34*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextractf32x4 $3, %zmm0, %xmm2 35*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovsd {{.*#+}} xmm1 = xmm1[0],xmm2[1] 36*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf32x4 $3, %xmm1, %zmm0, %zmm0 37*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker; 39*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test2: 40*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 41*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovhpd {{.*#+}} xmm2 = xmm0[0],mem[0] 42*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf64x2 $0, %xmm2, %zmm0, %zmm0 43*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextractf64x2 $3, %zmm0, %xmm2 44*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovsd {{.*#+}} xmm1 = xmm1[0],xmm2[1] 45*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf64x2 $3, %xmm1, %zmm0, %zmm0 46*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 47*9880d681SAndroid Build Coastguard Worker %rrr = load double, double* %br 48*9880d681SAndroid Build Coastguard Worker %rrr2 = insertelement <8 x double> %x, double %rrr, i32 1 49*9880d681SAndroid Build Coastguard Worker %rrr3 = insertelement <8 x double> %rrr2, double %y, i32 6 50*9880d681SAndroid Build Coastguard Worker ret <8 x double> %rrr3 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test3(<16 x float> %x) nounwind { 54*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test3: 55*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 56*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextractf32x4 $1, %zmm0, %xmm1 57*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3] 58*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm0 59*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 60*9880d681SAndroid Build Coastguard Worker; 61*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test3: 62*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 63*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextractf32x4 $1, %zmm0, %xmm1 64*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3] 65*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm0 66*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 67*9880d681SAndroid Build Coastguard Worker %eee = extractelement <16 x float> %x, i32 4 68*9880d681SAndroid Build Coastguard Worker %rrr2 = insertelement <16 x float> %x, float %eee, i32 1 69*9880d681SAndroid Build Coastguard Worker ret <16 x float> %rrr2 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test4(<8 x i64> %x) nounwind { 73*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test4: 74*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 75*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $2, %zmm0, %xmm1 76*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm1, %rax 77*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $1, %rax, %xmm0, %xmm1 78*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 79*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 80*9880d681SAndroid Build Coastguard Worker; 81*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test4: 82*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 83*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti64x2 $2, %zmm0, %xmm1 84*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovq %xmm1, %rax 85*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $1, %rax, %xmm0, %xmm1 86*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti64x2 $0, %xmm1, %zmm0, %zmm0 87*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 88*9880d681SAndroid Build Coastguard Worker %eee = extractelement <8 x i64> %x, i32 4 89*9880d681SAndroid Build Coastguard Worker %rrr2 = insertelement <8 x i64> %x, i64 %eee, i32 1 90*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %rrr2 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine i32 @test5(<4 x float> %x) nounwind { 94*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test5: 95*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 96*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextractps $3, %xmm0, %eax 97*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 98*9880d681SAndroid Build Coastguard Worker; 99*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test5: 100*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 101*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextractps $3, %xmm0, %eax 102*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 103*9880d681SAndroid Build Coastguard Worker %ef = extractelement <4 x float> %x, i32 3 104*9880d681SAndroid Build Coastguard Worker %ei = bitcast float %ef to i32 105*9880d681SAndroid Build Coastguard Worker ret i32 %ei 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine void @test6(<4 x float> %x, float* %out) nounwind { 109*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test6: 110*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 111*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextractps $3, %xmm0, (%rdi) 112*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 113*9880d681SAndroid Build Coastguard Worker; 114*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test6: 115*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 116*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextractps $3, %xmm0, (%rdi) 117*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 118*9880d681SAndroid Build Coastguard Worker %ef = extractelement <4 x float> %x, i32 3 119*9880d681SAndroid Build Coastguard Worker store float %ef, float* %out, align 4 120*9880d681SAndroid Build Coastguard Worker ret void 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine float @test7(<16 x float> %x, i32 %ind) nounwind { 124*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test7: 125*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 126*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %edi, %xmm1 127*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermps %zmm0, %zmm1, %zmm0 128*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 129*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 130*9880d681SAndroid Build Coastguard Worker; 131*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test7: 132*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 133*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovd %edi, %xmm1 134*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpermps %zmm0, %zmm1, %zmm0 135*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 136*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 137*9880d681SAndroid Build Coastguard Worker %e = extractelement <16 x float> %x, i32 %ind 138*9880d681SAndroid Build Coastguard Worker ret float %e 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerdefine double @test8(<8 x double> %x, i32 %ind) nounwind { 142*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test8: 143*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 144*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movslq %edi, %rax 145*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm1 146*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermpd %zmm0, %zmm1, %zmm0 147*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 148*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 149*9880d681SAndroid Build Coastguard Worker; 150*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test8: 151*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 152*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movslq %edi, %rax 153*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovq %rax, %xmm1 154*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpermpd %zmm0, %zmm1, %zmm0 155*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 156*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 157*9880d681SAndroid Build Coastguard Worker %e = extractelement <8 x double> %x, i32 %ind 158*9880d681SAndroid Build Coastguard Worker ret double %e 159*9880d681SAndroid Build Coastguard Worker} 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerdefine float @test9(<8 x float> %x, i32 %ind) nounwind { 162*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test9: 163*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 164*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %edi, %xmm1 165*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermps %ymm0, %ymm1, %ymm0 166*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 167*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 168*9880d681SAndroid Build Coastguard Worker; 169*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test9: 170*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 171*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovd %edi, %xmm1 172*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpermps %ymm0, %ymm1, %ymm0 173*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 174*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 175*9880d681SAndroid Build Coastguard Worker %e = extractelement <8 x float> %x, i32 %ind 176*9880d681SAndroid Build Coastguard Worker ret float %e 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerdefine i32 @test10(<16 x i32> %x, i32 %ind) nounwind { 180*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test10: 181*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 182*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %edi, %xmm1 183*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermd %zmm0, %zmm1, %zmm0 184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %xmm0, %eax 185*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 186*9880d681SAndroid Build Coastguard Worker; 187*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test10: 188*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 189*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovd %edi, %xmm1 190*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpermd %zmm0, %zmm1, %zmm0 191*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovd %xmm0, %eax 192*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 193*9880d681SAndroid Build Coastguard Worker %e = extractelement <16 x i32> %x, i32 %ind 194*9880d681SAndroid Build Coastguard Worker ret i32 %e 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test11(<16 x i32>%a, <16 x i32>%b) { 198*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test11: 199*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 200*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpltud %zmm1, %zmm0, %k0 201*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k0 202*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 203*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 204*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: testb %al, %al 205*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: je LBB10_2 206*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## BB#1: ## %A 207*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovaps %zmm1, %zmm0 208*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 209*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: LBB10_2: ## %B 210*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpaddd %zmm0, %zmm1, %zmm0 211*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 212*9880d681SAndroid Build Coastguard Worker; 213*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test11: 214*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 215*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpltud %zmm1, %zmm0, %k0 216*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftlw $11, %k0, %k0 217*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftrw $15, %k0, %k0 218*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %k0, %eax 219*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: testb %al, %al 220*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: je LBB10_2 221*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## BB#1: ## %A 222*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovaps %zmm1, %zmm0 223*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 224*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: LBB10_2: ## %B 225*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpaddd %zmm0, %zmm1, %zmm0 226*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 227*9880d681SAndroid Build Coastguard Worker %cmp_res = icmp ult <16 x i32> %a, %b 228*9880d681SAndroid Build Coastguard Worker %ia = extractelement <16 x i1> %cmp_res, i32 4 229*9880d681SAndroid Build Coastguard Worker br i1 %ia, label %A, label %B 230*9880d681SAndroid Build Coastguard Worker A: 231*9880d681SAndroid Build Coastguard Worker ret <16 x i32>%b 232*9880d681SAndroid Build Coastguard Worker B: 233*9880d681SAndroid Build Coastguard Worker %c = add <16 x i32>%b, %a 234*9880d681SAndroid Build Coastguard Worker ret <16 x i32>%c 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Workerdefine i64 @test12(<16 x i64>%a, <16 x i64>%b, i64 %a1, i64 %b1) { 238*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test12: 239*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 240*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtq %zmm0, %zmm2, %k0 241*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtq %zmm1, %zmm3, %k1 242*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kunpckbw %k0, %k1, %k0 243*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $15, %k0, %k0 244*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 245*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 246*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: testb %al, %al 247*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: cmoveq %rsi, %rdi 248*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movq %rdi, %rax 249*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 250*9880d681SAndroid Build Coastguard Worker; 251*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test12: 252*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 253*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtq %zmm0, %zmm2, %k0 254*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtq %zmm1, %zmm3, %k1 255*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kunpckbw %k0, %k1, %k0 256*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftlw $15, %k0, %k0 257*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftrw $15, %k0, %k0 258*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %k0, %eax 259*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: testb %al, %al 260*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: cmoveq %rsi, %rdi 261*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movq %rdi, %rax 262*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 263*9880d681SAndroid Build Coastguard Worker %cmpvector_func.i = icmp slt <16 x i64> %a, %b 264*9880d681SAndroid Build Coastguard Worker %extract24vector_func.i = extractelement <16 x i1> %cmpvector_func.i, i32 0 265*9880d681SAndroid Build Coastguard Worker %res = select i1 %extract24vector_func.i, i64 %a1, i64 %b1 266*9880d681SAndroid Build Coastguard Worker ret i64 %res 267*9880d681SAndroid Build Coastguard Worker} 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Workerdefine i16 @test13(i32 %a, i32 %b) { 270*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test13: 271*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 272*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: cmpl %esi, %edi 273*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: setb %al 274*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %eax, %k0 275*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movw $-4, %ax 276*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %eax, %k1 277*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: korw %k0, %k1, %k0 278*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 279*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 280*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 281*9880d681SAndroid Build Coastguard Worker; 282*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test13: 283*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 284*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: cmpl %esi, %edi 285*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: setb %al 286*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %eax, %k0 287*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movw $-4, %ax 288*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %eax, %k1 289*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: korw %k0, %k1, %k0 290*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %k0, %eax 291*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 292*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 293*9880d681SAndroid Build Coastguard Worker %cmp_res = icmp ult i32 %a, %b 294*9880d681SAndroid Build Coastguard Worker %maskv = insertelement <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i1 %cmp_res, i32 0 295*9880d681SAndroid Build Coastguard Worker %res = bitcast <16 x i1> %maskv to i16 296*9880d681SAndroid Build Coastguard Worker ret i16 %res 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerdefine i64 @test14(<8 x i64>%a, <8 x i64>%b, i64 %a1, i64 %b1) { 300*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test14: 301*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 302*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtq %zmm0, %zmm1, %k0 303*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $11, %k0, %k0 304*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftrw $15, %k0, %k0 305*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 306*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: testb %al, %al 307*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: cmoveq %rsi, %rdi 308*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movq %rdi, %rax 309*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 310*9880d681SAndroid Build Coastguard Worker; 311*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test14: 312*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 313*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtq %zmm0, %zmm1, %k0 314*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftlb $3, %k0, %k0 315*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftrb $7, %k0, %k0 316*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %k0, %eax 317*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: testb %al, %al 318*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: cmoveq %rsi, %rdi 319*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movq %rdi, %rax 320*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 321*9880d681SAndroid Build Coastguard Worker %cmpvector_func.i = icmp slt <8 x i64> %a, %b 322*9880d681SAndroid Build Coastguard Worker %extract24vector_func.i = extractelement <8 x i1> %cmpvector_func.i, i32 4 323*9880d681SAndroid Build Coastguard Worker %res = select i1 %extract24vector_func.i, i64 %a1, i64 %b1 324*9880d681SAndroid Build Coastguard Worker ret i64 %res 325*9880d681SAndroid Build Coastguard Worker} 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Workerdefine i16 @test15(i1 *%addr) { 328*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test15: 329*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 330*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movb (%rdi), %al 331*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: xorl %ecx, %ecx 332*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: testb %al, %al 333*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movw $-1, %ax 334*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: cmovew %cx, %ax 335*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 336*9880d681SAndroid Build Coastguard Worker; 337*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test15: 338*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 339*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movb (%rdi), %al 340*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: xorl %ecx, %ecx 341*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: testb %al, %al 342*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movw $-1, %ax 343*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: cmovew %cx, %ax 344*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 345*9880d681SAndroid Build Coastguard Worker %x = load i1 , i1 * %addr, align 1 346*9880d681SAndroid Build Coastguard Worker %x1 = insertelement <16 x i1> undef, i1 %x, i32 10 347*9880d681SAndroid Build Coastguard Worker %x2 = bitcast <16 x i1>%x1 to i16 348*9880d681SAndroid Build Coastguard Worker ret i16 %x2 349*9880d681SAndroid Build Coastguard Worker} 350*9880d681SAndroid Build Coastguard Worker 351*9880d681SAndroid Build Coastguard Workerdefine i16 @test16(i1 *%addr, i16 %a) { 352*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test16: 353*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 354*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movzbl (%rdi), %eax 355*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: andl $1, %eax 356*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %eax, %k0 357*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %esi, %k1 358*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $10, %k0, %k0 359*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: korw %k0, %k1, %k0 360*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 361*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 362*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 363*9880d681SAndroid Build Coastguard Worker; 364*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test16: 365*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 366*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movzbl (%rdi), %eax 367*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: andl $1, %eax 368*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovd %eax, %k0 369*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %esi, %k1 370*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftlw $10, %k0, %k0 371*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: korw %k0, %k1, %k0 372*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovw %k0, %eax 373*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 374*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 375*9880d681SAndroid Build Coastguard Worker %x = load i1 , i1 * %addr, align 128 376*9880d681SAndroid Build Coastguard Worker %a1 = bitcast i16 %a to <16 x i1> 377*9880d681SAndroid Build Coastguard Worker %x1 = insertelement <16 x i1> %a1, i1 %x, i32 10 378*9880d681SAndroid Build Coastguard Worker %x2 = bitcast <16 x i1>%x1 to i16 379*9880d681SAndroid Build Coastguard Worker ret i16 %x2 380*9880d681SAndroid Build Coastguard Worker} 381*9880d681SAndroid Build Coastguard Worker 382*9880d681SAndroid Build Coastguard Workerdefine i8 @test17(i1 *%addr, i8 %a) { 383*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test17: 384*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 385*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movzbl (%rdi), %eax 386*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: andl $1, %eax 387*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %eax, %k0 388*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %esi, %k1 389*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kshiftlw $4, %k0, %k0 390*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: korw %k0, %k1, %k0 391*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: kmovw %k0, %eax 392*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 393*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 394*9880d681SAndroid Build Coastguard Worker; 395*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test17: 396*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 397*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: movzbl (%rdi), %eax 398*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: andl $1, %eax 399*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovd %eax, %k0 400*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovb %esi, %k1 401*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kshiftlb $4, %k0, %k0 402*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: korb %k0, %k1, %k0 403*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: kmovb %k0, %eax 404*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 405*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 406*9880d681SAndroid Build Coastguard Worker %x = load i1 , i1 * %addr, align 128 407*9880d681SAndroid Build Coastguard Worker %a1 = bitcast i8 %a to <8 x i1> 408*9880d681SAndroid Build Coastguard Worker %x1 = insertelement <8 x i1> %a1, i1 %x, i32 4 409*9880d681SAndroid Build Coastguard Worker %x2 = bitcast <8 x i1>%x1 to i8 410*9880d681SAndroid Build Coastguard Worker ret i8 %x2 411*9880d681SAndroid Build Coastguard Worker} 412*9880d681SAndroid Build Coastguard Worker 413*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v8i64(<8 x i64> %x, i64* %dst) { 414*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v8i64: 415*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 416*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 417*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $1, %zmm0, %xmm0 418*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, (%rdi) 419*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 420*9880d681SAndroid Build Coastguard Worker; 421*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v8i64: 422*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 423*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrq $1, %xmm0, %rax 424*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti64x2 $1, %zmm0, %xmm0 425*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrq $1, %xmm0, (%rdi) 426*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 427*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <8 x i64> %x, i32 1 428*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <8 x i64> %x, i32 3 429*9880d681SAndroid Build Coastguard Worker store i64 %r2, i64* %dst, align 1 430*9880d681SAndroid Build Coastguard Worker ret i64 %r1 431*9880d681SAndroid Build Coastguard Worker} 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v4i64(<4 x i64> %x, i64* %dst) { 434*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v4i64: 435*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 436*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 437*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 438*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, (%rdi) 439*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 440*9880d681SAndroid Build Coastguard Worker; 441*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v4i64: 442*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 443*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrq $1, %xmm0, %rax 444*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti64x2 $1, %ymm0, %xmm0 445*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrq $1, %xmm0, (%rdi) 446*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 447*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <4 x i64> %x, i32 1 448*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <4 x i64> %x, i32 3 449*9880d681SAndroid Build Coastguard Worker store i64 %r2, i64* %dst, align 1 450*9880d681SAndroid Build Coastguard Worker ret i64 %r1 451*9880d681SAndroid Build Coastguard Worker} 452*9880d681SAndroid Build Coastguard Worker 453*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v2i64(<2 x i64> %x, i64* %dst) { 454*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v2i64: 455*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 456*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 457*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, (%rdi) 458*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 459*9880d681SAndroid Build Coastguard Worker; 460*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v2i64: 461*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 462*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovq %xmm0, %rax 463*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrq $1, %xmm0, (%rdi) 464*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 465*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <2 x i64> %x, i32 0 466*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <2 x i64> %x, i32 1 467*9880d681SAndroid Build Coastguard Worker store i64 %r2, i64* %dst, align 1 468*9880d681SAndroid Build Coastguard Worker ret i64 %r1 469*9880d681SAndroid Build Coastguard Worker} 470*9880d681SAndroid Build Coastguard Worker 471*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v16i32(<16 x i32> %x, i32* %dst) { 472*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v16i32: 473*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 474*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrd $1, %xmm0, %eax 475*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $1, %zmm0, %xmm0 476*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrd $1, %xmm0, (%rdi) 477*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 478*9880d681SAndroid Build Coastguard Worker; 479*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v16i32: 480*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 481*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrd $1, %xmm0, %eax 482*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %zmm0, %xmm0 483*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrd $1, %xmm0, (%rdi) 484*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 485*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <16 x i32> %x, i32 1 486*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <16 x i32> %x, i32 5 487*9880d681SAndroid Build Coastguard Worker store i32 %r2, i32* %dst, align 1 488*9880d681SAndroid Build Coastguard Worker ret i32 %r1 489*9880d681SAndroid Build Coastguard Worker} 490*9880d681SAndroid Build Coastguard Worker 491*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v8i32(<8 x i32> %x, i32* %dst) { 492*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v8i32: 493*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 494*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrd $1, %xmm0, %eax 495*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 496*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrd $1, %xmm0, (%rdi) 497*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 498*9880d681SAndroid Build Coastguard Worker; 499*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v8i32: 500*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 501*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrd $1, %xmm0, %eax 502*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm0 503*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrd $1, %xmm0, (%rdi) 504*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 505*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <8 x i32> %x, i32 1 506*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <8 x i32> %x, i32 5 507*9880d681SAndroid Build Coastguard Worker store i32 %r2, i32* %dst, align 1 508*9880d681SAndroid Build Coastguard Worker ret i32 %r1 509*9880d681SAndroid Build Coastguard Worker} 510*9880d681SAndroid Build Coastguard Worker 511*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v4i32(<4 x i32> %x, i32* %dst) { 512*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v4i32: 513*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 514*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrd $1, %xmm0, %eax 515*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrd $3, %xmm0, (%rdi) 516*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 517*9880d681SAndroid Build Coastguard Worker; 518*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v4i32: 519*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 520*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrd $1, %xmm0, %eax 521*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrd $3, %xmm0, (%rdi) 522*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 523*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <4 x i32> %x, i32 1 524*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <4 x i32> %x, i32 3 525*9880d681SAndroid Build Coastguard Worker store i32 %r2, i32* %dst, align 1 526*9880d681SAndroid Build Coastguard Worker ret i32 %r1 527*9880d681SAndroid Build Coastguard Worker} 528*9880d681SAndroid Build Coastguard Worker 529*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v32i16(<32 x i16> %x, i16* %dst) { 530*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v32i16: 531*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 532*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrw $1, %xmm0, %eax 533*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 534*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrw $1, %xmm0, (%rdi) 535*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 536*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 537*9880d681SAndroid Build Coastguard Worker; 538*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v32i16: 539*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 540*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrw $1, %xmm0, %eax 541*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %zmm0, %xmm0 542*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrw $1, %xmm0, (%rdi) 543*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 544*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 545*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <32 x i16> %x, i32 1 546*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <32 x i16> %x, i32 9 547*9880d681SAndroid Build Coastguard Worker store i16 %r2, i16* %dst, align 1 548*9880d681SAndroid Build Coastguard Worker ret i16 %r1 549*9880d681SAndroid Build Coastguard Worker} 550*9880d681SAndroid Build Coastguard Worker 551*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v16i16(<16 x i16> %x, i16* %dst) { 552*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v16i16: 553*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 554*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrw $1, %xmm0, %eax 555*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 556*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrw $1, %xmm0, (%rdi) 557*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 558*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 559*9880d681SAndroid Build Coastguard Worker; 560*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v16i16: 561*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 562*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrw $1, %xmm0, %eax 563*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm0 564*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrw $1, %xmm0, (%rdi) 565*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 566*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 567*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <16 x i16> %x, i32 1 568*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <16 x i16> %x, i32 9 569*9880d681SAndroid Build Coastguard Worker store i16 %r2, i16* %dst, align 1 570*9880d681SAndroid Build Coastguard Worker ret i16 %r1 571*9880d681SAndroid Build Coastguard Worker} 572*9880d681SAndroid Build Coastguard Worker 573*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v8i16(<8 x i16> %x, i16* %dst) { 574*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v8i16: 575*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 576*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrw $1, %xmm0, %eax 577*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrw $3, %xmm0, (%rdi) 578*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 579*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 580*9880d681SAndroid Build Coastguard Worker; 581*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v8i16: 582*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 583*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrw $1, %xmm0, %eax 584*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrw $3, %xmm0, (%rdi) 585*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill> 586*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 587*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <8 x i16> %x, i32 1 588*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <8 x i16> %x, i32 3 589*9880d681SAndroid Build Coastguard Worker store i16 %r2, i16* %dst, align 1 590*9880d681SAndroid Build Coastguard Worker ret i16 %r1 591*9880d681SAndroid Build Coastguard Worker} 592*9880d681SAndroid Build Coastguard Worker 593*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v64i8(<64 x i8> %x, i8* %dst) { 594*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v64i8: 595*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 596*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrb $1, %xmm0, %eax 597*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 598*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrb $1, %xmm0, (%rdi) 599*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 600*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 601*9880d681SAndroid Build Coastguard Worker; 602*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v64i8: 603*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 604*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrb $1, %xmm0, %eax 605*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %zmm0, %xmm0 606*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrb $1, %xmm0, (%rdi) 607*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 608*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 609*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <64 x i8> %x, i32 1 610*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <64 x i8> %x, i32 17 611*9880d681SAndroid Build Coastguard Worker store i8 %r2, i8* %dst, align 1 612*9880d681SAndroid Build Coastguard Worker ret i8 %r1 613*9880d681SAndroid Build Coastguard Worker} 614*9880d681SAndroid Build Coastguard Worker 615*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v32i8(<32 x i8> %x, i8* %dst) { 616*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v32i8: 617*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 618*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrb $1, %xmm0, %eax 619*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 620*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrb $1, %xmm0, (%rdi) 621*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 622*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 623*9880d681SAndroid Build Coastguard Worker; 624*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v32i8: 625*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 626*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrb $1, %xmm0, %eax 627*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm0 628*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrb $1, %xmm0, (%rdi) 629*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 630*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 631*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <32 x i8> %x, i32 1 632*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <32 x i8> %x, i32 17 633*9880d681SAndroid Build Coastguard Worker store i8 %r2, i8* %dst, align 1 634*9880d681SAndroid Build Coastguard Worker ret i8 %r1 635*9880d681SAndroid Build Coastguard Worker} 636*9880d681SAndroid Build Coastguard Worker 637*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v16i8(<16 x i8> %x, i8* %dst) { 638*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v16i8: 639*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 640*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrb $1, %xmm0, %eax 641*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrb $3, %xmm0, (%rdi) 642*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 643*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 644*9880d681SAndroid Build Coastguard Worker; 645*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v16i8: 646*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 647*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrb $1, %xmm0, %eax 648*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpextrb $3, %xmm0, (%rdi) 649*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill> 650*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 651*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <16 x i8> %x, i32 1 652*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <16 x i8> %x, i32 3 653*9880d681SAndroid Build Coastguard Worker store i8 %r2, i8* %dst, align 1 654*9880d681SAndroid Build Coastguard Worker ret i8 %r1 655*9880d681SAndroid Build Coastguard Worker} 656*9880d681SAndroid Build Coastguard Worker 657*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @insert_v8i64(<8 x i64> %x, i64 %y , i64* %ptr) { 658*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v8i64: 659*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 660*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $1, (%rsi), %xmm0, %xmm1 661*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 662*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $1, %zmm0, %xmm1 663*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $1, %rdi, %xmm1, %xmm1 664*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti32x4 $1, %xmm1, %zmm0, %zmm0 665*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 666*9880d681SAndroid Build Coastguard Worker; 667*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v8i64: 668*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 669*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $1, (%rsi), %xmm0, %xmm1 670*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti64x2 $0, %xmm1, %zmm0, %zmm0 671*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti64x2 $1, %zmm0, %xmm1 672*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $1, %rdi, %xmm1, %xmm1 673*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti64x2 $1, %xmm1, %zmm0, %zmm0 674*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 675*9880d681SAndroid Build Coastguard Worker %val = load i64, i64* %ptr 676*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <8 x i64> %x, i64 %val, i32 1 677*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <8 x i64> %r1, i64 %y, i32 3 678*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %r2 679*9880d681SAndroid Build Coastguard Worker} 680*9880d681SAndroid Build Coastguard Worker 681*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_v4i64(<4 x i64> %x, i64 %y , i64* %ptr) { 682*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v4i64: 683*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 684*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $1, (%rsi), %xmm0, %xmm1 685*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 686*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1 687*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $1, %rdi, %xmm1, %xmm1 688*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 689*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 690*9880d681SAndroid Build Coastguard Worker; 691*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v4i64: 692*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 693*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $1, (%rsi), %xmm0, %xmm1 694*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 695*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti64x2 $1, %ymm0, %xmm1 696*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $1, %rdi, %xmm1, %xmm1 697*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti64x2 $1, %xmm1, %ymm0, %ymm0 698*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 699*9880d681SAndroid Build Coastguard Worker %val = load i64, i64* %ptr 700*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <4 x i64> %x, i64 %val, i32 1 701*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <4 x i64> %r1, i64 %y, i32 3 702*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %r2 703*9880d681SAndroid Build Coastguard Worker} 704*9880d681SAndroid Build Coastguard Worker 705*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_v2i64(<2 x i64> %x, i64 %y , i64* %ptr) { 706*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v2i64: 707*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 708*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $1, (%rsi), %xmm0, %xmm0 709*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $3, %rdi, %xmm0, %xmm0 710*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 711*9880d681SAndroid Build Coastguard Worker; 712*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v2i64: 713*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 714*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $1, (%rsi), %xmm0, %xmm0 715*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $3, %rdi, %xmm0, %xmm0 716*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 717*9880d681SAndroid Build Coastguard Worker %val = load i64, i64* %ptr 718*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <2 x i64> %x, i64 %val, i32 1 719*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <2 x i64> %r1, i64 %y, i32 3 720*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %r2 721*9880d681SAndroid Build Coastguard Worker} 722*9880d681SAndroid Build Coastguard Worker 723*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @insert_v16i32(<16 x i32> %x, i32 %y, i32* %ptr) { 724*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v16i32: 725*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 726*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrd $1, (%rsi), %xmm0, %xmm1 727*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 728*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $1, %zmm0, %xmm1 729*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrd $1, %edi, %xmm1, %xmm1 730*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti32x4 $1, %xmm1, %zmm0, %zmm0 731*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 732*9880d681SAndroid Build Coastguard Worker; 733*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v16i32: 734*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 735*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrd $1, (%rsi), %xmm0, %xmm1 736*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 737*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %zmm0, %xmm1 738*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrd $1, %edi, %xmm1, %xmm1 739*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $1, %xmm1, %zmm0, %zmm0 740*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 741*9880d681SAndroid Build Coastguard Worker %val = load i32, i32* %ptr 742*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <16 x i32> %x, i32 %val, i32 1 743*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <16 x i32> %r1, i32 %y, i32 5 744*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r2 745*9880d681SAndroid Build Coastguard Worker} 746*9880d681SAndroid Build Coastguard Worker 747*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @insert_v8i32(<8 x i32> %x, i32 %y, i32* %ptr) { 748*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v8i32: 749*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 750*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrd $1, (%rsi), %xmm0, %xmm1 751*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 752*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1 753*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrd $1, %edi, %xmm1, %xmm1 754*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 755*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 756*9880d681SAndroid Build Coastguard Worker; 757*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v8i32: 758*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 759*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrd $1, (%rsi), %xmm0, %xmm1 760*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 761*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm1 762*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrd $1, %edi, %xmm1, %xmm1 763*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 764*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 765*9880d681SAndroid Build Coastguard Worker %val = load i32, i32* %ptr 766*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <8 x i32> %x, i32 %val, i32 1 767*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <8 x i32> %r1, i32 %y, i32 5 768*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %r2 769*9880d681SAndroid Build Coastguard Worker} 770*9880d681SAndroid Build Coastguard Worker 771*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @insert_v4i32(<4 x i32> %x, i32 %y, i32* %ptr) { 772*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v4i32: 773*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 774*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrd $1, (%rsi), %xmm0, %xmm0 775*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrd $3, %edi, %xmm0, %xmm0 776*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 777*9880d681SAndroid Build Coastguard Worker; 778*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v4i32: 779*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 780*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrd $1, (%rsi), %xmm0, %xmm0 781*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrd $3, %edi, %xmm0, %xmm0 782*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 783*9880d681SAndroid Build Coastguard Worker %val = load i32, i32* %ptr 784*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <4 x i32> %x, i32 %val, i32 1 785*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <4 x i32> %r1, i32 %y, i32 3 786*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r2 787*9880d681SAndroid Build Coastguard Worker} 788*9880d681SAndroid Build Coastguard Worker 789*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @insert_v32i16(<32 x i16> %x, i16 %y, i16* %ptr) { 790*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v32i16: 791*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 792*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrw $1, (%rsi), %xmm0, %xmm2 793*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7] 794*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm2 795*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrw $1, %edi, %xmm2, %xmm2 796*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 797*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 798*9880d681SAndroid Build Coastguard Worker; 799*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v32i16: 800*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 801*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrw $1, (%rsi), %xmm0, %xmm1 802*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 803*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %zmm0, %xmm1 804*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrw $1, %edi, %xmm1, %xmm1 805*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $1, %xmm1, %zmm0, %zmm0 806*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 807*9880d681SAndroid Build Coastguard Worker %val = load i16, i16* %ptr 808*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <32 x i16> %x, i16 %val, i32 1 809*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <32 x i16> %r1, i16 %y, i32 9 810*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %r2 811*9880d681SAndroid Build Coastguard Worker} 812*9880d681SAndroid Build Coastguard Worker 813*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @insert_v16i16(<16 x i16> %x, i16 %y, i16* %ptr) { 814*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v16i16: 815*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 816*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrw $1, (%rsi), %xmm0, %xmm1 817*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 818*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1 819*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrw $1, %edi, %xmm1, %xmm1 820*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 821*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 822*9880d681SAndroid Build Coastguard Worker; 823*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v16i16: 824*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 825*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrw $1, (%rsi), %xmm0, %xmm1 826*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 827*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm1 828*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrw $1, %edi, %xmm1, %xmm1 829*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 830*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 831*9880d681SAndroid Build Coastguard Worker %val = load i16, i16* %ptr 832*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <16 x i16> %x, i16 %val, i32 1 833*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <16 x i16> %r1, i16 %y, i32 9 834*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %r2 835*9880d681SAndroid Build Coastguard Worker} 836*9880d681SAndroid Build Coastguard Worker 837*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @insert_v8i16(<8 x i16> %x, i16 %y, i16* %ptr) { 838*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v8i16: 839*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 840*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrw $1, (%rsi), %xmm0, %xmm0 841*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrw $5, %edi, %xmm0, %xmm0 842*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 843*9880d681SAndroid Build Coastguard Worker; 844*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v8i16: 845*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 846*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrw $1, (%rsi), %xmm0, %xmm0 847*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrw $5, %edi, %xmm0, %xmm0 848*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 849*9880d681SAndroid Build Coastguard Worker %val = load i16, i16* %ptr 850*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <8 x i16> %x, i16 %val, i32 1 851*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <8 x i16> %r1, i16 %y, i32 5 852*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r2 853*9880d681SAndroid Build Coastguard Worker} 854*9880d681SAndroid Build Coastguard Worker 855*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @insert_v64i8(<64 x i8> %x, i8 %y, i8* %ptr) { 856*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v64i8: 857*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 858*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, (%rsi), %xmm0, %xmm2 859*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7] 860*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm1, %xmm2 861*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $2, %edi, %xmm2, %xmm2 862*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1 863*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 864*9880d681SAndroid Build Coastguard Worker; 865*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v64i8: 866*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 867*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrb $1, (%rsi), %xmm0, %xmm1 868*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 869*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $3, %zmm0, %xmm1 870*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrb $2, %edi, %xmm1, %xmm1 871*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $3, %xmm1, %zmm0, %zmm0 872*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 873*9880d681SAndroid Build Coastguard Worker %val = load i8, i8* %ptr 874*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <64 x i8> %x, i8 %val, i32 1 875*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <64 x i8> %r1, i8 %y, i32 50 876*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %r2 877*9880d681SAndroid Build Coastguard Worker} 878*9880d681SAndroid Build Coastguard Worker 879*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @insert_v32i8(<32 x i8> %x, i8 %y, i8* %ptr) { 880*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v32i8: 881*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 882*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, (%rsi), %xmm0, %xmm1 883*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 884*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1 885*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $1, %edi, %xmm1, %xmm1 886*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 887*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 888*9880d681SAndroid Build Coastguard Worker; 889*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v32i8: 890*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 891*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrb $1, (%rsi), %xmm0, %xmm1 892*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7] 893*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm1 894*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrb $1, %edi, %xmm1, %xmm1 895*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 896*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 897*9880d681SAndroid Build Coastguard Worker %val = load i8, i8* %ptr 898*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <32 x i8> %x, i8 %val, i32 1 899*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <32 x i8> %r1, i8 %y, i32 17 900*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %r2 901*9880d681SAndroid Build Coastguard Worker} 902*9880d681SAndroid Build Coastguard Worker 903*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @insert_v16i8(<16 x i8> %x, i8 %y, i8* %ptr) { 904*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v16i8: 905*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 906*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $3, (%rsi), %xmm0, %xmm0 907*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $10, %edi, %xmm0, %xmm0 908*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 909*9880d681SAndroid Build Coastguard Worker; 910*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v16i8: 911*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 912*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrb $3, (%rsi), %xmm0, %xmm0 913*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrb $10, %edi, %xmm0, %xmm0 914*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 915*9880d681SAndroid Build Coastguard Worker %val = load i8, i8* %ptr 916*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <16 x i8> %x, i8 %val, i32 3 917*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <16 x i8> %r1, i8 %y, i32 10 918*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r2 919*9880d681SAndroid Build Coastguard Worker} 920*9880d681SAndroid Build Coastguard Worker 921*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_insert_128_v8i64(<8 x i64> %x, i64 %y) { 922*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v8i64: 923*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 924*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrq $1, %rdi, %xmm0, %xmm1 925*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 926*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 927*9880d681SAndroid Build Coastguard Worker; 928*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v8i64: 929*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 930*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrq $1, %rdi, %xmm0, %xmm1 931*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti64x2 $0, %xmm1, %zmm0, %zmm0 932*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 933*9880d681SAndroid Build Coastguard Worker %r = insertelement <8 x i64> %x, i64 %y, i32 1 934*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %r 935*9880d681SAndroid Build Coastguard Worker} 936*9880d681SAndroid Build Coastguard Worker 937*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_insert_128_v16i32(<16 x i32> %x, i32 %y) { 938*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v16i32: 939*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 940*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrd $1, %edi, %xmm0, %xmm1 941*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 942*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 943*9880d681SAndroid Build Coastguard Worker; 944*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v16i32: 945*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 946*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrd $1, %edi, %xmm0, %xmm1 947*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0 948*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 949*9880d681SAndroid Build Coastguard Worker %r = insertelement <16 x i32> %x, i32 %y, i32 1 950*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %r 951*9880d681SAndroid Build Coastguard Worker} 952*9880d681SAndroid Build Coastguard Worker 953*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_insert_128_v8f64(<8 x double> %x, double %y) { 954*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v8f64: 955*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 956*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm0[0],xmm1[0] 957*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm0 958*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 959*9880d681SAndroid Build Coastguard Worker; 960*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v8f64: 961*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 962*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm0[0],xmm1[0] 963*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf64x2 $0, %xmm1, %zmm0, %zmm0 964*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 965*9880d681SAndroid Build Coastguard Worker %r = insertelement <8 x double> %x, double %y, i32 1 966*9880d681SAndroid Build Coastguard Worker ret <8 x double> %r 967*9880d681SAndroid Build Coastguard Worker} 968*9880d681SAndroid Build Coastguard Worker 969*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_insert_128_v16f32(<16 x float> %x, float %y) { 970*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v16f32: 971*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 972*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3] 973*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm0 974*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 975*9880d681SAndroid Build Coastguard Worker; 976*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v16f32: 977*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 978*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3] 979*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm0 980*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 981*9880d681SAndroid Build Coastguard Worker %r = insertelement <16 x float> %x, float %y, i32 1 982*9880d681SAndroid Build Coastguard Worker ret <16 x float> %r 983*9880d681SAndroid Build Coastguard Worker} 984*9880d681SAndroid Build Coastguard Worker 985*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_insert_128_v16i16(<16 x i16> %x, i16 %y) { 986*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v16i16: 987*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 988*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1 989*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrw $2, %edi, %xmm1, %xmm1 990*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 991*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 992*9880d681SAndroid Build Coastguard Worker; 993*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v16i16: 994*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 995*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm1 996*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrw $2, %edi, %xmm1, %xmm1 997*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 998*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 999*9880d681SAndroid Build Coastguard Worker %r = insertelement <16 x i16> %x, i16 %y, i32 10 1000*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %r 1001*9880d681SAndroid Build Coastguard Worker} 1002*9880d681SAndroid Build Coastguard Worker 1003*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_insert_128_v32i8(<32 x i8> %x, i8 %y) { 1004*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v32i8: 1005*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 1006*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1 1007*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpinsrb $4, %edi, %xmm1, %xmm1 1008*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 1009*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 1010*9880d681SAndroid Build Coastguard Worker; 1011*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v32i8: 1012*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 1013*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm1 1014*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpinsrb $4, %edi, %xmm1, %xmm1 1015*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 1016*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 1017*9880d681SAndroid Build Coastguard Worker %r = insertelement <32 x i8> %x, i8 %y, i32 20 1018*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %r 1019*9880d681SAndroid Build Coastguard Worker} 1020