55; RUN: opt < %s -cost-model -analyze -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck %s -check-prefix=CHECK -check-prefix=AVX -check-prefix=AVX2
66; RUN: opt < %s -cost-model -analyze -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512 --check-prefix=AVX512F
77; RUN: opt < %s -cost-model -analyze -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512 --check-prefix=AVX512BW
8+ ; RUN: opt < %s -cost-model -analyze -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512bw,+avx512vbmi | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512 --check-prefix=AVX512VBMI
89
910;
1011; Verify the cost model for 1 src shuffles
@@ -155,6 +156,7 @@ define void @test_vXi16(<8 x i16> %src128, <16 x i16> %src256, <32 x i16> %src51
155156 ; AVX2: cost of 1 {{.*}} %V128 = shufflevector
156157 ; AVX512F: cost of 1 {{.*}} %V128 = shufflevector
157158 ; AVX512BW: cost of 1 {{.*}} %V128 = shufflevector
159+ ; AVX512VBMI: cost of 1 {{.*}} %V128 = shufflevector
158160 %V128 = shufflevector <8 x i16 > %src128 , <8 x i16 > undef , <8 x i32 > <i32 7 , i32 6 , i32 6 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
159161
160162 ; SSE2: cost of 32 {{.*}} %V256 = shufflevector
@@ -164,6 +166,7 @@ define void @test_vXi16(<8 x i16> %src128, <16 x i16> %src256, <32 x i16> %src51
164166 ; AVX2: cost of 4 {{.*}} %V256 = shufflevector
165167 ; AVX512F: cost of 4 {{.*}} %V256 = shufflevector
166168 ; AVX512BW cost of 1 {{.*}} %V256 = shufflevector
169+ ; AVX512VBMI cost of 1 {{.*}} %V256 = shufflevector
167170 %V256 = shufflevector <16 x i16 > %src256 , <16 x i16 > undef , <16 x i32 > <i32 15 , i32 14 , i32 13 , i32 13 , i32 11 , i32 10 , i32 9 , i32 8 , i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
168171
169172 ; SSE2: cost of 192 {{.*}} %V512 = shufflevector
@@ -173,6 +176,7 @@ define void @test_vXi16(<8 x i16> %src128, <16 x i16> %src256, <32 x i16> %src51
173176 ; AVX2: cost of 64 {{.*}} %V512 = shufflevector
174177 ; AVX512F: cost of 64 {{.*}} %V512 = shufflevector
175178 ; AVX512BW: cost of 1 {{.*}} %V512 = shufflevector
179+ ; AVX512VBMI: cost of 1 {{.*}} %V512 = shufflevector
176180 %V512 = shufflevector <32 x i16 > %src512 , <32 x i16 > undef , <32 x i32 > <i32 31 , i32 30 , i32 20 , i32 28 , i32 27 , i32 26 , i32 25 , i32 24 , i32 23 , i32 22 , i32 21 , i32 20 , i32 19 , i32 18 , i32 17 , i32 16 , i32 15 , i32 14 , i32 13 , i32 12 , i32 11 , i32 11 , i32 9 , i32 8 , i32 7 , i32 11 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
177181
178182 ; SSE2: cost of 896 {{.*}} %V1024 = shufflevector
@@ -182,6 +186,7 @@ define void @test_vXi16(<8 x i16> %src128, <16 x i16> %src256, <32 x i16> %src51
182186 ; AVX2: cost of 384 {{.*}} %V1024 = shufflevector
183187 ; AVX512F: cost of 384 {{.*}} %V1024 = shufflevector
184188 ; AVX512BW: cost of 2 {{.*}} %V1024 = shufflevector
189+ ; AVX512VBMI: cost of 2 {{.*}} %V1024 = shufflevector
185190 %V1024 = shufflevector <64 x i16 > %src1024 , <64 x i16 > undef , <64 x i32 > <i32 63 , i32 62 , i32 61 , i32 60 , i32 59 , i32 58 , i32 57 , i32 56 , i32 55 , i32 54 , i32 53 , i32 52 , i32 51 , i32 50 , i32 49 , i32 48 , i32 47 , i32 46 , i32 45 , i32 44 , i32 43 , i32 42 , i32 41 , i32 40 , i32 39 , i32 38 , i32 37 , i32 36 , i32 35 , i32 34 , i32 33 , i32 32 , i32 31 , i32 30 , i32 29 , i32 28 , i32 27 , i32 26 , i32 25 , i32 24 , i32 23 , i32 20 , i32 21 , i32 20 , i32 19 , i32 18 , i32 17 , i32 16 , 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 >
186191 ret void
187192}
@@ -203,6 +208,7 @@ define void @test_vXi8(<16 x i8> %src128, <32 x i8> %src256, <64 x i8> %src512)
203208 ; AVX2: cost of 4 {{.*}} %V256 = shufflevector
204209 ; AVX512F: cost of 4 {{.*}} %V256 = shufflevector
205210 ; AVX512BW: cost of 3 {{.*}} %V256 = shufflevector
211+ ; AVX512VBMI: cost of 1 {{.*}} %V256 = shufflevector
206212 %V256 = shufflevector <32 x i8 > %src256 , <32 x i8 > undef , <32 x i32 > <i32 31 , i32 30 , i32 29 , i32 28 , i32 27 , i32 26 , i32 25 , i32 24 , i32 23 , i32 22 , i32 21 , i32 20 , i32 19 , i32 18 , i32 17 , i32 16 , i32 15 , i32 14 , i32 13 , i32 12 , i32 11 , i32 10 , i32 8 , i32 8 , i32 7 , i32 6 , i32 8 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
207213
208214 ; SSE2: cost of 384 {{.*}} %V512 = shufflevector
@@ -212,6 +218,7 @@ define void @test_vXi8(<16 x i8> %src128, <32 x i8> %src256, <64 x i8> %src512)
212218 ; AVX2: cost of 128 {{.*}} %V512 = shufflevector
213219 ; AVX512F: cost of 128 {{.*}} %V512 = shufflevector
214220 ; AVX512BW: cost of 8 {{.*}} %V512 = shufflevector
221+ ; AVX512VBMI: cost of 1 {{.*}} %V512 = shufflevector
215222 %V512 = shufflevector <64 x i8 > %src512 , <64 x i8 > undef , <64 x i32 > <i32 63 , i32 62 , i32 61 , i32 60 , i32 59 , i32 58 , i32 57 , i32 56 , i32 55 , i32 54 , i32 53 , i32 52 , i32 51 , i32 50 , i32 49 , i32 48 , i32 47 , i32 46 , i32 45 , i32 44 , i32 43 , i32 42 , i32 41 , i32 40 , i32 39 , i32 38 , i32 37 , i32 36 , i32 35 , i32 34 , i32 33 , i32 32 , i32 31 , i32 30 , i32 29 , i32 28 , i32 27 , i32 26 , i32 25 , i32 24 , i32 23 , i32 20 , i32 21 , i32 20 , i32 19 , i32 18 , i32 17 , i32 16 , 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 >
216223
217224 ret void
0 commit comments