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=x86_64-unknown -mattr=+avx512bw | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64) 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.vpermilvar.ps.512(<16 x float>, <16 x i32>, <16 x float>, i16) 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.permvar.df.512(<8 x double>, <8 x i64>, <8 x double>, i8) 9*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 10*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.permvar.si.512(<16 x i32>, <16 x i32>, <16 x i32>, i16) 11*9880d681SAndroid Build Coastguard Workerdeclare <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16>, <32 x i16>, <32 x i16>, i32) 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64>, <8 x double>, <8 x double>, i8) 14*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32>, <16 x float>, <16 x float>, i16) 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 17*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.maskz.vpermt2var.d.512(<16 x i32>, <16 x i32>, <16 x i32>, i16) 18*9880d681SAndroid Build Coastguard Workerdeclare <32 x i16> @llvm.x86.avx512.maskz.vpermt2var.hi.512(<32 x i16>, <32 x i16>, <32 x i16>, i32) 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_permvar_8f64_identity(<8 x double> %x0, <8 x double> %x1) { 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8f64_identity: 22*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 24*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x double> @llvm.x86.avx512.mask.permvar.df.512(<8 x double> %x0, <8 x i64> <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x double> %x1, i8 -1) 25*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x double> @llvm.x86.avx512.mask.permvar.df.512(<8 x double> %res0, <8 x i64> <i64 7, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x double> %res0, i8 -1) 26*9880d681SAndroid Build Coastguard Worker ret <8 x double> %res1 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_permvar_8f64_identity_mask(<8 x double> %x0, <8 x double> %x1, i8 %m) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8f64_identity_mask: 30*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm2 = [7,6,5,4,3,2,1,0] 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermpd %zmm0, %zmm2, %zmm1 {%k1} 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm0 = [7,14,5,12,3,10,1,8] 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermpd %zmm1, %zmm0, %zmm1 {%k1} 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x double> @llvm.x86.avx512.mask.permvar.df.512(<8 x double> %x0, <8 x i64> <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x double> %x1, i8 %m) 39*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x double> @llvm.x86.avx512.mask.permvar.df.512(<8 x double> %res0, <8 x i64> <i64 7, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x double> %res0, i8 %m) 40*9880d681SAndroid Build Coastguard Worker ret <8 x double> %res1 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @combine_permvar_8i64_identity(<8 x i64> %x0, <8 x i64> %x1) { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8i64_identity: 45*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 47*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64> %x0, <8 x i64> <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x i64> %x1, i8 -1) 48*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64> %res0, <8 x i64> <i64 7, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x i64> %res0, i8 -1) 49*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %res1 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @combine_permvar_8i64_identity_mask(<8 x i64> %x0, <8 x i64> %x1, i8 %m) { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8i64_identity_mask: 53*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm2 = [7,6,5,4,3,2,1,0] 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq %zmm0, %zmm2, %zmm1 {%k1} 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm0 = [7,14,5,12,3,10,1,8] 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq %zmm1, %zmm0, %zmm1 {%k1} 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 61*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64> %x0, <8 x i64> <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x i64> %x1, i8 %m) 62*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64> %res0, <8 x i64> <i64 7, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x i64> %res0, i8 %m) 63*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %res1 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_vpermt2var_8f64_identity(<8 x double> %x0, <8 x double> %x1) { 67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_8f64_identity: 68*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 70*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64> <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x double> %x0, <8 x double> %x1, i8 -1) 71*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64> <i64 7, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x double> %res0, <8 x double> %res0, i8 -1) 72*9880d681SAndroid Build Coastguard Worker ret <8 x double> %res1 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_vpermt2var_8f64_identity_mask(<8 x double> %x0, <8 x double> %x1, i8 %m) { 75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_8f64_identity_mask: 76*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm2 = [7,6,5,4,3,2,1,0] 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0 {%k1} {z} 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm1 = [7,14,5,12,3,10,1,8] 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2pd %zmm0, %zmm1, %zmm0 {%k1} {z} 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 83*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64> <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x double> %x0, <8 x double> %x1, i8 %m) 84*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64> <i64 7, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x double> %res0, <8 x double> %res0, i8 %m) 85*9880d681SAndroid Build Coastguard Worker ret <8 x double> %res1 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_vpermt2var_8f64_movddup(<8 x double> %x0, <8 x double> %x1) { 89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_8f64_movddup: 90*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6] 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 93*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64> <i64 0, i64 0, i64 2, i64 2, i64 4, i64 4, i64 undef, i64 undef>, <8 x double> %x0, <8 x double> %x1, i8 -1) 94*9880d681SAndroid Build Coastguard Worker ret <8 x double> %res0 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_vpermt2var_8f64_movddup_load(<8 x double> *%p0, <8 x double> %x1) { 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_8f64_movddup_load: 98*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovddup {{.*#+}} zmm0 = mem[0,0,2,2,4,4,6,6] 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 101*9880d681SAndroid Build Coastguard Worker %x0 = load <8 x double>, <8 x double> *%p0 102*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64> <i64 0, i64 0, i64 2, i64 2, i64 4, i64 4, i64 6, i64 6>, <8 x double> %x0, <8 x double> %x1, i8 -1) 103*9880d681SAndroid Build Coastguard Worker ret <8 x double> %res0 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_vpermt2var_8f64_movddup_mask(<8 x double> %x0, <8 x double> %x1, i8 %m) { 106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_8f64_movddup_mask: 107*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6] 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 111*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x double> @llvm.x86.avx512.maskz.vpermt2var.pd.512(<8 x i64> <i64 0, i64 0, i64 2, i64 2, i64 4, i64 4, i64 6, i64 6>, <8 x double> %x0, <8 x double> %x1, i8 %m) 112*9880d681SAndroid Build Coastguard Worker ret <8 x double> %res0 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @combine_vpermt2var_8i64_identity(<8 x i64> %x0, <8 x i64> %x1) { 116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_8i64_identity: 117*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 119*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64> <i64 undef, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x i64> %x0, <8 x i64> %x1, i8 -1) 120*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64> <i64 undef, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x i64> %res0, <8 x i64> %res0, i8 -1) 121*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %res1 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @combine_vpermt2var_8i64_identity_mask(<8 x i64> %x0, <8 x i64> %x1, i8 %m) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_8i64_identity_mask: 125*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm2 = [7,6,5,4,3,2,1,0] 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2q %zmm1, %zmm2, %zmm0 {%k1} {z} 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa64 {{.*#+}} zmm1 = [7,14,5,12,3,10,1,8] 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2q %zmm0, %zmm1, %zmm0 {%k1} {z} 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 132*9880d681SAndroid Build Coastguard Worker %res0 = call <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64> <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>, <8 x i64> %x0, <8 x i64> %x1, i8 %m) 133*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64> <i64 7, i64 14, i64 5, i64 12, i64 3, i64 10, i64 1, i64 8>, <8 x i64> %res0, <8 x i64> %res0, i8 %m) 134*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %res1 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_identity(<16 x float> %x0, <16 x float> %x1) { 138*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_identity: 139*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 141*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>, <16 x float> %x0, <16 x float> %x1, i16 -1) 142*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 15, i32 30, i32 13, i32 28, i32 11, i32 26, i32 9, i32 24, i32 7, i32 22, i32 5, i32 20, i32 3, i32 18, i32 1, i32 16>, <16 x float> %res0, <16 x float> %res0, i16 -1) 143*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res1 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_identity_mask(<16 x float> %x0, <16 x float> %x1, i16 %m) { 146*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_identity_mask: 147*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm2 = [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] 150*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2ps %zmm1, %zmm2, %zmm0 {%k1} {z} 151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm1 = [15,30,13,28,11,26,9,24,7,22,5,20,3,18,1,16] 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2ps %zmm0, %zmm1, %zmm0 {%k1} {z} 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 154*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>, <16 x float> %x0, <16 x float> %x1, i16 %m) 155*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 15, i32 30, i32 13, i32 28, i32 11, i32 26, i32 9, i32 24, i32 7, i32 22, i32 5, i32 20, i32 3, i32 18, i32 1, i32 16>, <16 x float> %res0, <16 x float> %res0, i16 %m) 156*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res1 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovddup(<16 x float> %x0, <16 x float> %x1) { 160*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovddup: 161*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm2 = [0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13] 163*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2ps %zmm1, %zmm2, %zmm0 164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 165*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5, i32 8, i32 9, i32 8, i32 9, i32 12, i32 13, i32 12, i32 13>, <16 x float> %x0, <16 x float> %x1, i16 -1) 166*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovddup_load(<16 x float> *%p0, <16 x float> %x1) { 169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovddup_load: 170*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps (%rdi), %zmm1 172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm2 = [0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13] 173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2ps %zmm0, %zmm2, %zmm1 174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 176*9880d681SAndroid Build Coastguard Worker %x0 = load <16 x float>, <16 x float> *%p0 177*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5, i32 8, i32 9, i32 8, i32 9, i32 12, i32 13, i32 12, i32 13>, <16 x float> %x0, <16 x float> %x1, i16 -1) 178*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 179*9880d681SAndroid Build Coastguard Worker} 180*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovddup_mask(<16 x float> %x0, <16 x float> %x1, i16 %m) { 181*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovddup_mask: 182*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm2 = [0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13] 185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2ps %zmm1, %zmm2, %zmm0 {%k1} {z} 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 187*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5, i32 8, i32 9, i32 8, i32 9, i32 12, i32 13, i32 12, i32 13>, <16 x float> %x0, <16 x float> %x1, i16 %m) 188*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovddup_mask_load(<16 x float> *%p0, <16 x float> %x1, i16 %m) { 191*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovddup_mask_load: 192*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %esi, %k1 194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps (%rdi), %zmm1 195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm2 = [0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13] 196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2ps %zmm0, %zmm2, %zmm1 {%k1} {z} 197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 199*9880d681SAndroid Build Coastguard Worker %x0 = load <16 x float>, <16 x float> *%p0 200*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5, i32 8, i32 9, i32 8, i32 9, i32 12, i32 13, i32 12, i32 13>, <16 x float> %x0, <16 x float> %x1, i16 %m) 201*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovshdup(<16 x float> %x0, <16 x float> %x1) { 205*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovshdup: 206*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovshdup {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15] 208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 209*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>, <16 x float> %x0, <16 x float> %x1, i16 -1) 210*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovshdup_load(<16 x float> *%p0, <16 x float> %x1) { 213*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovshdup_load: 214*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovshdup {{.*#+}} zmm0 = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15] 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 217*9880d681SAndroid Build Coastguard Worker %x0 = load <16 x float>, <16 x float> *%p0 218*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>, <16 x float> %x0, <16 x float> %x1, i16 -1) 219*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovshdup_mask(<16 x float> %x0, <16 x float> %x1, i16 %m) { 222*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovshdup_mask: 223*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15] 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 227*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>, <16 x float> %x0, <16 x float> %x1, i16 %m) 228*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovsldup(<16 x float> %x0, <16 x float> %x1) { 232*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovsldup: 233*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovsldup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14] 235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 236*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>, <16 x float> %x0, <16 x float> %x1, i16 -1) 237*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 238*9880d681SAndroid Build Coastguard Worker} 239*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovsldup_load(<16 x float> *%p0, <16 x float> %x1) { 240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovsldup_load: 241*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovsldup {{.*#+}} zmm0 = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14] 243*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 244*9880d681SAndroid Build Coastguard Worker %x0 = load <16 x float>, <16 x float> *%p0 245*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>, <16 x float> %x0, <16 x float> %x1, i16 -1) 246*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 247*9880d681SAndroid Build Coastguard Worker} 248*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovsldup_mask(<16 x float> %x0, <16 x float> %x1, i16 %m) { 249*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovsldup_mask: 250*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 251*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14] 253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 254*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 undef, i32 0, i32 undef, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>, <16 x float> %x0, <16 x float> %x1, i16 %m) 255*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 256*9880d681SAndroid Build Coastguard Worker} 257*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vmovsldup_mask_load(<16 x float> *%p0, <16 x float> %x1, i16 %m) { 258*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vmovsldup_mask_load: 259*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %esi, %k1 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovsldup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14] 262*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 263*9880d681SAndroid Build Coastguard Worker %x0 = load <16 x float>, <16 x float> *%p0 264*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 undef, i32 0, i32 undef, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>, <16 x float> %x0, <16 x float> %x1, i16 %m) 265*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vpermilps(<16 x float> %x0, <16 x float> %x1) { 269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vpermilps: 270*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 271*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermilps {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12] 272*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 273*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>, <16 x float> %x0, <16 x float> %x1, i16 -1) 274*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vpermilps_load(<16 x float> *%p0, <16 x float> %x1) { 277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vpermilps_load: 278*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermilps {{.*#+}} zmm0 = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12] 280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 281*9880d681SAndroid Build Coastguard Worker %x0 = load <16 x float>, <16 x float> *%p0 282*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>, <16 x float> %x0, <16 x float> %x1, i16 -1) 283*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vpermilps_mask(<16 x float> %x0, <16 x float> %x1, i16 %m) { 286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vpermilps_mask: 287*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermilps {{.*#+}} zmm0 {%k1} {z} = zmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12] 290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 291*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>, <16 x float> %x0, <16 x float> %x1, i16 %m) 292*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermt2var_16f32_vpermilps_mask_load(<16 x float> *%p0, <16 x float> %x1, i16 %m) { 295*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16f32_vpermilps_mask_load: 296*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %esi, %k1 298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermilps {{.*#+}} zmm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12] 299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 300*9880d681SAndroid Build Coastguard Worker %x0 = load <16 x float>, <16 x float> *%p0 301*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.maskz.vpermt2var.ps.512(<16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>, <16 x float> %x0, <16 x float> %x1, i16 %m) 302*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res0 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @combine_vpermt2var_16i32_identity(<16 x i32> %x0, <16 x i32> %x1) { 306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16i32_identity: 307*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 309*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i32> @llvm.x86.avx512.maskz.vpermt2var.d.512(<16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 undef>, <16 x i32> %x0, <16 x i32> %x1, i16 -1) 310*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x i32> @llvm.x86.avx512.maskz.vpermt2var.d.512(<16 x i32> <i32 15, i32 30, i32 13, i32 28, i32 undef, i32 26, i32 9, i32 24, i32 7, i32 22, i32 5, i32 20, i32 3, i32 18, i32 1, i32 16>, <16 x i32> %res0, <16 x i32> %res0, i16 -1) 311*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %res1 312*9880d681SAndroid Build Coastguard Worker} 313*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @combine_vpermt2var_16i32_identity_mask(<16 x i32> %x0, <16 x i32> %x1, i16 %m) { 314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_16i32_identity_mask: 315*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 316*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm2 = [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2d %zmm1, %zmm2, %zmm0 {%k1} {z} 319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa32 {{.*#+}} zmm1 = [15,30,13,28,11,26,9,24,7,22,5,20,3,18,1,16] 320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2d %zmm0, %zmm1, %zmm0 {%k1} {z} 321*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 322*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i32> @llvm.x86.avx512.maskz.vpermt2var.d.512(<16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>, <16 x i32> %x0, <16 x i32> %x1, i16 %m) 323*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x i32> @llvm.x86.avx512.maskz.vpermt2var.d.512(<16 x i32> <i32 15, i32 30, i32 13, i32 28, i32 11, i32 26, i32 9, i32 24, i32 7, i32 22, i32 5, i32 20, i32 3, i32 18, i32 1, i32 16>, <16 x i32> %res0, <16 x i32> %res0, i16 %m) 324*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %res1 325*9880d681SAndroid Build Coastguard Worker} 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @combine_vpermt2var_32i16_identity(<32 x i16> %x0, <32 x i16> %x1) { 328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_32i16_identity: 329*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 330*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 331*9880d681SAndroid Build Coastguard Worker %res0 = call <32 x i16> @llvm.x86.avx512.maskz.vpermt2var.hi.512(<32 x i16> <i16 31, i16 30, i16 29, i16 28, i16 27, i16 26, i16 25, i16 24, i16 23, i16 22, i16 21, i16 20, i16 19, i16 18, i16 17, i16 16, i16 15, i16 14, i16 13, i16 12, i16 11, i16 10, i16 9, i16 8, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, <32 x i16> %x0, <32 x i16> %x1, i32 -1) 332*9880d681SAndroid Build Coastguard Worker %res1 = call <32 x i16> @llvm.x86.avx512.maskz.vpermt2var.hi.512(<32 x i16> <i16 63, i16 30, i16 61, i16 28, i16 59, i16 26, i16 57, i16 24, i16 55, i16 22, i16 53, i16 20, i16 51, i16 18, i16 49, i16 16, i16 47, i16 46, i16 13, i16 44, i16 11, i16 42, i16 9, i16 40, i16 7, i16 38, i16 5, i16 36, i16 3, i16 34, i16 1, i16 32>, <32 x i16> %res0, <32 x i16> %res0, i32 -1) 333*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %res1 334*9880d681SAndroid Build Coastguard Worker} 335*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @combine_vpermt2var_32i16_identity_mask(<32 x i16> %x0, <32 x i16> %x1, i32 %m) { 336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermt2var_32i16_identity_mask: 337*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd %edi, %k1 339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 {{.*#+}} zmm2 = [31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] 340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2w %zmm1, %zmm2, %zmm0 {%k1} {z} 341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 {{.*#+}} zmm1 = [63,30,61,28,59,26,57,24,55,22,53,20,51,18,49,16,47,46,13,44,11,42,9,40,7,38,5,36,3,34,1,32] 342*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2w %zmm0, %zmm1, %zmm0 {%k1} {z} 343*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 344*9880d681SAndroid Build Coastguard Worker %res0 = call <32 x i16> @llvm.x86.avx512.maskz.vpermt2var.hi.512(<32 x i16> <i16 31, i16 30, i16 29, i16 28, i16 27, i16 26, i16 25, i16 24, i16 23, i16 22, i16 21, i16 20, i16 19, i16 18, i16 17, i16 16, i16 15, i16 14, i16 13, i16 12, i16 11, i16 10, i16 9, i16 8, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, <32 x i16> %x0, <32 x i16> %x1, i32 %m) 345*9880d681SAndroid Build Coastguard Worker %res1 = call <32 x i16> @llvm.x86.avx512.maskz.vpermt2var.hi.512(<32 x i16> <i16 63, i16 30, i16 61, i16 28, i16 59, i16 26, i16 57, i16 24, i16 55, i16 22, i16 53, i16 20, i16 51, i16 18, i16 49, i16 16, i16 47, i16 46, i16 13, i16 44, i16 11, i16 42, i16 9, i16 40, i16 7, i16 38, i16 5, i16 36, i16 3, i16 34, i16 1, i16 32>, <32 x i16> %res0, <32 x i16> %res0, i32 %m) 346*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %res1 347*9880d681SAndroid Build Coastguard Worker} 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @combine_pshufb_identity(<64 x i8> %x0) { 350*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_identity: 351*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 352*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 353*9880d681SAndroid Build Coastguard Worker %select = bitcast <8 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> to <64 x i8> 354*9880d681SAndroid Build Coastguard Worker %mask = bitcast <16 x i32> <i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 undef, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051> to <64 x i8> 355*9880d681SAndroid Build Coastguard Worker %res0 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %x0, <64 x i8> %mask, <64 x i8> %select, i64 -1) 356*9880d681SAndroid Build Coastguard Worker %res1 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %res0, <64 x i8> %mask, <64 x i8> %select, i64 -1) 357*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res1 358*9880d681SAndroid Build Coastguard Worker} 359*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @combine_pshufb_identity_mask(<64 x i8> %x0, i64 %m) { 360*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_identity_mask: 361*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 362*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k1 363*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu8 {{.*#+}} zmm2 = [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] 365*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpternlogd $255, %zmm3, %zmm3, %zmm3 366*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb %zmm2, %zmm0, %zmm3 {%k1} 367*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb %zmm2, %zmm3, %zmm1 {%k1} 368*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 369*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 370*9880d681SAndroid Build Coastguard Worker %select = bitcast <8 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> to <64 x i8> 371*9880d681SAndroid Build Coastguard Worker %mask = bitcast <16 x i32> <i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051, i32 202182159, i32 134810123, i32 67438087, i32 66051> to <64 x i8> 372*9880d681SAndroid Build Coastguard Worker %res0 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %x0, <64 x i8> %mask, <64 x i8> %select, i64 %m) 373*9880d681SAndroid Build Coastguard Worker %res1 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %res0, <64 x i8> %mask, <64 x i8> %select, i64 %m) 374*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res1 375*9880d681SAndroid Build Coastguard Worker} 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @combine_permvar_as_vpbroadcastw512(<32 x i16> %x0) { 378*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_as_vpbroadcastw512: 379*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 380*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastw %xmm0, %zmm0 381*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 382*9880d681SAndroid Build Coastguard Worker %1 = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %x0, <32 x i16> zeroinitializer, <32 x i16> undef, i32 -1) 383*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %1 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @combine_permvar_as_vpbroadcastd512(<16 x i32> %x0) { 387*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_as_vpbroadcastd512: 388*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 389*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastd %xmm0, %zmm0 390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 391*9880d681SAndroid Build Coastguard Worker %1 = call <16 x i32> @llvm.x86.avx512.mask.permvar.si.512(<16 x i32> %x0, <16 x i32> zeroinitializer, <16 x i32> undef, i16 -1) 392*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %1 393*9880d681SAndroid Build Coastguard Worker} 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @combine_permvar_as_vpbroadcastq512(<8 x i64> %x0) { 396*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_as_vpbroadcastq512: 397*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 398*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastq %xmm0, %zmm0 399*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 400*9880d681SAndroid Build Coastguard Worker %1 = call <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64> %x0, <8 x i64> zeroinitializer, <8 x i64> undef, i8 -1) 401*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %1 402*9880d681SAndroid Build Coastguard Worker} 403*9880d681SAndroid Build Coastguard Worker 404*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @combine_permvar_8i64_as_permq(<8 x i64> %x0, <8 x i64> %x1) { 405*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8i64_as_permq: 406*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 407*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4] 408*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 409*9880d681SAndroid Build Coastguard Worker %1 = call <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64> %x0, <8 x i64> <i64 3, i64 2, i64 1, i64 undef, i64 undef, i64 6, i64 5, i64 4>, <8 x i64> %x1, i8 -1) 410*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %1 411*9880d681SAndroid Build Coastguard Worker} 412*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @combine_permvar_8i64_as_permq_mask(<8 x i64> %x0, <8 x i64> %x1, i8 %m) { 413*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8i64_as_permq_mask: 414*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq {{.*#+}} zmm1 {%k1} = zmm0[3,2,1,0,7,6,5,4] 417*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 419*9880d681SAndroid Build Coastguard Worker %1 = call <8 x i64> @llvm.x86.avx512.mask.permvar.di.512(<8 x i64> %x0, <8 x i64> <i64 3, i64 2, i64 1, i64 undef, i64 undef, i64 6, i64 5, i64 4>, <8 x i64> %x1, i8 %m) 420*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %1 421*9880d681SAndroid Build Coastguard Worker} 422*9880d681SAndroid Build Coastguard Worker 423*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_permvar_8f64_as_permpd(<8 x double> %x0, <8 x double> %x1) { 424*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8f64_as_permpd: 425*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4] 427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 428*9880d681SAndroid Build Coastguard Worker %1 = call <8 x double> @llvm.x86.avx512.mask.permvar.df.512(<8 x double> %x0, <8 x i64> <i64 3, i64 2, i64 1, i64 undef, i64 undef, i64 6, i64 5, i64 4>, <8 x double> %x1, i8 -1) 429*9880d681SAndroid Build Coastguard Worker ret <8 x double> %1 430*9880d681SAndroid Build Coastguard Worker} 431*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @combine_permvar_8f64_as_permpd_mask(<8 x double> %x0, <8 x double> %x1, i8 %m) { 432*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_8f64_as_permpd_mask: 433*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 434*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 435*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermpd {{.*#+}} zmm1 {%k1} = zmm0[3,2,1,0,7,6,5,4] 436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 438*9880d681SAndroid Build Coastguard Worker %1 = call <8 x double> @llvm.x86.avx512.mask.permvar.df.512(<8 x double> %x0, <8 x i64> <i64 3, i64 2, i64 1, i64 undef, i64 undef, i64 6, i64 5, i64 4>, <8 x double> %x1, i8 %m) 439*9880d681SAndroid Build Coastguard Worker ret <8 x double> %1 440*9880d681SAndroid Build Coastguard Worker} 441*9880d681SAndroid Build Coastguard Worker 442*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @combine_vpermilvar_16f32_230146759A8BCFDE(<16 x float> %x0) { 443*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_vpermilvar_16f32_230146759A8BCFDE: 444*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 445*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermilps {{.*#+}} zmm0 = zmm0[2,3,0,1,4,6,7,5,9,10,8,11,12,15,13,14] 446*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 447*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x float> @llvm.x86.avx512.mask.vpermilvar.ps.512(<16 x float> %x0, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 3, i32 2, i32 1, i32 0, i32 2, i32 3, i32 0, i32 1, i32 1, i32 0, i32 3, i32 2>, <16 x float> undef, i16 -1) 448*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x float> @llvm.x86.avx512.mask.vpermilvar.ps.512(<16 x float> %res0, <16 x i32> <i32 2, i32 3, i32 0, i32 1, i32 3, i32 1, i32 0, i32 2, i32 3, i32 0, i32 2, i32 1, i32 1, i32 2, i32 0, i32 3>, <16 x float> undef, i16 -1) 449*9880d681SAndroid Build Coastguard Worker ret <16 x float> %res1 450*9880d681SAndroid Build Coastguard Worker} 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @combine_pshufb_as_pslldq(<64 x i8> %a0) { 453*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_as_pslldq: 454*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 455*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[0,1,2,3,4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[16,17,18,19,20,21],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[32,33,34,35,36,37],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[48,49,50,51,52,53] 456*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 457*9880d681SAndroid Build Coastguard Worker %res0 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %a0, <64 x i8> <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>, <64 x i8> undef, i64 -1) 458*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res0 459*9880d681SAndroid Build Coastguard Worker} 460*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @combine_pshufb_as_pslldq_mask(<64 x i8> %a0, i64 %m) { 461*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_as_pslldq_mask: 462*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 463*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k1 464*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[0,1,2,3,4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[16,17,18,19,20,21],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[32,33,34,35,36,37],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[48,49,50,51,52,53] 465*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 466*9880d681SAndroid Build Coastguard Worker %res0 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %a0, <64 x i8> <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>, <64 x i8> zeroinitializer, i64 %m) 467*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res0 468*9880d681SAndroid Build Coastguard Worker} 469*9880d681SAndroid Build Coastguard Worker 470*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @combine_pshufb_as_psrldq(<64 x i8> %a0) { 471*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_as_psrldq: 472*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 473*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[31],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[47],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[63],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 474*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 475*9880d681SAndroid Build Coastguard Worker %res0 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %a0, <64 x i8> <i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>, <64 x i8> undef, i64 -1) 476*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res0 477*9880d681SAndroid Build Coastguard Worker} 478*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @combine_pshufb_as_psrldq_mask(<64 x i8> %a0, i64 %m) { 479*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_as_psrldq_mask: 480*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 481*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k1 482*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[31],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[47],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[63],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 483*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 484*9880d681SAndroid Build Coastguard Worker %res0 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %a0, <64 x i8> <i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>, <64 x i8> zeroinitializer, i64 %m) 485*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res0 486*9880d681SAndroid Build Coastguard Worker} 487*9880d681SAndroid Build Coastguard Worker 488*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @combine_permvar_as_pshuflw(<32 x i16> %a0) { 489*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_permvar_as_pshuflw: 490*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7,9,8,11,10,12,13,14,15,17,16,19,18,20,21,22,23,25,24,27,26,28,29,30,31] 492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 493*9880d681SAndroid Build Coastguard Worker %res0 = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %a0, <32 x i16> <i16 1, i16 0, i16 3, i16 2, i16 4, i16 5, i16 6, i16 7, i16 9, i16 8, i16 11, i16 10, i16 12, i16 13, i16 14, i16 15, i16 17, i16 16, i16 19, i16 18, i16 20, i16 21, i16 22, i16 23, i16 25, i16 24, i16 27, i16 26, i16 28, i16 29, i16 30, i16 31>, <32 x i16> undef, i32 -1) 494*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %res0 495*9880d681SAndroid Build Coastguard Worker} 496*9880d681SAndroid Build Coastguard Worker 497*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @combine_pshufb_as_pshufhw(<32 x i16> %a0) { 498*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_as_pshufhw: 499*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 500*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,7,6,8,9,10,11,13,12,15,14,16,17,18,19,21,20,23,22,24,25,26,27,29,28,31,30] 501*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 502*9880d681SAndroid Build Coastguard Worker %res0 = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %a0, <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 5, i16 4, i16 7, i16 6, i16 8, i16 9, i16 10, i16 11, i16 13, i16 12, i16 15, i16 14, i16 16, i16 17, i16 18, i16 19, i16 21, i16 20, i16 23, i16 22, i16 24, i16 25, i16 26, i16 27, i16 29, i16 28, i16 31, i16 30>, <32 x i16> undef, i32 -1) 503*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %res0 504*9880d681SAndroid Build Coastguard Worker} 505*9880d681SAndroid Build Coastguard Worker 506*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @combine_pshufb_as_pshufw(<32 x i16> %a0) { 507*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: combine_pshufb_as_pshufw: 508*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 509*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7,9,8,11,10,12,13,14,15,17,16,19,18,20,21,22,23,25,24,27,26,28,29,30,31] 510*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,7,6,8,9,10,11,13,12,15,14,16,17,18,19,21,20,23,22,24,25,26,27,29,28,31,30] 511*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 512*9880d681SAndroid Build Coastguard Worker %res0 = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %a0, <32 x i16> <i16 1, i16 0, i16 3, i16 2, i16 4, i16 5, i16 6, i16 7, i16 9, i16 8, i16 11, i16 10, i16 12, i16 13, i16 14, i16 15, i16 17, i16 16, i16 19, i16 18, i16 20, i16 21, i16 22, i16 23, i16 25, i16 24, i16 27, i16 26, i16 28, i16 29, i16 30, i16 31>, <32 x i16> undef, i32 -1) 513*9880d681SAndroid Build Coastguard Worker %res1 = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %res0, <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 5, i16 4, i16 7, i16 6, i16 8, i16 9, i16 10, i16 11, i16 13, i16 12, i16 15, i16 14, i16 16, i16 17, i16 18, i16 19, i16 21, i16 20, i16 23, i16 22, i16 24, i16 25, i16 26, i16 27, i16 29, i16 28, i16 31, i16 30>, <32 x i16> undef, i32 -1) 514*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %res1 515*9880d681SAndroid Build Coastguard Worker} 516