xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512bw.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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