[llvm] a6982e5 - [X86] Add v16i16 shuffle tests for "shift + blend" pack patterns (#208481)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 9 08:48:16 PDT 2026
Author: Simon Pilgrim
Date: 2026-07-09T15:48:10Z
New Revision: a6982e5fc9c92bda7bc80a4aaed8cb9cc2789e20
URL: https://github.com/llvm/llvm-project/commit/a6982e5fc9c92bda7bc80a4aaed8cb9cc2789e20
DIFF: https://github.com/llvm/llvm-project/commit/a6982e5fc9c92bda7bc80a4aaed8cb9cc2789e20.diff
LOG: [X86] Add v16i16 shuffle tests for "shift + blend" pack patterns (#208481)
Shuffles that could be expanded by shifting one input and blending with
the second inplace input
Added:
Modified:
llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll b/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll
index 4f07ff9f02c6f..32f995d488e1d 100644
--- a/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll
+++ b/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll
@@ -6975,6 +6975,106 @@ define <16 x i16> @shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u(<16 x i16> %a,
ret <16 x i16> %shuffle
}
+define <16 x i16> @shuffle_v16i16_00_16_02_18_04_20_06_22_08_24_10_26_12_28_14_30(<16 x i16> %a, <16 x i16> %b) {
+; AVX1-LABEL: shuffle_v16i16_00_16_02_18_04_20_06_22_08_24_10_26_12_28_14_30:
+; AVX1: # %bb.0:
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
+; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
+; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
+; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm4
+; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]
+; AVX1-NEXT: vpshufb %xmm3, %xmm1, %xmm1
+; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
+; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
+; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
+; AVX1-NEXT: retq
+;
+; AVX2-LABEL: shuffle_v16i16_00_16_02_18_04_20_06_22_08_24_10_26_12_28_14_30:
+; AVX2: # %bb.0:
+; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]
+; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]
+; AVX2-NEXT: retq
+;
+; AVX512VL-LABEL: shuffle_v16i16_00_16_02_18_04_20_06_22_08_24_10_26_12_28_14_30:
+; AVX512VL: # %bb.0:
+; AVX512VL-NEXT: vpmovsxbw {{.*#+}} ymm2 = [0,16,2,18,4,20,6,22,8,24,10,26,12,28,14,30]
+; AVX512VL-NEXT: vpermt2w %ymm1, %ymm2, %ymm0
+; AVX512VL-NEXT: retq
+;
+; XOPAVX1-LABEL: shuffle_v16i16_00_16_02_18_04_20_06_22_08_24_10_26_12_28_14_30:
+; XOPAVX1: # %bb.0:
+; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
+; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
+; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,16,17,4,5,20,21,8,9,24,25,12,13,28,29]
+; XOPAVX1-NEXT: vpperm %xmm4, %xmm2, %xmm3, %xmm2
+; XOPAVX1-NEXT: vpperm %xmm4, %xmm1, %xmm0, %xmm0
+; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
+; XOPAVX1-NEXT: retq
+;
+; XOPAVX2-LABEL: shuffle_v16i16_00_16_02_18_04_20_06_22_08_24_10_26_12_28_14_30:
+; XOPAVX2: # %bb.0:
+; XOPAVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]
+; XOPAVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
+; XOPAVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0
+; XOPAVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]
+; XOPAVX2-NEXT: retq
+ %r = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
+ ret <16 x i16> %r
+}
+
+define <16 x i16> @shuffle_v16i16_01_17_03_19_05_21_07_23_09_25_11_27_13_29_15_31(<16 x i16> %a, <16 x i16> %b) {
+; AVX1-LABEL: shuffle_v16i16_01_17_03_19_05_21_07_23_09_25_11_27_13_29_15_31:
+; AVX1: # %bb.0:
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
+; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2,3,6,7,10,11,14,15,14,15,10,11,12,13,14,15]
+; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
+; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm4
+; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]
+; AVX1-NEXT: vpshufb %xmm3, %xmm1, %xmm1
+; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
+; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
+; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
+; AVX1-NEXT: retq
+;
+; AVX2-LABEL: shuffle_v16i16_01_17_03_19_05_21_07_23_09_25_11_27_13_29_15_31:
+; AVX2: # %bb.0:
+; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [2,3,6,7,10,11,14,15,14,15,10,11,12,13,14,15,18,19,22,23,26,27,30,31,30,31,26,27,28,29,30,31]
+; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]
+; AVX2-NEXT: retq
+;
+; AVX512VL-LABEL: shuffle_v16i16_01_17_03_19_05_21_07_23_09_25_11_27_13_29_15_31:
+; AVX512VL: # %bb.0:
+; AVX512VL-NEXT: vpmovsxbw {{.*#+}} ymm2 = [1,17,3,19,5,21,7,23,9,25,11,27,13,29,15,31]
+; AVX512VL-NEXT: vpermt2w %ymm1, %ymm2, %ymm0
+; AVX512VL-NEXT: retq
+;
+; XOPAVX1-LABEL: shuffle_v16i16_01_17_03_19_05_21_07_23_09_25_11_27_13_29_15_31:
+; XOPAVX1: # %bb.0:
+; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
+; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
+; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [2,3,18,19,6,7,22,23,10,11,26,27,14,15,30,31]
+; XOPAVX1-NEXT: vpperm %xmm4, %xmm2, %xmm3, %xmm2
+; XOPAVX1-NEXT: vpperm %xmm4, %xmm1, %xmm0, %xmm0
+; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
+; XOPAVX1-NEXT: retq
+;
+; XOPAVX2-LABEL: shuffle_v16i16_01_17_03_19_05_21_07_23_09_25_11_27_13_29_15_31:
+; XOPAVX2: # %bb.0:
+; XOPAVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [2,3,6,7,10,11,14,15,14,15,10,11,12,13,14,15,18,19,22,23,26,27,30,31,30,31,26,27,28,29,30,31]
+; XOPAVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
+; XOPAVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0
+; XOPAVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]
+; XOPAVX2-NEXT: retq
+ %r = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
+ ret <16 x i16> %r
+}
+
define <16 x i16> @shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25(<16 x i16> %a0, <16 x i16> %a1) {
; AVX1-LABEL: shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25:
; AVX1: # %bb.0:
More information about the llvm-commits
mailing list