3685 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE,SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE415; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX2,AVX2-SLOW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX2,AVX2-FAST8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX2,AVX2-FAST9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX512VL,AVX512VL-SLOW10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX512VL,AVX512VL-FAST,AVX512VL-FAST-ALL11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX512VL,AVX512VL-FAST,AVX512VL-FAST-PERLANE12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=AVX,XOP,XOPAVX113; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=AVX,XOP,XOPAVX214 15define <8 x i16> @shuffle_v8i16_01012323(<8 x i16> %a, <8 x i16> %b) {16; SSE-LABEL: shuffle_v8i16_01012323:17; SSE: # %bb.0:18; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]19; SSE-NEXT: retq20;21; AVX-LABEL: shuffle_v8i16_01012323:22; AVX: # %bb.0:23; AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]24; AVX-NEXT: retq25 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 2, i32 3, i32 2, i32 3>26 ret <8 x i16> %shuffle27}28define <8 x i16> @shuffle_v8i16_67452301(<8 x i16> %a, <8 x i16> %b) {29; SSE-LABEL: shuffle_v8i16_67452301:30; SSE: # %bb.0:31; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]32; SSE-NEXT: retq33;34; AVX-LABEL: shuffle_v8i16_67452301:35; AVX: # %bb.0:36; AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]37; AVX-NEXT: retq38 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 6, i32 7, i32 4, i32 5, i32 2, i32 3, i32 0, i32 1>39 ret <8 x i16> %shuffle40}41define <8 x i16> @shuffle_v8i16_456789AB(<8 x i16> %a, <8 x i16> %b) {42; SSE2-LABEL: shuffle_v8i16_456789AB:43; SSE2: # %bb.0:44; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,3],xmm1[0,1]45; SSE2-NEXT: retq46;47; SSSE3-LABEL: shuffle_v8i16_456789AB:48; SSSE3: # %bb.0:49; SSSE3-NEXT: palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]50; SSSE3-NEXT: movdqa %xmm1, %xmm051; SSSE3-NEXT: retq52;53; SSE41-LABEL: shuffle_v8i16_456789AB:54; SSE41: # %bb.0:55; SSE41-NEXT: palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]56; SSE41-NEXT: movdqa %xmm1, %xmm057; SSE41-NEXT: retq58;59; AVX-LABEL: shuffle_v8i16_456789AB:60; AVX: # %bb.0:61; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]62; AVX-NEXT: retq63 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>64 ret <8 x i16> %shuffle65}66 67define <8 x i16> @shuffle_v8i16_00000000(<8 x i16> %a, <8 x i16> %b) {68; SSE-LABEL: shuffle_v8i16_00000000:69; SSE: # %bb.0:70; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]71; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]72; SSE-NEXT: retq73;74; AVX1-LABEL: shuffle_v8i16_00000000:75; AVX1: # %bb.0:76; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]77; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]78; AVX1-NEXT: retq79;80; AVX2OR512VL-LABEL: shuffle_v8i16_00000000:81; AVX2OR512VL: # %bb.0:82; AVX2OR512VL-NEXT: vpbroadcastw %xmm0, %xmm083; AVX2OR512VL-NEXT: retq84;85; XOPAVX1-LABEL: shuffle_v8i16_00000000:86; XOPAVX1: # %bb.0:87; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]88; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]89; XOPAVX1-NEXT: retq90;91; XOPAVX2-LABEL: shuffle_v8i16_00000000:92; XOPAVX2: # %bb.0:93; XOPAVX2-NEXT: vpbroadcastw %xmm0, %xmm094; XOPAVX2-NEXT: retq95 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>96 ret <8 x i16> %shuffle97}98define <8 x i16> @shuffle_v8i16_00004444(<8 x i16> %a, <8 x i16> %b) {99; SSE-LABEL: shuffle_v8i16_00004444:100; SSE: # %bb.0:101; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]102; SSE-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]103; SSE-NEXT: retq104;105; AVX1-LABEL: shuffle_v8i16_00004444:106; AVX1: # %bb.0:107; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]108; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]109; AVX1-NEXT: retq110;111; AVX2-SLOW-LABEL: shuffle_v8i16_00004444:112; AVX2-SLOW: # %bb.0:113; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]114; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]115; AVX2-SLOW-NEXT: retq116;117; AVX2-FAST-LABEL: shuffle_v8i16_00004444:118; AVX2-FAST: # %bb.0:119; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9]120; AVX2-FAST-NEXT: retq121;122; AVX512VL-SLOW-LABEL: shuffle_v8i16_00004444:123; AVX512VL-SLOW: # %bb.0:124; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]125; AVX512VL-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]126; AVX512VL-SLOW-NEXT: retq127;128; AVX512VL-FAST-LABEL: shuffle_v8i16_00004444:129; AVX512VL-FAST: # %bb.0:130; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9]131; AVX512VL-FAST-NEXT: retq132;133; XOP-LABEL: shuffle_v8i16_00004444:134; XOP: # %bb.0:135; XOP-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]136; XOP-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]137; XOP-NEXT: retq138 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>139 ret <8 x i16> %shuffle140}141define <8 x i16> @shuffle_v8i16_u0u1u2u3(<8 x i16> %a, <8 x i16> %b) {142; SSE-LABEL: shuffle_v8i16_u0u1u2u3:143; SSE: # %bb.0:144; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]145; SSE-NEXT: retq146;147; AVX-LABEL: shuffle_v8i16_u0u1u2u3:148; AVX: # %bb.0:149; AVX-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]150; AVX-NEXT: retq151 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 0, i32 poison, i32 1, i32 poison, i32 2, i32 poison, i32 3>152 ret <8 x i16> %shuffle153}154define <8 x i16> @shuffle_v8i16_u4u5u6u7(<8 x i16> %a, <8 x i16> %b) {155; SSE-LABEL: shuffle_v8i16_u4u5u6u7:156; SSE: # %bb.0:157; SSE-NEXT: punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]158; SSE-NEXT: retq159;160; AVX-LABEL: shuffle_v8i16_u4u5u6u7:161; AVX: # %bb.0:162; AVX-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]163; AVX-NEXT: retq164 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 4, i32 poison, i32 5, i32 poison, i32 6, i32 poison, i32 7>165 ret <8 x i16> %shuffle166}167define <8 x i16> @shuffle_v8i16_31206745(<8 x i16> %a, <8 x i16> %b) {168; SSE-LABEL: shuffle_v8i16_31206745:169; SSE: # %bb.0:170; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]171; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]172; SSE-NEXT: retq173;174; AVX1-LABEL: shuffle_v8i16_31206745:175; AVX1: # %bb.0:176; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]177; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]178; AVX1-NEXT: retq179;180; AVX2-SLOW-LABEL: shuffle_v8i16_31206745:181; AVX2-SLOW: # %bb.0:182; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]183; AVX2-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]184; AVX2-SLOW-NEXT: retq185;186; AVX2-FAST-LABEL: shuffle_v8i16_31206745:187; AVX2-FAST: # %bb.0:188; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,2,3,4,5,0,1,12,13,14,15,8,9,10,11]189; AVX2-FAST-NEXT: retq190;191; AVX512VL-SLOW-LABEL: shuffle_v8i16_31206745:192; AVX512VL-SLOW: # %bb.0:193; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]194; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]195; AVX512VL-SLOW-NEXT: retq196;197; AVX512VL-FAST-LABEL: shuffle_v8i16_31206745:198; AVX512VL-FAST: # %bb.0:199; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,2,3,4,5,0,1,12,13,14,15,8,9,10,11]200; AVX512VL-FAST-NEXT: retq201;202; XOP-LABEL: shuffle_v8i16_31206745:203; XOP: # %bb.0:204; XOP-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]205; XOP-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]206; XOP-NEXT: retq207 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 6, i32 7, i32 4, i32 5>208 ret <8 x i16> %shuffle209}210define <8 x i16> @shuffle_v8i16_44440000(<8 x i16> %a, <8 x i16> %b) {211; SSE2-LABEL: shuffle_v8i16_44440000:212; SSE2: # %bb.0:213; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,1,0,3]214; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]215; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]216; SSE2-NEXT: retq217;218; SSSE3-LABEL: shuffle_v8i16_44440000:219; SSSE3: # %bb.0:220; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]221; SSSE3-NEXT: retq222;223; SSE41-LABEL: shuffle_v8i16_44440000:224; SSE41: # %bb.0:225; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]226; SSE41-NEXT: retq227;228; AVX-LABEL: shuffle_v8i16_44440000:229; AVX: # %bb.0:230; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]231; AVX-NEXT: retq232 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 0, i32 0, i32 0, i32 0>233 ret <8 x i16> %shuffle234}235define <8 x i16> @shuffle_v8i16_23016745(<8 x i16> %a, <8 x i16> %b) {236; SSE-LABEL: shuffle_v8i16_23016745:237; SSE: # %bb.0:238; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]239; SSE-NEXT: retq240;241; AVX-LABEL: shuffle_v8i16_23016745:242; AVX: # %bb.0:243; AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,0,3,2]244; AVX-NEXT: retq245 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 5>246 ret <8 x i16> %shuffle247}248define <8 x i16> @shuffle_v8i16_23026745(<8 x i16> %a, <8 x i16> %b) {249; SSE-LABEL: shuffle_v8i16_23026745:250; SSE: # %bb.0:251; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]252; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]253; SSE-NEXT: retq254;255; AVX1-LABEL: shuffle_v8i16_23026745:256; AVX1: # %bb.0:257; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]258; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]259; AVX1-NEXT: retq260;261; AVX2-SLOW-LABEL: shuffle_v8i16_23026745:262; AVX2-SLOW: # %bb.0:263; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]264; AVX2-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]265; AVX2-SLOW-NEXT: retq266;267; AVX2-FAST-LABEL: shuffle_v8i16_23026745:268; AVX2-FAST: # %bb.0:269; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,4,5,12,13,14,15,8,9,10,11]270; AVX2-FAST-NEXT: retq271;272; AVX512VL-SLOW-LABEL: shuffle_v8i16_23026745:273; AVX512VL-SLOW: # %bb.0:274; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]275; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]276; AVX512VL-SLOW-NEXT: retq277;278; AVX512VL-FAST-LABEL: shuffle_v8i16_23026745:279; AVX512VL-FAST: # %bb.0:280; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,4,5,12,13,14,15,8,9,10,11]281; AVX512VL-FAST-NEXT: retq282;283; XOP-LABEL: shuffle_v8i16_23026745:284; XOP: # %bb.0:285; XOP-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]286; XOP-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]287; XOP-NEXT: retq288 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 3, i32 0, i32 2, i32 6, i32 7, i32 4, i32 5>289 ret <8 x i16> %shuffle290}291define <8 x i16> @shuffle_v8i16_23016747(<8 x i16> %a, <8 x i16> %b) {292; SSE-LABEL: shuffle_v8i16_23016747:293; SSE: # %bb.0:294; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]295; SSE-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]296; SSE-NEXT: retq297;298; AVX1-LABEL: shuffle_v8i16_23016747:299; AVX1: # %bb.0:300; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]301; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]302; AVX1-NEXT: retq303;304; AVX2-SLOW-LABEL: shuffle_v8i16_23016747:305; AVX2-SLOW: # %bb.0:306; AVX2-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]307; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]308; AVX2-SLOW-NEXT: retq309;310; AVX2-FAST-LABEL: shuffle_v8i16_23016747:311; AVX2-FAST: # %bb.0:312; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3,12,13,14,15,8,9,14,15]313; AVX2-FAST-NEXT: retq314;315; AVX512VL-SLOW-LABEL: shuffle_v8i16_23016747:316; AVX512VL-SLOW: # %bb.0:317; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]318; AVX512VL-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]319; AVX512VL-SLOW-NEXT: retq320;321; AVX512VL-FAST-LABEL: shuffle_v8i16_23016747:322; AVX512VL-FAST: # %bb.0:323; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3,12,13,14,15,8,9,14,15]324; AVX512VL-FAST-NEXT: retq325;326; XOP-LABEL: shuffle_v8i16_23016747:327; XOP: # %bb.0:328; XOP-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]329; XOP-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]330; XOP-NEXT: retq331 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 7>332 ret <8 x i16> %shuffle333}334define <8 x i16> @shuffle_v8i16_75643120(<8 x i16> %a, <8 x i16> %b) {335; SSE2-LABEL: shuffle_v8i16_75643120:336; SSE2: # %bb.0:337; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]338; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]339; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]340; SSE2-NEXT: retq341;342; SSSE3-LABEL: shuffle_v8i16_75643120:343; SSSE3: # %bb.0:344; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]345; SSSE3-NEXT: retq346;347; SSE41-LABEL: shuffle_v8i16_75643120:348; SSE41: # %bb.0:349; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]350; SSE41-NEXT: retq351;352; AVX-LABEL: shuffle_v8i16_75643120:353; AVX: # %bb.0:354; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]355; AVX-NEXT: retq356 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 7, i32 5, i32 6, i32 4, i32 3, i32 1, i32 2, i32 0>357 ret <8 x i16> %shuffle358}359 360define <8 x i16> @shuffle_v8i16_10545410(<8 x i16> %a, <8 x i16> %b) {361; SSE2-LABEL: shuffle_v8i16_10545410:362; SSE2: # %bb.0:363; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]364; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]365; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]366; SSE2-NEXT: retq367;368; SSSE3-LABEL: shuffle_v8i16_10545410:369; SSSE3: # %bb.0:370; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]371; SSSE3-NEXT: retq372;373; SSE41-LABEL: shuffle_v8i16_10545410:374; SSE41: # %bb.0:375; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]376; SSE41-NEXT: retq377;378; AVX-LABEL: shuffle_v8i16_10545410:379; AVX: # %bb.0:380; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]381; AVX-NEXT: retq382 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 0, i32 5, i32 4, i32 5, i32 4, i32 1, i32 0>383 ret <8 x i16> %shuffle384}385define <8 x i16> @shuffle_v8i16_54105410(<8 x i16> %a, <8 x i16> %b) {386; SSE2-LABEL: shuffle_v8i16_54105410:387; SSE2: # %bb.0:388; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]389; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]390; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]391; SSE2-NEXT: retq392;393; SSSE3-LABEL: shuffle_v8i16_54105410:394; SSSE3: # %bb.0:395; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]396; SSSE3-NEXT: retq397;398; SSE41-LABEL: shuffle_v8i16_54105410:399; SSE41: # %bb.0:400; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]401; SSE41-NEXT: retq402;403; AVX-LABEL: shuffle_v8i16_54105410:404; AVX: # %bb.0:405; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]406; AVX-NEXT: retq407 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 4, i32 1, i32 0, i32 5, i32 4, i32 1, i32 0>408 ret <8 x i16> %shuffle409}410define <8 x i16> @shuffle_v8i16_54101054(<8 x i16> %a, <8 x i16> %b) {411; SSE2-LABEL: shuffle_v8i16_54101054:412; SSE2: # %bb.0:413; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]414; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]415; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]416; SSE2-NEXT: retq417;418; SSSE3-LABEL: shuffle_v8i16_54101054:419; SSSE3: # %bb.0:420; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]421; SSSE3-NEXT: retq422;423; SSE41-LABEL: shuffle_v8i16_54101054:424; SSE41: # %bb.0:425; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]426; SSE41-NEXT: retq427;428; AVX-LABEL: shuffle_v8i16_54101054:429; AVX: # %bb.0:430; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]431; AVX-NEXT: retq432 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 4, i32 1, i32 0, i32 1, i32 0, i32 5, i32 4>433 ret <8 x i16> %shuffle434}435define <8 x i16> @shuffle_v8i16_04400440(<8 x i16> %a, <8 x i16> %b) {436; SSE2-LABEL: shuffle_v8i16_04400440:437; SSE2: # %bb.0:438; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]439; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]440; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,4,6]441; SSE2-NEXT: retq442;443; SSSE3-LABEL: shuffle_v8i16_04400440:444; SSSE3: # %bb.0:445; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]446; SSSE3-NEXT: retq447;448; SSE41-LABEL: shuffle_v8i16_04400440:449; SSE41: # %bb.0:450; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]451; SSE41-NEXT: retq452;453; AVX-LABEL: shuffle_v8i16_04400440:454; AVX: # %bb.0:455; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]456; AVX-NEXT: retq457 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 0, i32 4, i32 4, i32 0>458 ret <8 x i16> %shuffle459}460define <8 x i16> @shuffle_v8i16_40044004(<8 x i16> %a, <8 x i16> %b) {461; SSE2-LABEL: shuffle_v8i16_40044004:462; SSE2: # %bb.0:463; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]464; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,0,0,2,4,5,6,7]465; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,4]466; SSE2-NEXT: retq467;468; SSSE3-LABEL: shuffle_v8i16_40044004:469; SSSE3: # %bb.0:470; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]471; SSSE3-NEXT: retq472;473; SSE41-LABEL: shuffle_v8i16_40044004:474; SSE41: # %bb.0:475; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]476; SSE41-NEXT: retq477;478; AVX-LABEL: shuffle_v8i16_40044004:479; AVX: # %bb.0:480; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]481; AVX-NEXT: retq482 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 0, i32 0, i32 4, i32 4, i32 0, i32 0, i32 4>483 ret <8 x i16> %shuffle484}485 486define <8 x i16> @shuffle_v8i16_26405173(<8 x i16> %a, <8 x i16> %b) {487; SSE2-LABEL: shuffle_v8i16_26405173:488; SSE2: # %bb.0:489; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]490; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]491; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]492; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]493; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,4,7]494; SSE2-NEXT: retq495;496; SSSE3-LABEL: shuffle_v8i16_26405173:497; SSSE3: # %bb.0:498; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]499; SSSE3-NEXT: retq500;501; SSE41-LABEL: shuffle_v8i16_26405173:502; SSE41: # %bb.0:503; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]504; SSE41-NEXT: retq505;506; AVX-LABEL: shuffle_v8i16_26405173:507; AVX: # %bb.0:508; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]509; AVX-NEXT: retq510 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 6, i32 4, i32 0, i32 5, i32 1, i32 7, i32 3>511 ret <8 x i16> %shuffle512}513define <8 x i16> @shuffle_v8i16_20645173(<8 x i16> %a, <8 x i16> %b) {514; SSE2-LABEL: shuffle_v8i16_20645173:515; SSE2: # %bb.0:516; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]517; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]518; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]519; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,0,2,3,4,5,6,7]520; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,4,7]521; SSE2-NEXT: retq522;523; SSSE3-LABEL: shuffle_v8i16_20645173:524; SSSE3: # %bb.0:525; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]526; SSSE3-NEXT: retq527;528; SSE41-LABEL: shuffle_v8i16_20645173:529; SSE41: # %bb.0:530; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]531; SSE41-NEXT: retq532;533; AVX-LABEL: shuffle_v8i16_20645173:534; AVX: # %bb.0:535; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]536; AVX-NEXT: retq537 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 0, i32 6, i32 4, i32 5, i32 1, i32 7, i32 3>538 ret <8 x i16> %shuffle539}540define <8 x i16> @shuffle_v8i16_26401375(<8 x i16> %a, <8 x i16> %b) {541; SSE2-LABEL: shuffle_v8i16_26401375:542; SSE2: # %bb.0:543; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]544; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]545; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]546; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]547; SSE2-NEXT: retq548;549; SSSE3-LABEL: shuffle_v8i16_26401375:550; SSSE3: # %bb.0:551; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]552; SSSE3-NEXT: retq553;554; SSE41-LABEL: shuffle_v8i16_26401375:555; SSE41: # %bb.0:556; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]557; SSE41-NEXT: retq558;559; AVX-LABEL: shuffle_v8i16_26401375:560; AVX: # %bb.0:561; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]562; AVX-NEXT: retq563 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 6, i32 4, i32 0, i32 1, i32 3, i32 7, i32 5>564 ret <8 x i16> %shuffle565}566 567define <8 x i16> @shuffle_v8i16_66751643(<8 x i16> %a, <8 x i16> %b) {568; SSE2-LABEL: shuffle_v8i16_66751643:569; SSE2: # %bb.0:570; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]571; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]572; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,0]573; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,3,2,4,5,6,7]574; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,4,6]575; SSE2-NEXT: retq576;577; SSSE3-LABEL: shuffle_v8i16_66751643:578; SSSE3: # %bb.0:579; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]580; SSSE3-NEXT: retq581;582; SSE41-LABEL: shuffle_v8i16_66751643:583; SSE41: # %bb.0:584; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]585; SSE41-NEXT: retq586;587; AVX-LABEL: shuffle_v8i16_66751643:588; AVX: # %bb.0:589; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]590; AVX-NEXT: retq591 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 6, i32 6, i32 7, i32 5, i32 1, i32 6, i32 4, i32 3>592 ret <8 x i16> %shuffle593}594 595define <8 x i16> @shuffle_v8i16_60514754(<8 x i16> %a, <8 x i16> %b) {596; SSE2-LABEL: shuffle_v8i16_60514754:597; SSE2: # %bb.0:598; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]599; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]600; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]601; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,5,6]602; SSE2-NEXT: retq603;604; SSSE3-LABEL: shuffle_v8i16_60514754:605; SSSE3: # %bb.0:606; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]607; SSSE3-NEXT: retq608;609; SSE41-LABEL: shuffle_v8i16_60514754:610; SSE41: # %bb.0:611; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]612; SSE41-NEXT: retq613;614; AVX-LABEL: shuffle_v8i16_60514754:615; AVX: # %bb.0:616; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]617; AVX-NEXT: retq618 %shuffle = shufflevector <8 x i16> %a, <8 x i16> poison, <8 x i32> <i32 6, i32 0, i32 5, i32 1, i32 4, i32 7, i32 5, i32 4>619 ret <8 x i16> %shuffle620}621 622define <8 x i16> @shuffle_v8i16_00444444(<8 x i16> %a, <8 x i16> %b) {623; SSE2-LABEL: shuffle_v8i16_00444444:624; SSE2: # %bb.0:625; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]626; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]627; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]628; SSE2-NEXT: retq629;630; SSSE3-LABEL: shuffle_v8i16_00444444:631; SSSE3: # %bb.0:632; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]633; SSSE3-NEXT: retq634;635; SSE41-LABEL: shuffle_v8i16_00444444:636; SSE41: # %bb.0:637; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]638; SSE41-NEXT: retq639;640; AVX-LABEL: shuffle_v8i16_00444444:641; AVX: # %bb.0:642; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]643; AVX-NEXT: retq644 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>645 ret <8 x i16> %shuffle646}647define <8 x i16> @shuffle_v8i16_44004444(<8 x i16> %a, <8 x i16> %b) {648; SSE2-LABEL: shuffle_v8i16_44004444:649; SSE2: # %bb.0:650; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]651; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,2,0,0,4,5,6,7]652; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]653; SSE2-NEXT: retq654;655; SSSE3-LABEL: shuffle_v8i16_44004444:656; SSSE3: # %bb.0:657; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]658; SSSE3-NEXT: retq659;660; SSE41-LABEL: shuffle_v8i16_44004444:661; SSE41: # %bb.0:662; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]663; SSE41-NEXT: retq664;665; AVX-LABEL: shuffle_v8i16_44004444:666; AVX: # %bb.0:667; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]668; AVX-NEXT: retq669 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>670 ret <8 x i16> %shuffle671}672define <8 x i16> @shuffle_v8i16_04404444(<8 x i16> %a, <8 x i16> %b) {673; SSE2-LABEL: shuffle_v8i16_04404444:674; SSE2: # %bb.0:675; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]676; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]677; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]678; SSE2-NEXT: retq679;680; SSSE3-LABEL: shuffle_v8i16_04404444:681; SSSE3: # %bb.0:682; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]683; SSSE3-NEXT: retq684;685; SSE41-LABEL: shuffle_v8i16_04404444:686; SSE41: # %bb.0:687; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]688; SSE41-NEXT: retq689;690; AVX-LABEL: shuffle_v8i16_04404444:691; AVX: # %bb.0:692; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]693; AVX-NEXT: retq694 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 4, i32 4, i32 4, i32 4>695 ret <8 x i16> %shuffle696}697define <8 x i16> @shuffle_v8i16_04400000(<8 x i16> %a, <8 x i16> %b) {698; SSE2-LABEL: shuffle_v8i16_04400000:699; SSE2: # %bb.0:700; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,0,3]701; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]702; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]703; SSE2-NEXT: retq704;705; SSSE3-LABEL: shuffle_v8i16_04400000:706; SSSE3: # %bb.0:707; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]708; SSSE3-NEXT: retq709;710; SSE41-LABEL: shuffle_v8i16_04400000:711; SSE41: # %bb.0:712; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]713; SSE41-NEXT: retq714;715; AVX-LABEL: shuffle_v8i16_04400000:716; AVX: # %bb.0:717; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]718; AVX-NEXT: retq719 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 0, i32 0, i32 0, i32 0>720 ret <8 x i16> %shuffle721}722define <8 x i16> @shuffle_v8i16_04404567(<8 x i16> %a, <8 x i16> %b) {723; SSE-LABEL: shuffle_v8i16_04404567:724; SSE: # %bb.0:725; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]726; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]727; SSE-NEXT: retq728;729; AVX1-LABEL: shuffle_v8i16_04404567:730; AVX1: # %bb.0:731; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]732; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]733; AVX1-NEXT: retq734;735; AVX2-SLOW-LABEL: shuffle_v8i16_04404567:736; AVX2-SLOW: # %bb.0:737; AVX2-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]738; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]739; AVX2-SLOW-NEXT: retq740;741; AVX2-FAST-LABEL: shuffle_v8i16_04404567:742; AVX2-FAST: # %bb.0:743; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,10,11,12,13,14,15]744; AVX2-FAST-NEXT: retq745;746; AVX512VL-SLOW-LABEL: shuffle_v8i16_04404567:747; AVX512VL-SLOW: # %bb.0:748; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]749; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]750; AVX512VL-SLOW-NEXT: retq751;752; AVX512VL-FAST-LABEL: shuffle_v8i16_04404567:753; AVX512VL-FAST: # %bb.0:754; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,10,11,12,13,14,15]755; AVX512VL-FAST-NEXT: retq756;757; XOP-LABEL: shuffle_v8i16_04404567:758; XOP: # %bb.0:759; XOP-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]760; XOP-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]761; XOP-NEXT: retq762 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 4, i32 5, i32 6, i32 7>763 ret <8 x i16> %shuffle764}765 766define <8 x i16> @shuffle_v8i16_0X444444(<8 x i16> %a, <8 x i16> %b) {767; SSE2-LABEL: shuffle_v8i16_0X444444:768; SSE2: # %bb.0:769; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]770; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,2,2,4,5,6,7]771; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]772; SSE2-NEXT: retq773;774; SSSE3-LABEL: shuffle_v8i16_0X444444:775; SSSE3: # %bb.0:776; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]777; SSSE3-NEXT: retq778;779; SSE41-LABEL: shuffle_v8i16_0X444444:780; SSE41: # %bb.0:781; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]782; SSE41-NEXT: retq783;784; AVX-LABEL: shuffle_v8i16_0X444444:785; AVX: # %bb.0:786; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]787; AVX-NEXT: retq788 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 poison, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>789 ret <8 x i16> %shuffle790}791define <8 x i16> @shuffle_v8i16_44X04444(<8 x i16> %a, <8 x i16> %b) {792; SSE2-LABEL: shuffle_v8i16_44X04444:793; SSE2: # %bb.0:794; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]795; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,2,2,0,4,5,6,7]796; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]797; SSE2-NEXT: retq798;799; SSSE3-LABEL: shuffle_v8i16_44X04444:800; SSSE3: # %bb.0:801; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]802; SSSE3-NEXT: retq803;804; SSE41-LABEL: shuffle_v8i16_44X04444:805; SSE41: # %bb.0:806; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]807; SSE41-NEXT: retq808;809; AVX-LABEL: shuffle_v8i16_44X04444:810; AVX: # %bb.0:811; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]812; AVX-NEXT: retq813 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 poison, i32 0, i32 4, i32 4, i32 4, i32 4>814 ret <8 x i16> %shuffle815}816define <8 x i16> @shuffle_v8i16_X4404444(<8 x i16> %a, <8 x i16> %b) {817; SSE2-LABEL: shuffle_v8i16_X4404444:818; SSE2: # %bb.0:819; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]820; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]821; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]822; SSE2-NEXT: retq823;824; SSSE3-LABEL: shuffle_v8i16_X4404444:825; SSSE3: # %bb.0:826; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]827; SSSE3-NEXT: retq828;829; SSE41-LABEL: shuffle_v8i16_X4404444:830; SSE41: # %bb.0:831; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]832; SSE41-NEXT: retq833;834; AVX-LABEL: shuffle_v8i16_X4404444:835; AVX: # %bb.0:836; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]837; AVX-NEXT: retq838 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 4, i32 4, i32 0, i32 4, i32 4, i32 4, i32 4>839 ret <8 x i16> %shuffle840}841 842define <8 x i16> @shuffle_v8i16_0127XXXX(<8 x i16> %a, <8 x i16> %b) {843; SSE2-LABEL: shuffle_v8i16_0127XXXX:844; SSE2: # %bb.0:845; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]846; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,7]847; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]848; SSE2-NEXT: retq849;850; SSSE3-LABEL: shuffle_v8i16_0127XXXX:851; SSSE3: # %bb.0:852; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]853; SSSE3-NEXT: retq854;855; SSE41-LABEL: shuffle_v8i16_0127XXXX:856; SSE41: # %bb.0:857; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]858; SSE41-NEXT: retq859;860; AVX-LABEL: shuffle_v8i16_0127XXXX:861; AVX: # %bb.0:862; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]863; AVX-NEXT: retq864 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 7, i32 poison, i32 poison, i32 poison, i32 poison>865 ret <8 x i16> %shuffle866}867 868define <8 x i16> @shuffle_v8i16_XXXX4563(<8 x i16> %a, <8 x i16> %b) {869; SSE2-LABEL: shuffle_v8i16_XXXX4563:870; SSE2: # %bb.0:871; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]872; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]873; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,2,0]874; SSE2-NEXT: retq875;876; SSSE3-LABEL: shuffle_v8i16_XXXX4563:877; SSSE3: # %bb.0:878; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]879; SSSE3-NEXT: retq880;881; SSE41-LABEL: shuffle_v8i16_XXXX4563:882; SSE41: # %bb.0:883; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]884; SSE41-NEXT: retq885;886; AVX-LABEL: shuffle_v8i16_XXXX4563:887; AVX: # %bb.0:888; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]889; AVX-NEXT: retq890 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 4, i32 5, i32 6, i32 3>891 ret <8 x i16> %shuffle892}893 894define <8 x i16> @shuffle_v8i16_4563XXXX(<8 x i16> %a, <8 x i16> %b) {895; SSE2-LABEL: shuffle_v8i16_4563XXXX:896; SSE2: # %bb.0:897; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]898; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]899; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,0,2,3]900; SSE2-NEXT: retq901;902; SSSE3-LABEL: shuffle_v8i16_4563XXXX:903; SSSE3: # %bb.0:904; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]905; SSSE3-NEXT: retq906;907; SSE41-LABEL: shuffle_v8i16_4563XXXX:908; SSE41: # %bb.0:909; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]910; SSE41-NEXT: retq911;912; AVX-LABEL: shuffle_v8i16_4563XXXX:913; AVX: # %bb.0:914; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]915; AVX-NEXT: retq916 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>917 ret <8 x i16> %shuffle918}919 920define <8 x i16> @shuffle_v8i16_01274563(<8 x i16> %a, <8 x i16> %b) {921; SSE2-LABEL: shuffle_v8i16_01274563:922; SSE2: # %bb.0:923; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]924; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]925; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]926; SSE2-NEXT: retq927;928; SSSE3-LABEL: shuffle_v8i16_01274563:929; SSSE3: # %bb.0:930; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]931; SSSE3-NEXT: retq932;933; SSE41-LABEL: shuffle_v8i16_01274563:934; SSE41: # %bb.0:935; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]936; SSE41-NEXT: retq937;938; AVX-LABEL: shuffle_v8i16_01274563:939; AVX: # %bb.0:940; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]941; AVX-NEXT: retq942 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 3>943 ret <8 x i16> %shuffle944}945 946define <8 x i16> @shuffle_v8i16_45630127(<8 x i16> %a, <8 x i16> %b) {947; SSE2-LABEL: shuffle_v8i16_45630127:948; SSE2: # %bb.0:949; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]950; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]951; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,0,3,1]952; SSE2-NEXT: retq953;954; SSSE3-LABEL: shuffle_v8i16_45630127:955; SSSE3: # %bb.0:956; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]957; SSSE3-NEXT: retq958;959; SSE41-LABEL: shuffle_v8i16_45630127:960; SSE41: # %bb.0:961; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]962; SSE41-NEXT: retq963;964; AVX-LABEL: shuffle_v8i16_45630127:965; AVX: # %bb.0:966; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]967; AVX-NEXT: retq968 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 3, i32 0, i32 1, i32 2, i32 7>969 ret <8 x i16> %shuffle970}971 972define <8 x i16> @shuffle_v8i16_37102735(<8 x i16> %a, <8 x i16> %b) {973; SSE2-LABEL: shuffle_v8i16_37102735:974; SSE2: # %bb.0:975; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]976; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]977; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]978; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]979; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]980; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,4,5,6]981; SSE2-NEXT: retq982;983; SSSE3-LABEL: shuffle_v8i16_37102735:984; SSSE3: # %bb.0:985; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]986; SSSE3-NEXT: retq987;988; SSE41-LABEL: shuffle_v8i16_37102735:989; SSE41: # %bb.0:990; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]991; SSE41-NEXT: retq992;993; AVX-LABEL: shuffle_v8i16_37102735:994; AVX: # %bb.0:995; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]996; AVX-NEXT: retq997 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 7, i32 1, i32 0, i32 2, i32 7, i32 3, i32 5>998 ret <8 x i16> %shuffle999}1000 1001define <8 x i16> @shuffle_v8i16_08192a3b(<8 x i16> %a, <8 x i16> %b) {1002; SSE-LABEL: shuffle_v8i16_08192a3b:1003; SSE: # %bb.0:1004; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1005; SSE-NEXT: retq1006;1007; AVX-LABEL: shuffle_v8i16_08192a3b:1008; AVX: # %bb.0:1009; AVX-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1010; AVX-NEXT: retq1011 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>1012 ret <8 x i16> %shuffle1013}1014 1015define <8 x i16> @shuffle_v8i16_0c1d2e3f(<8 x i16> %a, <8 x i16> %b) {1016; SSE-LABEL: shuffle_v8i16_0c1d2e3f:1017; SSE: # %bb.0:1018; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1019; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1020; SSE-NEXT: retq1021;1022; AVX-LABEL: shuffle_v8i16_0c1d2e3f:1023; AVX: # %bb.0:1024; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1025; AVX-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1026; AVX-NEXT: retq1027 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 12, i32 1, i32 13, i32 2, i32 14, i32 3, i32 15>1028 ret <8 x i16> %shuffle1029}1030 1031define <8 x i16> @shuffle_v8i16_4c5d6e7f(<8 x i16> %a, <8 x i16> %b) {1032; SSE-LABEL: shuffle_v8i16_4c5d6e7f:1033; SSE: # %bb.0:1034; SSE-NEXT: punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1035; SSE-NEXT: retq1036;1037; AVX-LABEL: shuffle_v8i16_4c5d6e7f:1038; AVX: # %bb.0:1039; AVX-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1040; AVX-NEXT: retq1041 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>1042 ret <8 x i16> %shuffle1043}1044 1045define <8 x i16> @shuffle_v8i16_48596a7b(<8 x i16> %a, <8 x i16> %b) {1046; SSE-LABEL: shuffle_v8i16_48596a7b:1047; SSE: # %bb.0:1048; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1049; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1050; SSE-NEXT: retq1051;1052; AVX-LABEL: shuffle_v8i16_48596a7b:1053; AVX: # %bb.0:1054; AVX-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1055; AVX-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1056; AVX-NEXT: retq1057 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 8, i32 5, i32 9, i32 6, i32 10, i32 7, i32 11>1058 ret <8 x i16> %shuffle1059}1060 1061define <8 x i16> @shuffle_v8i16_08196e7f(<8 x i16> %a, <8 x i16> %b) {1062; SSE-LABEL: shuffle_v8i16_08196e7f:1063; SSE: # %bb.0:1064; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]1065; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]1066; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1067; SSE-NEXT: retq1068;1069; AVX1-LABEL: shuffle_v8i16_08196e7f:1070; AVX1: # %bb.0:1071; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]1072; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]1073; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1074; AVX1-NEXT: retq1075;1076; AVX2OR512VL-LABEL: shuffle_v8i16_08196e7f:1077; AVX2OR512VL: # %bb.0:1078; AVX2OR512VL-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]1079; AVX2OR512VL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]1080; AVX2OR512VL-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1081; AVX2OR512VL-NEXT: retq1082;1083; XOP-LABEL: shuffle_v8i16_08196e7f:1084; XOP: # %bb.0:1085; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,1],xmm0[2,3],xmm1[2,3],xmm0[12,13],xmm1[12,13],xmm0[14,15],xmm1[14,15]1086; XOP-NEXT: retq1087 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 6, i32 14, i32 7, i32 15>1088 ret <8 x i16> %shuffle1089}1090 1091define <8 x i16> @shuffle_v8i16_0c1d6879(<8 x i16> %a, <8 x i16> %b) {1092; SSE-LABEL: shuffle_v8i16_0c1d6879:1093; SSE: # %bb.0:1094; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]1095; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]1096; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1097; SSE-NEXT: retq1098;1099; AVX1-LABEL: shuffle_v8i16_0c1d6879:1100; AVX1: # %bb.0:1101; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]1102; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]1103; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1104; AVX1-NEXT: retq1105;1106; AVX2OR512VL-LABEL: shuffle_v8i16_0c1d6879:1107; AVX2OR512VL: # %bb.0:1108; AVX2OR512VL-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]1109; AVX2OR512VL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]1110; AVX2OR512VL-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1111; AVX2OR512VL-NEXT: retq1112;1113; XOP-LABEL: shuffle_v8i16_0c1d6879:1114; XOP: # %bb.0:1115; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1],xmm1[8,9],xmm0[2,3],xmm1[10,11],xmm0[12,13],xmm1[0,1],xmm0[14,15],xmm1[2,3]1116; XOP-NEXT: retq1117 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 12, i32 1, i32 13, i32 6, i32 8, i32 7, i32 9>1118 ret <8 x i16> %shuffle1119}1120 1121define <8 x i16> @shuffle_v8i16_109832ba(<8 x i16> %a, <8 x i16> %b) {1122; SSE-LABEL: shuffle_v8i16_109832ba:1123; SSE: # %bb.0:1124; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1125; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]1126; SSE-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]1127; SSE-NEXT: retq1128;1129; AVX1-LABEL: shuffle_v8i16_109832ba:1130; AVX1: # %bb.0:1131; AVX1-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1132; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]1133; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]1134; AVX1-NEXT: retq1135;1136; AVX2-SLOW-LABEL: shuffle_v8i16_109832ba:1137; AVX2-SLOW: # %bb.0:1138; AVX2-SLOW-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1139; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]1140; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]1141; AVX2-SLOW-NEXT: retq1142;1143; AVX2-FAST-LABEL: shuffle_v8i16_109832ba:1144; AVX2-FAST: # %bb.0:1145; AVX2-FAST-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1146; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,6,7,2,3,12,13,8,9,14,15,10,11]1147; AVX2-FAST-NEXT: retq1148;1149; AVX512VL-SLOW-LABEL: shuffle_v8i16_109832ba:1150; AVX512VL-SLOW: # %bb.0:1151; AVX512VL-SLOW-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1152; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]1153; AVX512VL-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]1154; AVX512VL-SLOW-NEXT: retq1155;1156; AVX512VL-FAST-LABEL: shuffle_v8i16_109832ba:1157; AVX512VL-FAST: # %bb.0:1158; AVX512VL-FAST-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1159; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,6,7,2,3,12,13,8,9,14,15,10,11]1160; AVX512VL-FAST-NEXT: retq1161;1162; XOP-LABEL: shuffle_v8i16_109832ba:1163; XOP: # %bb.0:1164; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[2,3,0,1],xmm1[2,3,0,1],xmm0[6,7,4,5],xmm1[6,7,4,5]1165; XOP-NEXT: retq1166 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 0, i32 9, i32 8, i32 3, i32 2, i32 11, i32 10>1167 ret <8 x i16> %shuffle1168}1169 1170define <8 x i16> @shuffle_v8i16_8091a2b3(<8 x i16> %a, <8 x i16> %b) {1171; SSE-LABEL: shuffle_v8i16_8091a2b3:1172; SSE: # %bb.0:1173; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1174; SSE-NEXT: movdqa %xmm1, %xmm01175; SSE-NEXT: retq1176;1177; AVX-LABEL: shuffle_v8i16_8091a2b3:1178; AVX: # %bb.0:1179; AVX-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1180; AVX-NEXT: retq1181 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 0, i32 9, i32 1, i32 10, i32 2, i32 11, i32 3>1182 ret <8 x i16> %shuffle1183}1184define <8 x i16> @shuffle_v8i16_c4d5e6f7(<8 x i16> %a, <8 x i16> %b) {1185; SSE-LABEL: shuffle_v8i16_c4d5e6f7:1186; SSE: # %bb.0:1187; SSE-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1188; SSE-NEXT: movdqa %xmm1, %xmm01189; SSE-NEXT: retq1190;1191; AVX-LABEL: shuffle_v8i16_c4d5e6f7:1192; AVX: # %bb.0:1193; AVX-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1194; AVX-NEXT: retq1195 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 12, i32 4, i32 13, i32 5, i32 14, i32 6, i32 15, i32 7>1196 ret <8 x i16> %shuffle1197}1198 1199define <8 x i16> @shuffle_v8i16_0213cedf(<8 x i16> %a, <8 x i16> %b) {1200; SSE2-LABEL: shuffle_v8i16_0213cedf:1201; SSE2: # %bb.0:1202; SSE2-NEXT: pshuflw {{.*#+}} xmm2 = xmm0[0,2,1,3,4,5,6,7]1203; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,6,5,7]1204; SSE2-NEXT: movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]1205; SSE2-NEXT: retq1206;1207; SSSE3-LABEL: shuffle_v8i16_0213cedf:1208; SSSE3: # %bb.0:1209; SSSE3-NEXT: pshuflw {{.*#+}} xmm2 = xmm0[0,2,1,3,4,5,6,7]1210; SSSE3-NEXT: pshufhw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,6,5,7]1211; SSSE3-NEXT: movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]1212; SSSE3-NEXT: retq1213;1214; SSE41-LABEL: shuffle_v8i16_0213cedf:1215; SSE41: # %bb.0:1216; SSE41-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]1217; SSE41-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]1218; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1219; SSE41-NEXT: retq1220;1221; AVX1-LABEL: shuffle_v8i16_0213cedf:1222; AVX1: # %bb.0:1223; AVX1-NEXT: vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]1224; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]1225; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1226; AVX1-NEXT: retq1227;1228; AVX2-SLOW-LABEL: shuffle_v8i16_0213cedf:1229; AVX2-SLOW: # %bb.0:1230; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]1231; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]1232; AVX2-SLOW-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1233; AVX2-SLOW-NEXT: retq1234;1235; AVX2-FAST-LABEL: shuffle_v8i16_0213cedf:1236; AVX2-FAST: # %bb.0:1237; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[8,9,12,13,10,11,14,15,u,u,u,u,u,u,u,u]1238; AVX2-FAST-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]1239; AVX2-FAST-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1240; AVX2-FAST-NEXT: retq1241;1242; AVX512VL-SLOW-LABEL: shuffle_v8i16_0213cedf:1243; AVX512VL-SLOW: # %bb.0:1244; AVX512VL-SLOW-NEXT: vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]1245; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]1246; AVX512VL-SLOW-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1247; AVX512VL-SLOW-NEXT: retq1248;1249; AVX512VL-FAST-ALL-LABEL: shuffle_v8i16_0213cedf:1250; AVX512VL-FAST-ALL: # %bb.0:1251; AVX512VL-FAST-ALL-NEXT: vpmovsxbw {{.*#+}} xmm2 = [0,2,1,3,12,14,13,15]1252; AVX512VL-FAST-ALL-NEXT: vpermt2w %xmm1, %xmm2, %xmm01253; AVX512VL-FAST-ALL-NEXT: retq1254;1255; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i16_0213cedf:1256; AVX512VL-FAST-PERLANE: # %bb.0:1257; AVX512VL-FAST-PERLANE-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[8,9,12,13,10,11,14,15,u,u,u,u,u,u,u,u]1258; AVX512VL-FAST-PERLANE-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]1259; AVX512VL-FAST-PERLANE-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1260; AVX512VL-FAST-PERLANE-NEXT: retq1261;1262; XOP-LABEL: shuffle_v8i16_0213cedf:1263; XOP: # %bb.0:1264; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1,4,5,2,3,6,7],xmm1[8,9,12,13,10,11,14,15]1265; XOP-NEXT: retq1266 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 1, i32 3, i32 12, i32 14, i32 13, i32 15>1267 ret <8 x i16> %shuffle1268}1269 1270define <8 x i16> @shuffle_v8i16_443aXXXX(<8 x i16> %a, <8 x i16> %b) {1271; SSE2-LABEL: shuffle_v8i16_443aXXXX:1272; SSE2: # %bb.0:1273; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,0,65535,65535,65535,65535,65535]1274; SSE2-NEXT: pand %xmm2, %xmm01275; SSE2-NEXT: pandn %xmm1, %xmm21276; SSE2-NEXT: por %xmm0, %xmm21277; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,1,2,3]1278; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]1279; SSE2-NEXT: retq1280;1281; SSSE3-LABEL: shuffle_v8i16_443aXXXX:1282; SSSE3: # %bb.0:1283; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[4,5,u,u,u,u,u,u,u,u]1284; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7],zero,zero,xmm0[u,u,u,u,u,u,u,u]1285; SSSE3-NEXT: por %xmm1, %xmm01286; SSSE3-NEXT: retq1287;1288; SSE41-LABEL: shuffle_v8i16_443aXXXX:1289; SSE41: # %bb.0:1290; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]1291; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]1292; SSE41-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]1293; SSE41-NEXT: retq1294;1295; AVX1-LABEL: shuffle_v8i16_443aXXXX:1296; AVX1: # %bb.0:1297; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]1298; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]1299; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]1300; AVX1-NEXT: retq1301;1302; AVX2-SLOW-LABEL: shuffle_v8i16_443aXXXX:1303; AVX2-SLOW: # %bb.0:1304; AVX2-SLOW-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]1305; AVX2-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]1306; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]1307; AVX2-SLOW-NEXT: retq1308;1309; AVX2-FAST-LABEL: shuffle_v8i16_443aXXXX:1310; AVX2-FAST: # %bb.0:1311; AVX2-FAST-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]1312; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7,4,5,8,9,10,11,12,13,14,15]1313; AVX2-FAST-NEXT: retq1314;1315; AVX512VL-SLOW-LABEL: shuffle_v8i16_443aXXXX:1316; AVX512VL-SLOW: # %bb.0:1317; AVX512VL-SLOW-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]1318; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]1319; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]1320; AVX512VL-SLOW-NEXT: retq1321;1322; AVX512VL-FAST-LABEL: shuffle_v8i16_443aXXXX:1323; AVX512VL-FAST: # %bb.0:1324; AVX512VL-FAST-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]1325; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7,4,5,8,9,10,11,12,13,14,15]1326; AVX512VL-FAST-NEXT: retq1327;1328; XOP-LABEL: shuffle_v8i16_443aXXXX:1329; XOP: # %bb.0:1330; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7],xmm1[4,5],xmm0[8,9,10,11,12,13,14,15]1331; XOP-NEXT: retq1332 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 3, i32 10, i32 poison, i32 poison, i32 poison, i32 poison>1333 ret <8 x i16> %shuffle1334}1335 1336define <8 x i16> @shuffle_v8i16_032dXXXX(<8 x i16> %a, <8 x i16> %b) {1337; SSE2-LABEL: shuffle_v8i16_032dXXXX:1338; SSE2: # %bb.0:1339; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1340; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1,2,0]1341; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,6,7]1342; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]1343; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]1344; SSE2-NEXT: retq1345;1346; SSSE3-LABEL: shuffle_v8i16_032dXXXX:1347; SSSE3: # %bb.0:1348; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,u,u,u,u,u,u,u,u]1349; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5],zero,zero,xmm0[u,u,u,u,u,u,u,u]1350; SSSE3-NEXT: por %xmm1, %xmm01351; SSSE3-NEXT: retq1352;1353; SSE41-LABEL: shuffle_v8i16_032dXXXX:1354; SSE41: # %bb.0:1355; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1356; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]1357; SSE41-NEXT: retq1358;1359; AVX1-LABEL: shuffle_v8i16_032dXXXX:1360; AVX1: # %bb.0:1361; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1362; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]1363; AVX1-NEXT: retq1364;1365; AVX2-LABEL: shuffle_v8i16_032dXXXX:1366; AVX2: # %bb.0:1367; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1368; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]1369; AVX2-NEXT: retq1370;1371; AVX512VL-LABEL: shuffle_v8i16_032dXXXX:1372; AVX512VL: # %bb.0:1373; AVX512VL-NEXT: vpmovsxbw {{.*#+}} xmm2 = [0,3,2,13,0,13,0,1]1374; AVX512VL-NEXT: vpermt2w %xmm1, %xmm2, %xmm01375; AVX512VL-NEXT: retq1376;1377; XOP-LABEL: shuffle_v8i16_032dXXXX:1378; XOP: # %bb.0:1379; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5],xmm1[10,11],xmm0[0,1],xmm1[10,11],xmm0[0,1,2,3]1380; XOP-NEXT: retq1381 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 3, i32 2, i32 13, i32 poison, i32 poison, i32 poison, i32 poison>1382 ret <8 x i16> %shuffle1383}1384define <8 x i16> @shuffle_v8i16_XXXdXXXX(<8 x i16> %a, <8 x i16> %b) {1385; SSE-LABEL: shuffle_v8i16_XXXdXXXX:1386; SSE: # %bb.0:1387; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,2,3,3]1388; SSE-NEXT: retq1389;1390; AVX-LABEL: shuffle_v8i16_XXXdXXXX:1391; AVX: # %bb.0:1392; AVX-NEXT: vshufps {{.*#+}} xmm0 = xmm1[2,2,3,3]1393; AVX-NEXT: retq1394 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 13, i32 poison, i32 poison, i32 poison, i32 poison>1395 ret <8 x i16> %shuffle1396}1397 1398define <8 x i16> @shuffle_v8i16_012dXXXX(<8 x i16> %a, <8 x i16> %b) {1399; SSE2-LABEL: shuffle_v8i16_012dXXXX:1400; SSE2: # %bb.0:1401; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,65535,0,65535,65535,65535,65535]1402; SSE2-NEXT: pand %xmm2, %xmm01403; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]1404; SSE2-NEXT: pandn %xmm1, %xmm21405; SSE2-NEXT: por %xmm2, %xmm01406; SSE2-NEXT: retq1407;1408; SSSE3-LABEL: shuffle_v8i16_012dXXXX:1409; SSSE3: # %bb.0:1410; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,u,u,u,u,u,u,u,u]1411; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],zero,zero,xmm0[u,u,u,u,u,u,u,u]1412; SSSE3-NEXT: por %xmm1, %xmm01413; SSSE3-NEXT: retq1414;1415; SSE41-LABEL: shuffle_v8i16_012dXXXX:1416; SSE41: # %bb.0:1417; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]1418; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]1419; SSE41-NEXT: retq1420;1421; AVX-LABEL: shuffle_v8i16_012dXXXX:1422; AVX: # %bb.0:1423; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]1424; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]1425; AVX-NEXT: retq1426 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 13, i32 poison, i32 poison, i32 poison, i32 poison>1427 ret <8 x i16> %shuffle1428}1429 1430define <8 x i16> @shuffle_v8i16_XXXXcde3(<8 x i16> %a, <8 x i16> %b) {1431; SSE2-LABEL: shuffle_v8i16_XXXXcde3:1432; SSE2: # %bb.0:1433; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535,65535,65535,65535,0]1434; SSE2-NEXT: pand %xmm2, %xmm11435; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]1436; SSE2-NEXT: pandn %xmm0, %xmm21437; SSE2-NEXT: por %xmm1, %xmm21438; SSE2-NEXT: movdqa %xmm2, %xmm01439; SSE2-NEXT: retq1440;1441; SSSE3-LABEL: shuffle_v8i16_XXXXcde3:1442; SSSE3: # %bb.0:1443; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,u,u,u,u],zero,zero,zero,zero,zero,zero,xmm0[6,7]1444; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,8,9,10,11,12,13],zero,zero1445; SSSE3-NEXT: por %xmm1, %xmm01446; SSSE3-NEXT: retq1447;1448; SSE41-LABEL: shuffle_v8i16_XXXXcde3:1449; SSE41: # %bb.0:1450; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]1451; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]1452; SSE41-NEXT: retq1453;1454; AVX1-LABEL: shuffle_v8i16_XXXXcde3:1455; AVX1: # %bb.0:1456; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]1457; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]1458; AVX1-NEXT: retq1459;1460; AVX2OR512VL-LABEL: shuffle_v8i16_XXXXcde3:1461; AVX2OR512VL: # %bb.0:1462; AVX2OR512VL-NEXT: vpbroadcastq %xmm0, %xmm01463; AVX2OR512VL-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]1464; AVX2OR512VL-NEXT: retq1465;1466; XOPAVX1-LABEL: shuffle_v8i16_XXXXcde3:1467; XOPAVX1: # %bb.0:1468; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]1469; XOPAVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]1470; XOPAVX1-NEXT: retq1471;1472; XOPAVX2-LABEL: shuffle_v8i16_XXXXcde3:1473; XOPAVX2: # %bb.0:1474; XOPAVX2-NEXT: vpbroadcastq %xmm0, %xmm01475; XOPAVX2-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]1476; XOPAVX2-NEXT: retq1477 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 12, i32 13, i32 14, i32 3>1478 ret <8 x i16> %shuffle1479}1480 1481define <8 x i16> @shuffle_v8i16_cde3XXXX(<8 x i16> %a, <8 x i16> %b) {1482; SSE2-LABEL: shuffle_v8i16_cde3XXXX:1483; SSE2: # %bb.0:1484; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,65535,0,65535,65535,65535,65535]1485; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1486; SSE2-NEXT: pand %xmm2, %xmm11487; SSE2-NEXT: pandn %xmm0, %xmm21488; SSE2-NEXT: por %xmm1, %xmm21489; SSE2-NEXT: movdqa %xmm2, %xmm01490; SSE2-NEXT: retq1491;1492; SSSE3-LABEL: shuffle_v8i16_cde3XXXX:1493; SSSE3: # %bb.0:1494; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[6,7,u,u,u,u,u,u,u,u]1495; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13],zero,zero,xmm1[u,u,u,u,u,u,u,u]1496; SSSE3-NEXT: por %xmm1, %xmm01497; SSSE3-NEXT: retq1498;1499; SSE41-LABEL: shuffle_v8i16_cde3XXXX:1500; SSE41: # %bb.0:1501; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1502; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]1503; SSE41-NEXT: retq1504;1505; AVX-LABEL: shuffle_v8i16_cde3XXXX:1506; AVX: # %bb.0:1507; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1508; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]1509; AVX-NEXT: retq1510 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 12, i32 13, i32 14, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>1511 ret <8 x i16> %shuffle1512}1513 1514define <8 x i16> @shuffle_v8i16_012dcde3(<8 x i16> %a, <8 x i16> %b) {1515; SSE2-LABEL: shuffle_v8i16_012dcde3:1516; SSE2: # %bb.0:1517; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1518; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3,2,1]1519; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]1520; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]1521; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]1522; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,5,7]1523; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]1524; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7]1525; SSE2-NEXT: retq1526;1527; SSSE3-LABEL: shuffle_v8i16_012dcde3:1528; SSSE3: # %bb.0:1529; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,8,9,10,11,12,13],zero,zero1530; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],zero,zero,zero,zero,zero,zero,zero,zero,xmm0[6,7]1531; SSSE3-NEXT: por %xmm1, %xmm01532; SSSE3-NEXT: retq1533;1534; SSE41-LABEL: shuffle_v8i16_012dcde3:1535; SSE41: # %bb.0:1536; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1537; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]1538; SSE41-NEXT: retq1539;1540; AVX1-LABEL: shuffle_v8i16_012dcde3:1541; AVX1: # %bb.0:1542; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1543; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]1544; AVX1-NEXT: retq1545;1546; AVX2-LABEL: shuffle_v8i16_012dcde3:1547; AVX2: # %bb.0:1548; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1549; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]1550; AVX2-NEXT: retq1551;1552; AVX512VL-SLOW-LABEL: shuffle_v8i16_012dcde3:1553; AVX512VL-SLOW: # %bb.0:1554; AVX512VL-SLOW-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1555; AVX512VL-SLOW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]1556; AVX512VL-SLOW-NEXT: retq1557;1558; AVX512VL-FAST-ALL-LABEL: shuffle_v8i16_012dcde3:1559; AVX512VL-FAST-ALL: # %bb.0:1560; AVX512VL-FAST-ALL-NEXT: vpmovsxbw {{.*#+}} xmm2 = [0,1,2,13,12,13,14,3]1561; AVX512VL-FAST-ALL-NEXT: vpermt2w %xmm1, %xmm2, %xmm01562; AVX512VL-FAST-ALL-NEXT: retq1563;1564; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i16_012dcde3:1565; AVX512VL-FAST-PERLANE: # %bb.0:1566; AVX512VL-FAST-PERLANE-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1567; AVX512VL-FAST-PERLANE-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]1568; AVX512VL-FAST-PERLANE-NEXT: retq1569;1570; XOP-LABEL: shuffle_v8i16_012dcde3:1571; XOP: # %bb.0:1572; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],xmm1[10,11,8,9,10,11,12,13],xmm0[6,7]1573; XOP-NEXT: retq1574 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 13, i32 12, i32 13, i32 14, i32 3>1575 ret <8 x i16> %shuffle1576}1577 1578define <8 x i16> @shuffle_v8i16_0923cde7(<8 x i16> %a, <8 x i16> %b) {1579; SSE2-LABEL: shuffle_v8i16_0923cde7:1580; SSE2: # %bb.0:1581; SSE2-NEXT: movaps {{.*#+}} xmm2 = [65535,0,65535,65535,0,0,0,65535]1582; SSE2-NEXT: andps %xmm2, %xmm01583; SSE2-NEXT: andnps %xmm1, %xmm21584; SSE2-NEXT: orps %xmm2, %xmm01585; SSE2-NEXT: retq1586;1587; SSSE3-LABEL: shuffle_v8i16_0923cde7:1588; SSSE3: # %bb.0:1589; SSSE3-NEXT: movaps {{.*#+}} xmm2 = [65535,0,65535,65535,0,0,0,65535]1590; SSSE3-NEXT: andps %xmm2, %xmm01591; SSSE3-NEXT: andnps %xmm1, %xmm21592; SSSE3-NEXT: orps %xmm2, %xmm01593; SSSE3-NEXT: retq1594;1595; SSE41-LABEL: shuffle_v8i16_0923cde7:1596; SSE41: # %bb.0:1597; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]1598; SSE41-NEXT: retq1599;1600; AVX-LABEL: shuffle_v8i16_0923cde7:1601; AVX: # %bb.0:1602; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]1603; AVX-NEXT: retq1604 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 3, i32 12, i32 13, i32 14, i32 7>1605 ret <8 x i16> %shuffle1606}1607 1608define <8 x i16> @shuffle_v8i16_XXX1X579(<8 x i16> %a, <8 x i16> %b) {1609; SSE2-LABEL: shuffle_v8i16_XXX1X579:1610; SSE2: # %bb.0:1611; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,0,0]1612; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535,65535,65535,65535,0]1613; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]1614; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]1615; SSE2-NEXT: pand %xmm1, %xmm01616; SSE2-NEXT: pandn %xmm2, %xmm11617; SSE2-NEXT: por %xmm0, %xmm11618; SSE2-NEXT: movdqa %xmm1, %xmm01619; SSE2-NEXT: retq1620;1621; SSSE3-LABEL: shuffle_v8i16_XXX1X579:1622; SSSE3: # %bb.0:1623; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u],zero,zero,xmm1[u,u],zero,zero,zero,zero,xmm1[2,3]1624; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,u,u,2,3,u,u,10,11,14,15],zero,zero1625; SSSE3-NEXT: por %xmm1, %xmm01626; SSSE3-NEXT: retq1627;1628; SSE41-LABEL: shuffle_v8i16_XXX1X579:1629; SSE41: # %bb.0:1630; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]1631; SSE41-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]1632; SSE41-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]1633; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]1634; SSE41-NEXT: retq1635;1636; AVX1-LABEL: shuffle_v8i16_XXX1X579:1637; AVX1: # %bb.0:1638; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]1639; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]1640; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]1641; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]1642; AVX1-NEXT: retq1643;1644; AVX2-SLOW-LABEL: shuffle_v8i16_XXX1X579:1645; AVX2-SLOW: # %bb.0:1646; AVX2-SLOW-NEXT: vpbroadcastd %xmm1, %xmm11647; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]1648; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]1649; AVX2-SLOW-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]1650; AVX2-SLOW-NEXT: retq1651;1652; AVX2-FAST-LABEL: shuffle_v8i16_XXX1X579:1653; AVX2-FAST: # %bb.0:1654; AVX2-FAST-NEXT: vpbroadcastd %xmm1, %xmm11655; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,8,9,10,11,14,15,u,u]1656; AVX2-FAST-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]1657; AVX2-FAST-NEXT: retq1658;1659; AVX512VL-SLOW-LABEL: shuffle_v8i16_XXX1X579:1660; AVX512VL-SLOW: # %bb.0:1661; AVX512VL-SLOW-NEXT: vpbroadcastd %xmm1, %xmm11662; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]1663; AVX512VL-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]1664; AVX512VL-SLOW-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]1665; AVX512VL-SLOW-NEXT: retq1666;1667; AVX512VL-FAST-ALL-LABEL: shuffle_v8i16_XXX1X579:1668; AVX512VL-FAST-ALL: # %bb.0:1669; AVX512VL-FAST-ALL-NEXT: vpmovsxbw {{.*#+}} xmm2 = [1,1,1,1,4,5,7,9]1670; AVX512VL-FAST-ALL-NEXT: vpermt2w %xmm1, %xmm2, %xmm01671; AVX512VL-FAST-ALL-NEXT: retq1672;1673; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i16_XXX1X579:1674; AVX512VL-FAST-PERLANE: # %bb.0:1675; AVX512VL-FAST-PERLANE-NEXT: vpbroadcastd %xmm1, %xmm11676; AVX512VL-FAST-PERLANE-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,8,9,10,11,14,15,u,u]1677; AVX512VL-FAST-PERLANE-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]1678; AVX512VL-FAST-PERLANE-NEXT: retq1679;1680; XOP-LABEL: shuffle_v8i16_XXX1X579:1681; XOP: # %bb.0:1682; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,8,9,10,11,14,15],xmm1[2,3]1683; XOP-NEXT: retq1684 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 5, i32 7, i32 9>1685 ret <8 x i16> %shuffle1686}1687 1688define <8 x i16> @shuffle_v8i16_XX4X8acX(<8 x i16> %a, <8 x i16> %b) {1689; SSE2-LABEL: shuffle_v8i16_XX4X8acX:1690; SSE2: # %bb.0:1691; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]1692; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]1693; SSE2-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,6,7,4,7]1694; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,2],xmm1[2,3]1695; SSE2-NEXT: retq1696;1697; SSSE3-LABEL: shuffle_v8i16_XX4X8acX:1698; SSSE3: # %bb.0:1699; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,8,9,u,u],zero,zero,zero,zero,zero,zero,xmm0[u,u]1700; SSSE3-NEXT: pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u],zero,zero,xmm1[u,u,0,1,4,5,8,9,u,u]1701; SSSE3-NEXT: por %xmm1, %xmm01702; SSSE3-NEXT: retq1703;1704; SSE41-LABEL: shuffle_v8i16_XX4X8acX:1705; SSE41: # %bb.0:1706; SSE41-NEXT: pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5]1707; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]1708; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1709; SSE41-NEXT: retq1710;1711; AVX1-LABEL: shuffle_v8i16_XX4X8acX:1712; AVX1: # %bb.0:1713; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5]1714; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]1715; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]1716; AVX1-NEXT: retq1717;1718; AVX2-LABEL: shuffle_v8i16_XX4X8acX:1719; AVX2: # %bb.0:1720; AVX2-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5]1721; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]1722; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1723; AVX2-NEXT: retq1724;1725; AVX512VL-LABEL: shuffle_v8i16_XX4X8acX:1726; AVX512VL: # %bb.0:1727; AVX512VL-NEXT: vpmovsxbw {{.*#+}} xmm2 = [4,5,4,5,8,10,12,10]1728; AVX512VL-NEXT: vpermt2w %xmm1, %xmm2, %xmm01729; AVX512VL-NEXT: retq1730;1731; XOP-LABEL: shuffle_v8i16_XX4X8acX:1732; XOP: # %bb.0:1733; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[8,9,10,11,8,9,10,11],xmm1[0,1,4,5,8,9,4,5]1734; XOP-NEXT: retq1735 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 poison, i32 4, i32 poison, i32 8, i32 10, i32 12, i32 poison>1736 ret <8 x i16> %shuffle1737}1738 1739define <8 x i16> @shuffle_v8i16_8zzzzzzz(i16 %i) {1740; SSE-LABEL: shuffle_v8i16_8zzzzzzz:1741; SSE: # %bb.0:1742; SSE-NEXT: movzwl %di, %eax1743; SSE-NEXT: movd %eax, %xmm01744; SSE-NEXT: retq1745;1746; AVX-LABEL: shuffle_v8i16_8zzzzzzz:1747; AVX: # %bb.0:1748; AVX-NEXT: movzwl %di, %eax1749; AVX-NEXT: vmovd %eax, %xmm01750; AVX-NEXT: retq1751 %a = insertelement <8 x i16> poison, i16 %i, i32 01752 %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 8, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1753 ret <8 x i16> %shuffle1754}1755 1756define <8 x i16> @shuffle_v8i16_z8zzzzzz(i16 %i) {1757; SSE-LABEL: shuffle_v8i16_z8zzzzzz:1758; SSE: # %bb.0:1759; SSE-NEXT: pxor %xmm0, %xmm01760; SSE-NEXT: pinsrw $1, %edi, %xmm01761; SSE-NEXT: retq1762;1763; AVX-LABEL: shuffle_v8i16_z8zzzzzz:1764; AVX: # %bb.0:1765; AVX-NEXT: vpxor %xmm0, %xmm0, %xmm01766; AVX-NEXT: vpinsrw $1, %edi, %xmm0, %xmm01767; AVX-NEXT: retq1768 %a = insertelement <8 x i16> poison, i16 %i, i32 01769 %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 2, i32 8, i32 3, i32 7, i32 6, i32 5, i32 4, i32 3>1770 ret <8 x i16> %shuffle1771}1772 1773define <8 x i16> @shuffle_v8i16_zzzzz8zz(i16 %i) {1774; SSE-LABEL: shuffle_v8i16_zzzzz8zz:1775; SSE: # %bb.0:1776; SSE-NEXT: pxor %xmm0, %xmm01777; SSE-NEXT: pinsrw $5, %edi, %xmm01778; SSE-NEXT: retq1779;1780; AVX-LABEL: shuffle_v8i16_zzzzz8zz:1781; AVX: # %bb.0:1782; AVX-NEXT: vpxor %xmm0, %xmm0, %xmm01783; AVX-NEXT: vpinsrw $5, %edi, %xmm0, %xmm01784; AVX-NEXT: retq1785 %a = insertelement <8 x i16> poison, i16 %i, i32 01786 %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0>1787 ret <8 x i16> %shuffle1788}1789 1790define <8 x i16> @shuffle_v8i16_zuuzuuz8(i16 %i) {1791; SSE-LABEL: shuffle_v8i16_zuuzuuz8:1792; SSE: # %bb.0:1793; SSE-NEXT: pxor %xmm0, %xmm01794; SSE-NEXT: pinsrw $7, %edi, %xmm01795; SSE-NEXT: retq1796;1797; AVX-LABEL: shuffle_v8i16_zuuzuuz8:1798; AVX: # %bb.0:1799; AVX-NEXT: vpxor %xmm0, %xmm0, %xmm01800; AVX-NEXT: vpinsrw $7, %edi, %xmm0, %xmm01801; AVX-NEXT: retq1802 %a = insertelement <8 x i16> poison, i16 %i, i32 01803 %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 8>1804 ret <8 x i16> %shuffle1805}1806 1807define <8 x i16> @shuffle_v8i16_zzBzzzzz(i16 %i) {1808; SSE-LABEL: shuffle_v8i16_zzBzzzzz:1809; SSE: # %bb.0:1810; SSE-NEXT: pxor %xmm0, %xmm01811; SSE-NEXT: pinsrw $2, %edi, %xmm01812; SSE-NEXT: retq1813;1814; AVX-LABEL: shuffle_v8i16_zzBzzzzz:1815; AVX: # %bb.0:1816; AVX-NEXT: vpxor %xmm0, %xmm0, %xmm01817; AVX-NEXT: vpinsrw $2, %edi, %xmm0, %xmm01818; AVX-NEXT: retq1819 %a = insertelement <8 x i16> poison, i16 %i, i32 31820 %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 11, i32 3, i32 4, i32 5, i32 6, i32 7>1821 ret <8 x i16> %shuffle1822}1823 1824define <8 x i16> @shuffle_v8i16_def01234(<8 x i16> %a, <8 x i16> %b) {1825; SSE2-LABEL: shuffle_v8i16_def01234:1826; SSE2: # %bb.0:1827; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1828; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]1829; SSE2-NEXT: por %xmm1, %xmm01830; SSE2-NEXT: retq1831;1832; SSSE3-LABEL: shuffle_v8i16_def01234:1833; SSSE3: # %bb.0:1834; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]1835; SSSE3-NEXT: retq1836;1837; SSE41-LABEL: shuffle_v8i16_def01234:1838; SSE41: # %bb.0:1839; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]1840; SSE41-NEXT: retq1841;1842; AVX-LABEL: shuffle_v8i16_def01234:1843; AVX: # %bb.0:1844; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]1845; AVX-NEXT: retq1846 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4>1847 ret <8 x i16> %shuffle1848}1849 1850define <8 x i16> @shuffle_v8i16_ueuu123u(<8 x i16> %a, <8 x i16> %b) {1851; SSE2-LABEL: shuffle_v8i16_ueuu123u:1852; SSE2: # %bb.0:1853; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1854; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]1855; SSE2-NEXT: por %xmm1, %xmm01856; SSE2-NEXT: retq1857;1858; SSSE3-LABEL: shuffle_v8i16_ueuu123u:1859; SSSE3: # %bb.0:1860; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]1861; SSSE3-NEXT: retq1862;1863; SSE41-LABEL: shuffle_v8i16_ueuu123u:1864; SSE41: # %bb.0:1865; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]1866; SSE41-NEXT: retq1867;1868; AVX-LABEL: shuffle_v8i16_ueuu123u:1869; AVX: # %bb.0:1870; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]1871; AVX-NEXT: retq1872 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 14, i32 poison, i32 poison, i32 1, i32 2, i32 3, i32 poison>1873 ret <8 x i16> %shuffle1874}1875 1876define <8 x i16> @shuffle_v8i16_56701234(<8 x i16> %a, <8 x i16> %b) {1877; SSE2-LABEL: shuffle_v8i16_56701234:1878; SSE2: # %bb.0:1879; SSE2-NEXT: movdqa %xmm0, %xmm11880; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1881; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]1882; SSE2-NEXT: por %xmm1, %xmm01883; SSE2-NEXT: retq1884;1885; SSSE3-LABEL: shuffle_v8i16_56701234:1886; SSSE3: # %bb.0:1887; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]1888; SSSE3-NEXT: retq1889;1890; SSE41-LABEL: shuffle_v8i16_56701234:1891; SSE41: # %bb.0:1892; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]1893; SSE41-NEXT: retq1894;1895; AVX-LABEL: shuffle_v8i16_56701234:1896; AVX: # %bb.0:1897; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]1898; AVX-NEXT: retq1899 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4>1900 ret <8 x i16> %shuffle1901}1902 1903define <8 x i16> @shuffle_v8i16_u6uu123u(<8 x i16> %a, <8 x i16> %b) {1904; SSE2-LABEL: shuffle_v8i16_u6uu123u:1905; SSE2: # %bb.0:1906; SSE2-NEXT: movdqa %xmm0, %xmm11907; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1908; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]1909; SSE2-NEXT: por %xmm1, %xmm01910; SSE2-NEXT: retq1911;1912; SSSE3-LABEL: shuffle_v8i16_u6uu123u:1913; SSSE3: # %bb.0:1914; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]1915; SSSE3-NEXT: retq1916;1917; SSE41-LABEL: shuffle_v8i16_u6uu123u:1918; SSE41: # %bb.0:1919; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]1920; SSE41-NEXT: retq1921;1922; AVX-LABEL: shuffle_v8i16_u6uu123u:1923; AVX: # %bb.0:1924; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]1925; AVX-NEXT: retq1926 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 6, i32 poison, i32 poison, i32 1, i32 2, i32 3, i32 poison>1927 ret <8 x i16> %shuffle1928}1929 1930define <8 x i16> @shuffle_v8i16_uuuu123u(<8 x i16> %a, <8 x i16> %b) {1931; SSE-LABEL: shuffle_v8i16_uuuu123u:1932; SSE: # %bb.0:1933; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]1934; SSE-NEXT: retq1935;1936; AVX-LABEL: shuffle_v8i16_uuuu123u:1937; AVX: # %bb.0:1938; AVX-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]1939; AVX-NEXT: retq1940 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 1, i32 2, i32 3, i32 poison>1941 ret <8 x i16> %shuffle1942}1943 1944define <8 x i16> @shuffle_v8i16_bcdef012(<8 x i16> %a, <8 x i16> %b) {1945; SSE2-LABEL: shuffle_v8i16_bcdef012:1946; SSE2: # %bb.0:1947; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1948; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]1949; SSE2-NEXT: por %xmm1, %xmm01950; SSE2-NEXT: retq1951;1952; SSSE3-LABEL: shuffle_v8i16_bcdef012:1953; SSSE3: # %bb.0:1954; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]1955; SSSE3-NEXT: retq1956;1957; SSE41-LABEL: shuffle_v8i16_bcdef012:1958; SSE41: # %bb.0:1959; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]1960; SSE41-NEXT: retq1961;1962; AVX-LABEL: shuffle_v8i16_bcdef012:1963; AVX: # %bb.0:1964; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]1965; AVX-NEXT: retq1966 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2>1967 ret <8 x i16> %shuffle1968}1969 1970define <8 x i16> @shuffle_v8i16_ucdeuu1u(<8 x i16> %a, <8 x i16> %b) {1971; SSE2-LABEL: shuffle_v8i16_ucdeuu1u:1972; SSE2: # %bb.0:1973; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero1974; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]1975; SSE2-NEXT: por %xmm1, %xmm01976; SSE2-NEXT: retq1977;1978; SSSE3-LABEL: shuffle_v8i16_ucdeuu1u:1979; SSSE3: # %bb.0:1980; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]1981; SSSE3-NEXT: retq1982;1983; SSE41-LABEL: shuffle_v8i16_ucdeuu1u:1984; SSE41: # %bb.0:1985; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]1986; SSE41-NEXT: retq1987;1988; AVX-LABEL: shuffle_v8i16_ucdeuu1u:1989; AVX: # %bb.0:1990; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]1991; AVX-NEXT: retq1992 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 12, i32 13, i32 14, i32 poison, i32 poison, i32 1, i32 poison>1993 ret <8 x i16> %shuffle1994}1995 1996define <8 x i16> @shuffle_v8i16_34567012(<8 x i16> %a, <8 x i16> %b) {1997; SSE2-LABEL: shuffle_v8i16_34567012:1998; SSE2: # %bb.0:1999; SSE2-NEXT: movdqa %xmm0, %xmm12000; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2001; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]2002; SSE2-NEXT: por %xmm1, %xmm02003; SSE2-NEXT: retq2004;2005; SSSE3-LABEL: shuffle_v8i16_34567012:2006; SSSE3: # %bb.0:2007; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]2008; SSSE3-NEXT: retq2009;2010; SSE41-LABEL: shuffle_v8i16_34567012:2011; SSE41: # %bb.0:2012; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]2013; SSE41-NEXT: retq2014;2015; AVX-LABEL: shuffle_v8i16_34567012:2016; AVX: # %bb.0:2017; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]2018; AVX-NEXT: retq2019 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2>2020 ret <8 x i16> %shuffle2021}2022 2023define <8 x i16> @shuffle_v8i16_u456uu1u(<8 x i16> %a, <8 x i16> %b) {2024; SSE2-LABEL: shuffle_v8i16_u456uu1u:2025; SSE2: # %bb.0:2026; SSE2-NEXT: movdqa %xmm0, %xmm12027; SSE2-NEXT: psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2028; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]2029; SSE2-NEXT: por %xmm1, %xmm02030; SSE2-NEXT: retq2031;2032; SSSE3-LABEL: shuffle_v8i16_u456uu1u:2033; SSSE3: # %bb.0:2034; SSSE3-NEXT: palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]2035; SSSE3-NEXT: retq2036;2037; SSE41-LABEL: shuffle_v8i16_u456uu1u:2038; SSE41: # %bb.0:2039; SSE41-NEXT: palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]2040; SSE41-NEXT: retq2041;2042; AVX-LABEL: shuffle_v8i16_u456uu1u:2043; AVX: # %bb.0:2044; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]2045; AVX-NEXT: retq2046 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 4, i32 5, i32 6, i32 poison, i32 poison, i32 1, i32 poison>2047 ret <8 x i16> %shuffle2048}2049 2050define <8 x i16> @shuffle_v8i16_u456uuuu(<8 x i16> %a, <8 x i16> %b) {2051; SSE-LABEL: shuffle_v8i16_u456uuuu:2052; SSE: # %bb.0:2053; SSE-NEXT: psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2054; SSE-NEXT: retq2055;2056; AVX-LABEL: shuffle_v8i16_u456uuuu:2057; AVX: # %bb.0:2058; AVX-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2059; AVX-NEXT: retq2060 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 4, i32 5, i32 6, i32 poison, i32 poison, i32 poison, i32 poison>2061 ret <8 x i16> %shuffle2062}2063 2064define <8 x i16> @shuffle_v8i16_3456789a(<8 x i16> %a, <8 x i16> %b) {2065; SSE2-LABEL: shuffle_v8i16_3456789a:2066; SSE2: # %bb.0:2067; SSE2-NEXT: psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2068; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]2069; SSE2-NEXT: por %xmm1, %xmm02070; SSE2-NEXT: retq2071;2072; SSSE3-LABEL: shuffle_v8i16_3456789a:2073; SSSE3: # %bb.0:2074; SSSE3-NEXT: palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]2075; SSSE3-NEXT: movdqa %xmm1, %xmm02076; SSSE3-NEXT: retq2077;2078; SSE41-LABEL: shuffle_v8i16_3456789a:2079; SSE41: # %bb.0:2080; SSE41-NEXT: palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]2081; SSE41-NEXT: movdqa %xmm1, %xmm02082; SSE41-NEXT: retq2083;2084; AVX-LABEL: shuffle_v8i16_3456789a:2085; AVX: # %bb.0:2086; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]2087; AVX-NEXT: retq2088 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>2089 ret <8 x i16> %shuffle2090}2091 2092define <8 x i16> @shuffle_v8i16_u456uu9u(<8 x i16> %a, <8 x i16> %b) {2093; SSE2-LABEL: shuffle_v8i16_u456uu9u:2094; SSE2: # %bb.0:2095; SSE2-NEXT: psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero2096; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]2097; SSE2-NEXT: por %xmm1, %xmm02098; SSE2-NEXT: retq2099;2100; SSSE3-LABEL: shuffle_v8i16_u456uu9u:2101; SSSE3: # %bb.0:2102; SSSE3-NEXT: palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]2103; SSSE3-NEXT: movdqa %xmm1, %xmm02104; SSSE3-NEXT: retq2105;2106; SSE41-LABEL: shuffle_v8i16_u456uu9u:2107; SSE41: # %bb.0:2108; SSE41-NEXT: palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]2109; SSE41-NEXT: movdqa %xmm1, %xmm02110; SSE41-NEXT: retq2111;2112; AVX-LABEL: shuffle_v8i16_u456uu9u:2113; AVX: # %bb.0:2114; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]2115; AVX-NEXT: retq2116 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 4, i32 5, i32 6, i32 poison, i32 poison, i32 9, i32 poison>2117 ret <8 x i16> %shuffle2118}2119 2120define <8 x i16> @shuffle_v8i16_56789abc(<8 x i16> %a, <8 x i16> %b) {2121; SSE2-LABEL: shuffle_v8i16_56789abc:2122; SSE2: # %bb.0:2123; SSE2-NEXT: psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2124; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9]2125; SSE2-NEXT: por %xmm1, %xmm02126; SSE2-NEXT: retq2127;2128; SSSE3-LABEL: shuffle_v8i16_56789abc:2129; SSSE3: # %bb.0:2130; SSSE3-NEXT: palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]2131; SSSE3-NEXT: movdqa %xmm1, %xmm02132; SSSE3-NEXT: retq2133;2134; SSE41-LABEL: shuffle_v8i16_56789abc:2135; SSE41: # %bb.0:2136; SSE41-NEXT: palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]2137; SSE41-NEXT: movdqa %xmm1, %xmm02138; SSE41-NEXT: retq2139;2140; AVX-LABEL: shuffle_v8i16_56789abc:2141; AVX: # %bb.0:2142; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]2143; AVX-NEXT: retq2144 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12>2145 ret <8 x i16> %shuffle2146}2147 2148define <8 x i16> @shuffle_v8i16_u6uu9abu(<8 x i16> %a, <8 x i16> %b) {2149; SSE2-LABEL: shuffle_v8i16_u6uu9abu:2150; SSE2: # %bb.0:2151; SSE2-NEXT: psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2152; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9]2153; SSE2-NEXT: por %xmm1, %xmm02154; SSE2-NEXT: retq2155;2156; SSSE3-LABEL: shuffle_v8i16_u6uu9abu:2157; SSSE3: # %bb.0:2158; SSSE3-NEXT: palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]2159; SSSE3-NEXT: movdqa %xmm1, %xmm02160; SSSE3-NEXT: retq2161;2162; SSE41-LABEL: shuffle_v8i16_u6uu9abu:2163; SSE41: # %bb.0:2164; SSE41-NEXT: palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]2165; SSE41-NEXT: movdqa %xmm1, %xmm02166; SSE41-NEXT: retq2167;2168; AVX-LABEL: shuffle_v8i16_u6uu9abu:2169; AVX: # %bb.0:2170; AVX-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]2171; AVX-NEXT: retq2172 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 poison, i32 6, i32 poison, i32 poison, i32 9, i32 10, i32 11, i32 poison>2173 ret <8 x i16> %shuffle2174}2175 2176define <8 x i16> @shuffle_v8i16_0uuu1uuu(<8 x i16> %a) {2177; SSE2-LABEL: shuffle_v8i16_0uuu1uuu:2178; SSE2: # %bb.0:2179; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]2180; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]2181; SSE2-NEXT: retq2182;2183; SSSE3-LABEL: shuffle_v8i16_0uuu1uuu:2184; SSSE3: # %bb.0:2185; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]2186; SSSE3-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]2187; SSSE3-NEXT: retq2188;2189; SSE41-LABEL: shuffle_v8i16_0uuu1uuu:2190; SSE41: # %bb.0:2191; SSE41-NEXT: pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero2192; SSE41-NEXT: retq2193;2194; AVX-LABEL: shuffle_v8i16_0uuu1uuu:2195; AVX: # %bb.0:2196; AVX-NEXT: vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero2197; AVX-NEXT: retq2198 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison>2199 ret <8 x i16> %shuffle2200}2201 2202define <8 x i16> @shuffle_v8i16_0zzz1zzz(<8 x i16> %a) {2203; SSE2-LABEL: shuffle_v8i16_0zzz1zzz:2204; SSE2: # %bb.0:2205; SSE2-NEXT: pxor %xmm1, %xmm12206; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2207; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2208; SSE2-NEXT: retq2209;2210; SSSE3-LABEL: shuffle_v8i16_0zzz1zzz:2211; SSSE3: # %bb.0:2212; SSSE3-NEXT: pxor %xmm1, %xmm12213; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2214; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2215; SSSE3-NEXT: retq2216;2217; SSE41-LABEL: shuffle_v8i16_0zzz1zzz:2218; SSE41: # %bb.0:2219; SSE41-NEXT: pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero2220; SSE41-NEXT: retq2221;2222; AVX-LABEL: shuffle_v8i16_0zzz1zzz:2223; AVX: # %bb.0:2224; AVX-NEXT: vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero2225; AVX-NEXT: retq2226 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>2227 ret <8 x i16> %shuffle2228}2229 2230define <8 x i16> @shuffle_v8i16_0u1u2u3u(<8 x i16> %a) {2231; SSE2-LABEL: shuffle_v8i16_0u1u2u3u:2232; SSE2: # %bb.0:2233; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]2234; SSE2-NEXT: retq2235;2236; SSSE3-LABEL: shuffle_v8i16_0u1u2u3u:2237; SSSE3: # %bb.0:2238; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]2239; SSSE3-NEXT: retq2240;2241; SSE41-LABEL: shuffle_v8i16_0u1u2u3u:2242; SSE41: # %bb.0:2243; SSE41-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2244; SSE41-NEXT: retq2245;2246; AVX-LABEL: shuffle_v8i16_0u1u2u3u:2247; AVX: # %bb.0:2248; AVX-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2249; AVX-NEXT: retq2250 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 poison, i32 1, i32 poison, i32 2, i32 poison, i32 3, i32 poison>2251 ret <8 x i16> %shuffle2252}2253 2254define <8 x i16> @shuffle_v8i16_0z1z2z3z(<8 x i16> %a) {2255; SSE2-LABEL: shuffle_v8i16_0z1z2z3z:2256; SSE2: # %bb.0:2257; SSE2-NEXT: pxor %xmm1, %xmm12258; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2259; SSE2-NEXT: retq2260;2261; SSSE3-LABEL: shuffle_v8i16_0z1z2z3z:2262; SSSE3: # %bb.0:2263; SSSE3-NEXT: pxor %xmm1, %xmm12264; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2265; SSSE3-NEXT: retq2266;2267; SSE41-LABEL: shuffle_v8i16_0z1z2z3z:2268; SSE41: # %bb.0:2269; SSE41-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2270; SSE41-NEXT: retq2271;2272; AVX-LABEL: shuffle_v8i16_0z1z2z3z:2273; AVX: # %bb.0:2274; AVX-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2275; AVX-NEXT: retq2276 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>2277 ret <8 x i16> %shuffle2278}2279 2280define <8 x i16> @shuffle_v8i16_01100110(<8 x i16> %a) {2281; SSE-LABEL: shuffle_v8i16_01100110:2282; SSE: # %bb.0:2283; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2284; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2285; SSE-NEXT: retq2286;2287; AVX1-LABEL: shuffle_v8i16_01100110:2288; AVX1: # %bb.0:2289; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2290; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2291; AVX1-NEXT: retq2292;2293; AVX2-SLOW-LABEL: shuffle_v8i16_01100110:2294; AVX2-SLOW: # %bb.0:2295; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2296; AVX2-SLOW-NEXT: vpbroadcastq %xmm0, %xmm02297; AVX2-SLOW-NEXT: retq2298;2299; AVX2-FAST-LABEL: shuffle_v8i16_01100110:2300; AVX2-FAST: # %bb.0:2301; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]2302; AVX2-FAST-NEXT: retq2303;2304; AVX512VL-SLOW-LABEL: shuffle_v8i16_01100110:2305; AVX512VL-SLOW: # %bb.0:2306; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2307; AVX512VL-SLOW-NEXT: vpbroadcastq %xmm0, %xmm02308; AVX512VL-SLOW-NEXT: retq2309;2310; AVX512VL-FAST-LABEL: shuffle_v8i16_01100110:2311; AVX512VL-FAST: # %bb.0:2312; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]2313; AVX512VL-FAST-NEXT: retq2314;2315; XOPAVX1-LABEL: shuffle_v8i16_01100110:2316; XOPAVX1: # %bb.0:2317; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2318; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2319; XOPAVX1-NEXT: retq2320;2321; XOPAVX2-LABEL: shuffle_v8i16_01100110:2322; XOPAVX2: # %bb.0:2323; XOPAVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2324; XOPAVX2-NEXT: vpbroadcastq %xmm0, %xmm02325; XOPAVX2-NEXT: retq2326 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 1, i32 0>2327 ret <8 x i16> %shuffle2328}2329 2330define <8 x i16> @shuffle_v8i16_01u0u110(<8 x i16> %a) {2331; SSE-LABEL: shuffle_v8i16_01u0u110:2332; SSE: # %bb.0:2333; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2334; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2335; SSE-NEXT: retq2336;2337; AVX1-LABEL: shuffle_v8i16_01u0u110:2338; AVX1: # %bb.0:2339; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2340; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2341; AVX1-NEXT: retq2342;2343; AVX2-SLOW-LABEL: shuffle_v8i16_01u0u110:2344; AVX2-SLOW: # %bb.0:2345; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2346; AVX2-SLOW-NEXT: vpbroadcastq %xmm0, %xmm02347; AVX2-SLOW-NEXT: retq2348;2349; AVX2-FAST-LABEL: shuffle_v8i16_01u0u110:2350; AVX2-FAST: # %bb.0:2351; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]2352; AVX2-FAST-NEXT: retq2353;2354; AVX512VL-SLOW-LABEL: shuffle_v8i16_01u0u110:2355; AVX512VL-SLOW: # %bb.0:2356; AVX512VL-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2357; AVX512VL-SLOW-NEXT: vpbroadcastq %xmm0, %xmm02358; AVX512VL-SLOW-NEXT: retq2359;2360; AVX512VL-FAST-LABEL: shuffle_v8i16_01u0u110:2361; AVX512VL-FAST: # %bb.0:2362; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]2363; AVX512VL-FAST-NEXT: retq2364;2365; XOPAVX1-LABEL: shuffle_v8i16_01u0u110:2366; XOPAVX1: # %bb.0:2367; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2368; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2369; XOPAVX1-NEXT: retq2370;2371; XOPAVX2-LABEL: shuffle_v8i16_01u0u110:2372; XOPAVX2: # %bb.0:2373; XOPAVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]2374; XOPAVX2-NEXT: vpbroadcastq %xmm0, %xmm02375; XOPAVX2-NEXT: retq2376 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 poison, i32 0, i32 poison, i32 1, i32 1, i32 0>2377 ret <8 x i16> %shuffle2378}2379 2380define <8 x i16> @shuffle_v8i16_467uu675(<8 x i16> %a) {2381; SSE-LABEL: shuffle_v8i16_467uu675:2382; SSE: # %bb.0:2383; SSE-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]2384; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2385; SSE-NEXT: retq2386;2387; AVX1-LABEL: shuffle_v8i16_467uu675:2388; AVX1: # %bb.0:2389; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]2390; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2391; AVX1-NEXT: retq2392;2393; AVX2-SLOW-LABEL: shuffle_v8i16_467uu675:2394; AVX2-SLOW: # %bb.0:2395; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]2396; AVX2-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2397; AVX2-SLOW-NEXT: retq2398;2399; AVX2-FAST-LABEL: shuffle_v8i16_467uu675:2400; AVX2-FAST: # %bb.0:2401; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,12,13,14,15,10,11,8,9,12,13,14,15,10,11]2402; AVX2-FAST-NEXT: retq2403;2404; AVX512VL-SLOW-LABEL: shuffle_v8i16_467uu675:2405; AVX512VL-SLOW: # %bb.0:2406; AVX512VL-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]2407; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2408; AVX512VL-SLOW-NEXT: retq2409;2410; AVX512VL-FAST-LABEL: shuffle_v8i16_467uu675:2411; AVX512VL-FAST: # %bb.0:2412; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,9,12,13,14,15,10,11,8,9,12,13,14,15,10,11]2413; AVX512VL-FAST-NEXT: retq2414;2415; XOP-LABEL: shuffle_v8i16_467uu675:2416; XOP: # %bb.0:2417; XOP-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]2418; XOP-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2419; XOP-NEXT: retq2420 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 4, i32 6, i32 7, i32 poison, i32 poison, i32 6, i32 7, i32 5>2421 ret <8 x i16> %shuffle2422}2423 2424define <8 x i16> @shuffle_v8i16_10325476(<8 x i16> %a) {2425; SSE-LABEL: shuffle_v8i16_10325476:2426; SSE: # %bb.0:2427; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]2428; SSE-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]2429; SSE-NEXT: retq2430;2431; AVX1-LABEL: shuffle_v8i16_10325476:2432; AVX1: # %bb.0:2433; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]2434; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]2435; AVX1-NEXT: retq2436;2437; AVX2-SLOW-LABEL: shuffle_v8i16_10325476:2438; AVX2-SLOW: # %bb.0:2439; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]2440; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]2441; AVX2-SLOW-NEXT: retq2442;2443; AVX2-FAST-LABEL: shuffle_v8i16_10325476:2444; AVX2-FAST: # %bb.0:2445; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]2446; AVX2-FAST-NEXT: retq2447;2448; AVX512VL-LABEL: shuffle_v8i16_10325476:2449; AVX512VL: # %bb.0:2450; AVX512VL-NEXT: vprold $16, %xmm0, %xmm02451; AVX512VL-NEXT: retq2452;2453; XOP-LABEL: shuffle_v8i16_10325476:2454; XOP: # %bb.0:2455; XOP-NEXT: vprotd $16, %xmm0, %xmm02456; XOP-NEXT: retq2457 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>2458 ret <8 x i16> %shuffle2459}2460 2461define <8 x i16> @shuffle_v8i16_12305674(<8 x i16> %a) {2462; SSE-LABEL: shuffle_v8i16_12305674:2463; SSE: # %bb.0:2464; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]2465; SSE-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]2466; SSE-NEXT: retq2467;2468; AVX1-LABEL: shuffle_v8i16_12305674:2469; AVX1: # %bb.0:2470; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]2471; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]2472; AVX1-NEXT: retq2473;2474; AVX2-SLOW-LABEL: shuffle_v8i16_12305674:2475; AVX2-SLOW: # %bb.0:2476; AVX2-SLOW-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]2477; AVX2-SLOW-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]2478; AVX2-SLOW-NEXT: retq2479;2480; AVX2-FAST-LABEL: shuffle_v8i16_12305674:2481; AVX2-FAST: # %bb.0:2482; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,0,1,10,11,12,13,14,15,8,9]2483; AVX2-FAST-NEXT: retq2484;2485; AVX512VL-LABEL: shuffle_v8i16_12305674:2486; AVX512VL: # %bb.0:2487; AVX512VL-NEXT: vprolq $48, %xmm0, %xmm02488; AVX512VL-NEXT: retq2489;2490; XOP-LABEL: shuffle_v8i16_12305674:2491; XOP: # %bb.0:2492; XOP-NEXT: vprotq $48, %xmm0, %xmm02493; XOP-NEXT: retq2494 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 5, i32 6, i32 7, i32 4>2495 ret <8 x i16> %shuffle2496}2497 2498define <8 x i16> @shuffle_v8i16_02460246(<8 x i16> %a) {2499; SSE2-LABEL: shuffle_v8i16_02460246:2500; SSE2: # %bb.0:2501; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]2502; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,4]2503; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]2504; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,3,2,4,5,6,7]2505; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]2506; SSE2-NEXT: retq2507;2508; SSSE3-LABEL: shuffle_v8i16_02460246:2509; SSSE3: # %bb.0:2510; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,0,1,4,5,8,9,12,13]2511; SSSE3-NEXT: retq2512;2513; SSE41-LABEL: shuffle_v8i16_02460246:2514; SSE41: # %bb.0:2515; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,0,1,4,5,8,9,12,13]2516; SSE41-NEXT: retq2517;2518; AVX-LABEL: shuffle_v8i16_02460246:2519; AVX: # %bb.0:2520; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,0,1,4,5,8,9,12,13]2521; AVX-NEXT: retq2522 %shuffle = shufflevector <8 x i16> %a, <8 x i16> poison, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 0, i32 2, i32 4, i32 6>2523 ret <8 x i16> %shuffle2524}2525 2526define <8 x i16> @shuffle_v8i16_04040404(<8 x i16> %a) {2527; SSE2-LABEL: shuffle_v8i16_04040404:2528; SSE2: # %bb.0:2529; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]2530; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]2531; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,6,4]2532; SSE2-NEXT: retq2533;2534; SSSE3-LABEL: shuffle_v8i16_04040404:2535; SSSE3: # %bb.0:2536; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,0,1,8,9,0,1,8,9,0,1,8,9]2537; SSSE3-NEXT: retq2538;2539; SSE41-LABEL: shuffle_v8i16_04040404:2540; SSE41: # %bb.0:2541; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,0,1,8,9,0,1,8,9,0,1,8,9]2542; SSE41-NEXT: retq2543;2544; AVX-LABEL: shuffle_v8i16_04040404:2545; AVX: # %bb.0:2546; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,0,1,8,9,0,1,8,9,0,1,8,9]2547; AVX-NEXT: retq2548 %shuffle = shufflevector <8 x i16> %a, <8 x i16> poison, <8 x i32> <i32 0, i32 4, i32 0, i32 4, i32 0, i32 4, i32 0, i32 4>2549 ret <8 x i16> %shuffle2550}2551 2552define <8 x i16> @shuffle_v8i16_02468ACE(<8 x i16> %a, <8 x i16> %b) {2553; SSE2-LABEL: shuffle_v8i16_02468ACE:2554; SSE2: # %bb.0:2555; SSE2-NEXT: pslld $16, %xmm12556; SSE2-NEXT: psrad $16, %xmm12557; SSE2-NEXT: pslld $16, %xmm02558; SSE2-NEXT: psrad $16, %xmm02559; SSE2-NEXT: packssdw %xmm1, %xmm02560; SSE2-NEXT: retq2561;2562; SSSE3-LABEL: shuffle_v8i16_02468ACE:2563; SSSE3: # %bb.0:2564; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]2565; SSSE3-NEXT: pshufb %xmm2, %xmm12566; SSSE3-NEXT: pshufb %xmm2, %xmm02567; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2568; SSSE3-NEXT: retq2569;2570; SSE41-LABEL: shuffle_v8i16_02468ACE:2571; SSE41: # %bb.0:2572; SSE41-NEXT: pxor %xmm2, %xmm22573; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]2574; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]2575; SSE41-NEXT: packusdw %xmm1, %xmm02576; SSE41-NEXT: retq2577;2578; AVX1-LABEL: shuffle_v8i16_02468ACE:2579; AVX1: # %bb.0:2580; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm22581; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]2582; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]2583; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm02584; AVX1-NEXT: retq2585;2586; AVX2-LABEL: shuffle_v8i16_02468ACE:2587; AVX2: # %bb.0:2588; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22589; AVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]2590; AVX2-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]2591; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm02592; AVX2-NEXT: retq2593;2594; AVX512VL-LABEL: shuffle_v8i16_02468ACE:2595; AVX512VL: # %bb.0:2596; AVX512VL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm02597; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm02598; AVX512VL-NEXT: vpmovdw %ymm0, %xmm02599; AVX512VL-NEXT: vzeroupper2600; AVX512VL-NEXT: retq2601;2602; XOP-LABEL: shuffle_v8i16_02468ACE:2603; XOP: # %bb.0:2604; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],xmm1[0,1,4,5,8,9,12,13]2605; XOP-NEXT: retq2606 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>2607 ret <8 x i16> %shuffle2608}2609 2610define <8 x i16> @shuffle_v8i16_048C048C(<8 x i16> %a, <8 x i16> %b) {2611; SSE2-LABEL: shuffle_v8i16_048C048C:2612; SSE2: # %bb.0:2613; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]2614; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,0,2,4,5,6,7]2615; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]2616; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]2617; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2618; SSE2-NEXT: retq2619;2620; SSSE3-LABEL: shuffle_v8i16_048C048C:2621; SSSE3: # %bb.0:2622; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]2623; SSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,0,2,4,5,6,7]2624; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]2625; SSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]2626; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2627; SSSE3-NEXT: retq2628;2629; SSE41-LABEL: shuffle_v8i16_048C048C:2630; SSE41: # %bb.0:2631; SSE41-NEXT: pxor %xmm2, %xmm22632; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]2633; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]2634; SSE41-NEXT: packusdw %xmm1, %xmm02635; SSE41-NEXT: packusdw %xmm0, %xmm02636; SSE41-NEXT: retq2637;2638; AVX1-LABEL: shuffle_v8i16_048C048C:2639; AVX1: # %bb.0:2640; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm22641; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]2642; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]2643; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm02644; AVX1-NEXT: vpackusdw %xmm0, %xmm0, %xmm02645; AVX1-NEXT: retq2646;2647; AVX2-LABEL: shuffle_v8i16_048C048C:2648; AVX2: # %bb.0:2649; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22650; AVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]2651; AVX2-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]2652; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm02653; AVX2-NEXT: vpackusdw %xmm0, %xmm0, %xmm02654; AVX2-NEXT: retq2655;2656; AVX512VL-LABEL: shuffle_v8i16_048C048C:2657; AVX512VL: # %bb.0:2658; AVX512VL-NEXT: vpbroadcastq {{.*#+}} xmm2 = [0,4,8,12,0,4,8,12]2659; AVX512VL-NEXT: vpermt2w %xmm1, %xmm2, %xmm02660; AVX512VL-NEXT: retq2661;2662; XOP-LABEL: shuffle_v8i16_048C048C:2663; XOP: # %bb.0:2664; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9],xmm1[0,1,8,9],xmm0[0,1,8,9],xmm1[0,1,8,9]2665; XOP-NEXT: retq2666 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 8, i32 12, i32 0, i32 4, i32 8, i32 12>2667 ret <8 x i16> %shuffle2668}2669 2670;2671; Shuffle to logical bit shifts2672;2673define <8 x i16> @shuffle_v8i16_z0z2z4z6(<8 x i16> %a) {2674; SSE-LABEL: shuffle_v8i16_z0z2z4z6:2675; SSE: # %bb.0:2676; SSE-NEXT: pslld $16, %xmm02677; SSE-NEXT: retq2678;2679; AVX-LABEL: shuffle_v8i16_z0z2z4z6:2680; AVX: # %bb.0:2681; AVX-NEXT: vpslld $16, %xmm0, %xmm02682; AVX-NEXT: retq2683 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 0, i32 8, i32 2, i32 8, i32 4, i32 8, i32 6>2684 ret <8 x i16> %shuffle2685}2686 2687define <8 x i16> @shuffle_v8i16_zzz0zzz4(<8 x i16> %a) {2688; SSE-LABEL: shuffle_v8i16_zzz0zzz4:2689; SSE: # %bb.0:2690; SSE-NEXT: psllq $48, %xmm02691; SSE-NEXT: retq2692;2693; AVX-LABEL: shuffle_v8i16_zzz0zzz4:2694; AVX: # %bb.0:2695; AVX-NEXT: vpsllq $48, %xmm0, %xmm02696; AVX-NEXT: retq2697 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 8, i32 8, i32 0, i32 8, i32 8, i32 8, i32 4>2698 ret <8 x i16> %shuffle2699}2700 2701define <8 x i16> @shuffle_v8i16_zz01zX4X(<8 x i16> %a) {2702; SSE-LABEL: shuffle_v8i16_zz01zX4X:2703; SSE: # %bb.0:2704; SSE-NEXT: psllq $32, %xmm02705; SSE-NEXT: retq2706;2707; AVX-LABEL: shuffle_v8i16_zz01zX4X:2708; AVX: # %bb.0:2709; AVX-NEXT: vpsllq $32, %xmm0, %xmm02710; AVX-NEXT: retq2711 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 8, i32 0, i32 1, i32 8, i32 poison, i32 4, i32 poison>2712 ret <8 x i16> %shuffle2713}2714 2715define <8 x i16> @shuffle_v8i16_z0X2z456(<8 x i16> %a) {2716; SSE-LABEL: shuffle_v8i16_z0X2z456:2717; SSE: # %bb.0:2718; SSE-NEXT: psllq $16, %xmm02719; SSE-NEXT: retq2720;2721; AVX-LABEL: shuffle_v8i16_z0X2z456:2722; AVX: # %bb.0:2723; AVX-NEXT: vpsllq $16, %xmm0, %xmm02724; AVX-NEXT: retq2725 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 0, i32 poison, i32 2, i32 8, i32 4, i32 5, i32 6>2726 ret <8 x i16> %shuffle2727}2728 2729define <8 x i16> @shuffle_v8i16_1z3zXz7z(<8 x i16> %a) {2730; SSE-LABEL: shuffle_v8i16_1z3zXz7z:2731; SSE: # %bb.0:2732; SSE-NEXT: psrld $16, %xmm02733; SSE-NEXT: retq2734;2735; AVX-LABEL: shuffle_v8i16_1z3zXz7z:2736; AVX: # %bb.0:2737; AVX-NEXT: vpsrld $16, %xmm0, %xmm02738; AVX-NEXT: retq2739 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 1, i32 8, i32 3, i32 8, i32 poison, i32 8, i32 7, i32 8>2740 ret <8 x i16> %shuffle2741}2742 2743define <8 x i16> @shuffle_v8i16_1X3z567z(<8 x i16> %a) {2744; SSE-LABEL: shuffle_v8i16_1X3z567z:2745; SSE: # %bb.0:2746; SSE-NEXT: psrlq $16, %xmm02747; SSE-NEXT: retq2748;2749; AVX-LABEL: shuffle_v8i16_1X3z567z:2750; AVX: # %bb.0:2751; AVX-NEXT: vpsrlq $16, %xmm0, %xmm02752; AVX-NEXT: retq2753 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 1, i32 poison, i32 3, i32 8, i32 5, i32 6, i32 7, i32 8>2754 ret <8 x i16> %shuffle2755}2756 2757define <8 x i16> @shuffle_v8i16_23zz67zz(<8 x i16> %a) {2758; SSE-LABEL: shuffle_v8i16_23zz67zz:2759; SSE: # %bb.0:2760; SSE-NEXT: psrlq $32, %xmm02761; SSE-NEXT: retq2762;2763; AVX-LABEL: shuffle_v8i16_23zz67zz:2764; AVX: # %bb.0:2765; AVX-NEXT: vpsrlq $32, %xmm0, %xmm02766; AVX-NEXT: retq2767 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 2, i32 3, i32 8, i32 8, i32 6, i32 7, i32 8, i32 8>2768 ret <8 x i16> %shuffle2769}2770 2771define <8 x i16> @shuffle_v8i16_3zXXXzzz(<8 x i16> %a) {2772; SSE-LABEL: shuffle_v8i16_3zXXXzzz:2773; SSE: # %bb.0:2774; SSE-NEXT: psrlq $48, %xmm02775; SSE-NEXT: retq2776;2777; AVX-LABEL: shuffle_v8i16_3zXXXzzz:2778; AVX: # %bb.0:2779; AVX-NEXT: vpsrlq $48, %xmm0, %xmm02780; AVX-NEXT: retq2781 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 3, i32 8, i32 poison, i32 poison, i32 poison, i32 8, i32 8, i32 8>2782 ret <8 x i16> %shuffle2783}2784 2785define <8 x i16> @shuffle_v8i16_01u3zzuz(<8 x i16> %a) {2786; SSE-LABEL: shuffle_v8i16_01u3zzuz:2787; SSE: # %bb.0:2788; SSE-NEXT: movq {{.*#+}} xmm0 = xmm0[0],zero2789; SSE-NEXT: retq2790;2791; AVX-LABEL: shuffle_v8i16_01u3zzuz:2792; AVX: # %bb.0:2793; AVX-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero2794; AVX-NEXT: retq2795 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 poison, i32 3, i32 8, i32 8, i32 poison, i32 8>2796 ret <8 x i16> %shuffle2797}2798 2799define <8 x i16> @shuffle_v8i16_0z234567(<8 x i16> %a) {2800; SSE2-LABEL: shuffle_v8i16_0z234567:2801; SSE2: # %bb.0:2802; SSE2-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02803; SSE2-NEXT: retq2804;2805; SSSE3-LABEL: shuffle_v8i16_0z234567:2806; SSSE3: # %bb.0:2807; SSSE3-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02808; SSSE3-NEXT: retq2809;2810; SSE41-LABEL: shuffle_v8i16_0z234567:2811; SSE41: # %bb.0:2812; SSE41-NEXT: pxor %xmm1, %xmm12813; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]2814; SSE41-NEXT: retq2815;2816; AVX-LABEL: shuffle_v8i16_0z234567:2817; AVX: # %bb.0:2818; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm12819; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]2820; AVX-NEXT: retq2821 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2822 ret <8 x i16> %shuffle2823}2824 2825define <8 x i16> @shuffle_v8i16_0zzzz5z7(<8 x i16> %a) {2826; SSE2-LABEL: shuffle_v8i16_0zzzz5z7:2827; SSE2: # %bb.0:2828; SSE2-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02829; SSE2-NEXT: retq2830;2831; SSSE3-LABEL: shuffle_v8i16_0zzzz5z7:2832; SSSE3: # %bb.0:2833; SSSE3-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02834; SSSE3-NEXT: retq2835;2836; SSE41-LABEL: shuffle_v8i16_0zzzz5z7:2837; SSE41: # %bb.0:2838; SSE41-NEXT: pxor %xmm1, %xmm12839; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]2840; SSE41-NEXT: retq2841;2842; AVX-LABEL: shuffle_v8i16_0zzzz5z7:2843; AVX: # %bb.0:2844; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm12845; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]2846; AVX-NEXT: retq2847 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 5, i32 8, i32 7>2848 ret <8 x i16> %shuffle2849}2850 2851define <8 x i16> @shuffle_v8i16_0123456z(<8 x i16> %a) {2852; SSE2-LABEL: shuffle_v8i16_0123456z:2853; SSE2: # %bb.0:2854; SSE2-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02855; SSE2-NEXT: retq2856;2857; SSSE3-LABEL: shuffle_v8i16_0123456z:2858; SSSE3: # %bb.0:2859; SSSE3-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02860; SSSE3-NEXT: retq2861;2862; SSE41-LABEL: shuffle_v8i16_0123456z:2863; SSE41: # %bb.0:2864; SSE41-NEXT: pxor %xmm1, %xmm12865; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]2866; SSE41-NEXT: retq2867;2868; AVX-LABEL: shuffle_v8i16_0123456z:2869; AVX: # %bb.0:2870; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm12871; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]2872; AVX-NEXT: retq2873 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 15>2874 ret <8 x i16> %shuffle2875}2876 2877define <8 x i16> @shuffle_v8i16_fu3ucc5u(<8 x i16> %a, <8 x i16> %b) {2878; SSE-LABEL: shuffle_v8i16_fu3ucc5u:2879; SSE: # %bb.0:2880; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]2881; SSE-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]2882; SSE-NEXT: punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]2883; SSE-NEXT: movdqa %xmm1, %xmm02884; SSE-NEXT: retq2885;2886; AVX1-LABEL: shuffle_v8i16_fu3ucc5u:2887; AVX1: # %bb.0:2888; AVX1-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]2889; AVX1-NEXT: vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]2890; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]2891; AVX1-NEXT: retq2892;2893; AVX2OR512VL-LABEL: shuffle_v8i16_fu3ucc5u:2894; AVX2OR512VL: # %bb.0:2895; AVX2OR512VL-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]2896; AVX2OR512VL-NEXT: vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]2897; AVX2OR512VL-NEXT: vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]2898; AVX2OR512VL-NEXT: retq2899;2900; XOP-LABEL: shuffle_v8i16_fu3ucc5u:2901; XOP: # %bb.0:2902; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm1[14,15,10,11],xmm0[6,7,8,9],xmm1[8,9,8,9],xmm0[10,11,12,13]2903; XOP-NEXT: retq2904 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 15, i32 poison, i32 3, i32 poison, i32 12, i32 12, i32 5, i32 poison>2905 ret <8 x i16> %shuffle2906}2907 2908define <8 x i16> @shuffle_v8i16_8012345u(<8 x i16> %a) {2909; SSE-LABEL: shuffle_v8i16_8012345u:2910; SSE: # %bb.0:2911; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]2912; SSE-NEXT: retq2913;2914; AVX-LABEL: shuffle_v8i16_8012345u:2915; AVX: # %bb.0:2916; AVX-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]2917; AVX-NEXT: retq2918 %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 poison>2919 ret <8 x i16> %shuffle2920}2921 2922define <8 x i16> @shuffle_v8i16_02468ace(<8 x i16> %a, <8 x i16> %b) {2923; SSE2-LABEL: shuffle_v8i16_02468ace:2924; SSE2: # %bb.0:2925; SSE2-NEXT: pslld $16, %xmm12926; SSE2-NEXT: psrad $16, %xmm12927; SSE2-NEXT: pslld $16, %xmm02928; SSE2-NEXT: psrad $16, %xmm02929; SSE2-NEXT: packssdw %xmm1, %xmm02930; SSE2-NEXT: retq2931;2932; SSSE3-LABEL: shuffle_v8i16_02468ace:2933; SSSE3: # %bb.0:2934; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]2935; SSSE3-NEXT: pshufb %xmm2, %xmm12936; SSSE3-NEXT: pshufb %xmm2, %xmm02937; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2938; SSSE3-NEXT: retq2939;2940; SSE41-LABEL: shuffle_v8i16_02468ace:2941; SSE41: # %bb.0:2942; SSE41-NEXT: pxor %xmm2, %xmm22943; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]2944; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]2945; SSE41-NEXT: packusdw %xmm1, %xmm02946; SSE41-NEXT: retq2947;2948; AVX1-LABEL: shuffle_v8i16_02468ace:2949; AVX1: # %bb.0:2950; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm22951; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]2952; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]2953; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm02954; AVX1-NEXT: retq2955;2956; AVX2-LABEL: shuffle_v8i16_02468ace:2957; AVX2: # %bb.0:2958; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22959; AVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]2960; AVX2-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]2961; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm02962; AVX2-NEXT: retq2963;2964; AVX512VL-LABEL: shuffle_v8i16_02468ace:2965; AVX512VL: # %bb.0:2966; AVX512VL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm02967; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm02968; AVX512VL-NEXT: vpmovdw %ymm0, %xmm02969; AVX512VL-NEXT: vzeroupper2970; AVX512VL-NEXT: retq2971;2972; XOP-LABEL: shuffle_v8i16_02468ace:2973; XOP: # %bb.0:2974; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],xmm1[0,1,4,5,8,9,12,13]2975; XOP-NEXT: retq2976 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>2977 ret <8 x i16> %shuffle2978}2979 2980define <8 x i16> @shuffle_v8i16_13579bdf(<8 x i16> %a, <8 x i16> %b) {2981; SSE2-LABEL: shuffle_v8i16_13579bdf:2982; SSE2: # %bb.0:2983; SSE2-NEXT: psrad $16, %xmm12984; SSE2-NEXT: psrad $16, %xmm02985; SSE2-NEXT: packssdw %xmm1, %xmm02986; SSE2-NEXT: retq2987;2988; SSSE3-LABEL: shuffle_v8i16_13579bdf:2989; SSSE3: # %bb.0:2990; SSSE3-NEXT: psrad $16, %xmm12991; SSSE3-NEXT: psrad $16, %xmm02992; SSSE3-NEXT: packssdw %xmm1, %xmm02993; SSSE3-NEXT: retq2994;2995; SSE41-LABEL: shuffle_v8i16_13579bdf:2996; SSE41: # %bb.0:2997; SSE41-NEXT: psrld $16, %xmm12998; SSE41-NEXT: psrld $16, %xmm02999; SSE41-NEXT: packusdw %xmm1, %xmm03000; SSE41-NEXT: retq3001;3002; AVX1-LABEL: shuffle_v8i16_13579bdf:3003; AVX1: # %bb.0:3004; AVX1-NEXT: vpsrld $16, %xmm1, %xmm13005; AVX1-NEXT: vpsrld $16, %xmm0, %xmm03006; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm03007; AVX1-NEXT: retq3008;3009; AVX2OR512VL-LABEL: shuffle_v8i16_13579bdf:3010; AVX2OR512VL: # %bb.0:3011; AVX2OR512VL-NEXT: vpsrld $16, %xmm1, %xmm13012; AVX2OR512VL-NEXT: vpsrld $16, %xmm0, %xmm03013; AVX2OR512VL-NEXT: vpackusdw %xmm1, %xmm0, %xmm03014; AVX2OR512VL-NEXT: retq3015;3016; XOP-LABEL: shuffle_v8i16_13579bdf:3017; XOP: # %bb.0:3018; XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[2,3,6,7,10,11,14,15],xmm1[2,3,6,7,10,11,14,15]3019; XOP-NEXT: retq3020 %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>3021 ret <8 x i16> %shuffle3022}3023 3024; PR403063025define <8 x i16> @shuffle_v8i16_9zzzuuuu(<8 x i16> %x) {3026; SSE-LABEL: shuffle_v8i16_9zzzuuuu:3027; SSE: # %bb.0:3028; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]3029; SSE-NEXT: psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3030; SSE-NEXT: retq3031;3032; AVX1-LABEL: shuffle_v8i16_9zzzuuuu:3033; AVX1: # %bb.0:3034; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]3035; AVX1-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3036; AVX1-NEXT: retq3037;3038; AVX2-SLOW-LABEL: shuffle_v8i16_9zzzuuuu:3039; AVX2-SLOW: # %bb.0:3040; AVX2-SLOW-NEXT: vpbroadcastd %xmm0, %xmm03041; AVX2-SLOW-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3042; AVX2-SLOW-NEXT: retq3043;3044; AVX2-FAST-LABEL: shuffle_v8i16_9zzzuuuu:3045; AVX2-FAST: # %bb.0:3046; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3047; AVX2-FAST-NEXT: retq3048;3049; AVX512VL-SLOW-LABEL: shuffle_v8i16_9zzzuuuu:3050; AVX512VL-SLOW: # %bb.0:3051; AVX512VL-SLOW-NEXT: vbroadcastss %xmm0, %xmm03052; AVX512VL-SLOW-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3053; AVX512VL-SLOW-NEXT: retq3054;3055; AVX512VL-FAST-LABEL: shuffle_v8i16_9zzzuuuu:3056; AVX512VL-FAST: # %bb.0:3057; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3058; AVX512VL-FAST-NEXT: retq3059;3060; XOP-LABEL: shuffle_v8i16_9zzzuuuu:3061; XOP: # %bb.0:3062; XOP-NEXT: extrq {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]3063; XOP-NEXT: retq3064 %r = shufflevector <8 x i16> zeroinitializer, <8 x i16> %x, <8 x i32> <i32 9, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>3065 ret <8 x i16> %r3066}3067 3068; PR403183069define <8 x i16> @shuffle_v8i16_2zzzuuuu(<8 x i16> %x) {3070; SSE-LABEL: shuffle_v8i16_2zzzuuuu:3071; SSE: # %bb.0:3072; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]3073; SSE-NEXT: psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3074; SSE-NEXT: retq3075;3076; AVX1-LABEL: shuffle_v8i16_2zzzuuuu:3077; AVX1: # %bb.0:3078; AVX1-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]3079; AVX1-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3080; AVX1-NEXT: retq3081;3082; AVX2-SLOW-LABEL: shuffle_v8i16_2zzzuuuu:3083; AVX2-SLOW: # %bb.0:3084; AVX2-SLOW-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]3085; AVX2-SLOW-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3086; AVX2-SLOW-NEXT: retq3087;3088; AVX2-FAST-LABEL: shuffle_v8i16_2zzzuuuu:3089; AVX2-FAST: # %bb.0:3090; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3091; AVX2-FAST-NEXT: retq3092;3093; AVX512VL-SLOW-LABEL: shuffle_v8i16_2zzzuuuu:3094; AVX512VL-SLOW: # %bb.0:3095; AVX512VL-SLOW-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]3096; AVX512VL-SLOW-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3097; AVX512VL-SLOW-NEXT: retq3098;3099; AVX512VL-FAST-LABEL: shuffle_v8i16_2zzzuuuu:3100; AVX512VL-FAST: # %bb.0:3101; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3102; AVX512VL-FAST-NEXT: retq3103;3104; XOP-LABEL: shuffle_v8i16_2zzzuuuu:3105; XOP: # %bb.0:3106; XOP-NEXT: extrq {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]3107; XOP-NEXT: retq3108 %r = shufflevector <8 x i16> %x, <8 x i16> zeroinitializer, <8 x i32> <i32 2, i32 9, i32 10, i32 11, i32 poison, i32 poison, i32 poison, i32 poison>3109 ret <8 x i16> %r3110}3111 3112define <8 x i16> @shuffle_v8i16_3uu6zzzz(<8 x i16> %x) {3113; SSE-LABEL: shuffle_v8i16_3uu6zzzz:3114; SSE: # %bb.0:3115; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3116; SSE-NEXT: psrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero3117; SSE-NEXT: retq3118;3119; AVX1-LABEL: shuffle_v8i16_3uu6zzzz:3120; AVX1: # %bb.0:3121; AVX1-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3122; AVX1-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero3123; AVX1-NEXT: retq3124;3125; AVX2-SLOW-LABEL: shuffle_v8i16_3uu6zzzz:3126; AVX2-SLOW: # %bb.0:3127; AVX2-SLOW-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3128; AVX2-SLOW-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero3129; AVX2-SLOW-NEXT: retq3130;3131; AVX2-FAST-LABEL: shuffle_v8i16_3uu6zzzz:3132; AVX2-FAST: # %bb.0:3133; AVX2-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13],zero,zero,zero,zero,zero,zero,zero,zero3134; AVX2-FAST-NEXT: retq3135;3136; AVX512VL-SLOW-LABEL: shuffle_v8i16_3uu6zzzz:3137; AVX512VL-SLOW: # %bb.0:3138; AVX512VL-SLOW-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3139; AVX512VL-SLOW-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero3140; AVX512VL-SLOW-NEXT: retq3141;3142; AVX512VL-FAST-LABEL: shuffle_v8i16_3uu6zzzz:3143; AVX512VL-FAST: # %bb.0:3144; AVX512VL-FAST-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13],zero,zero,zero,zero,zero,zero,zero,zero3145; AVX512VL-FAST-NEXT: retq3146;3147; XOP-LABEL: shuffle_v8i16_3uu6zzzz:3148; XOP: # %bb.0:3149; XOP-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3150; XOP-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero3151; XOP-NEXT: retq3152 %r = shufflevector <8 x i16> %x, <8 x i16> zeroinitializer, <8 x i32> <i32 3, i32 poison, i32 poison, i32 6, i32 8, i32 8, i32 8, i32 8>3153 ret <8 x i16> %r3154}3155 3156define <8 x i16> @mask_v8i16_012345ef(<8 x i16> %a, <8 x i16> %b) {3157; SSE2-LABEL: mask_v8i16_012345ef:3158; SSE2: # %bb.0:3159; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]3160; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]3161; SSE2-NEXT: movaps %xmm1, %xmm03162; SSE2-NEXT: retq3163;3164; SSSE3-LABEL: mask_v8i16_012345ef:3165; SSSE3: # %bb.0:3166; SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]3167; SSSE3-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]3168; SSSE3-NEXT: movaps %xmm1, %xmm03169; SSSE3-NEXT: retq3170;3171; SSE41-LABEL: mask_v8i16_012345ef:3172; SSE41: # %bb.0:3173; SSE41-NEXT: blendps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]3174; SSE41-NEXT: retq3175;3176; AVX-LABEL: mask_v8i16_012345ef:3177; AVX: # %bb.0:3178; AVX-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]3179; AVX-NEXT: retq3180 %1 = bitcast <8 x i16> %a to <2 x i64>3181 %2 = bitcast <8 x i16> %b to <2 x i64>3182 %3 = and <2 x i64> %1, <i64 0, i64 -4294967296>3183 %4 = and <2 x i64> %2, <i64 -1, i64 4294967295>3184 %5 = or <2 x i64> %4, %33185 %6 = bitcast <2 x i64> %5 to <8 x i16>3186 ret <8 x i16> %63187}3188 3189define <8 x i16> @insert_dup_mem_v8i16_i32(ptr %ptr) {3190; SSE-LABEL: insert_dup_mem_v8i16_i32:3191; SSE: # %bb.0:3192; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3193; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3194; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3195; SSE-NEXT: retq3196;3197; AVX1-LABEL: insert_dup_mem_v8i16_i32:3198; AVX1: # %bb.0:3199; AVX1-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero3200; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3201; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3202; AVX1-NEXT: retq3203;3204; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_i32:3205; AVX2OR512VL: # %bb.0:3206; AVX2OR512VL-NEXT: vpbroadcastw (%rdi), %xmm03207; AVX2OR512VL-NEXT: retq3208;3209; XOPAVX1-LABEL: insert_dup_mem_v8i16_i32:3210; XOPAVX1: # %bb.0:3211; XOPAVX1-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero3212; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3213; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3214; XOPAVX1-NEXT: retq3215;3216; XOPAVX2-LABEL: insert_dup_mem_v8i16_i32:3217; XOPAVX2: # %bb.0:3218; XOPAVX2-NEXT: vpbroadcastw (%rdi), %xmm03219; XOPAVX2-NEXT: retq3220 %tmp = load i32, ptr %ptr, align 43221 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 03222 %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>3223 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <8 x i32> zeroinitializer3224 ret <8 x i16> %tmp33225}3226 3227define <8 x i16> @insert_dup_mem_v8i16_sext_i16(ptr %ptr) {3228; SSE-LABEL: insert_dup_mem_v8i16_sext_i16:3229; SSE: # %bb.0:3230; SSE-NEXT: movzwl (%rdi), %eax3231; SSE-NEXT: movd %eax, %xmm03232; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3233; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3234; SSE-NEXT: retq3235;3236; AVX1-LABEL: insert_dup_mem_v8i16_sext_i16:3237; AVX1: # %bb.0:3238; AVX1-NEXT: movzwl (%rdi), %eax3239; AVX1-NEXT: vmovd %eax, %xmm03240; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3241; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3242; AVX1-NEXT: retq3243;3244; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_sext_i16:3245; AVX2OR512VL: # %bb.0:3246; AVX2OR512VL-NEXT: vpbroadcastw (%rdi), %xmm03247; AVX2OR512VL-NEXT: retq3248;3249; XOPAVX1-LABEL: insert_dup_mem_v8i16_sext_i16:3250; XOPAVX1: # %bb.0:3251; XOPAVX1-NEXT: movzwl (%rdi), %eax3252; XOPAVX1-NEXT: vmovd %eax, %xmm03253; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3254; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3255; XOPAVX1-NEXT: retq3256;3257; XOPAVX2-LABEL: insert_dup_mem_v8i16_sext_i16:3258; XOPAVX2: # %bb.0:3259; XOPAVX2-NEXT: vpbroadcastw (%rdi), %xmm03260; XOPAVX2-NEXT: retq3261 %tmp = load i16, ptr %ptr, align 23262 %tmp1 = sext i16 %tmp to i323263 %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 03264 %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>3265 %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <8 x i32> zeroinitializer3266 ret <8 x i16> %tmp43267}3268 3269define <8 x i16> @insert_dup_elt1_mem_v8i16_i32(ptr %ptr) {3270; SSE-LABEL: insert_dup_elt1_mem_v8i16_i32:3271; SSE: # %bb.0:3272; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3273; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3274; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3275; SSE-NEXT: retq3276;3277; AVX1-LABEL: insert_dup_elt1_mem_v8i16_i32:3278; AVX1: # %bb.0:3279; AVX1-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero3280; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3281; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3282; AVX1-NEXT: retq3283;3284; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v8i16_i32:3285; AVX2OR512VL: # %bb.0:3286; AVX2OR512VL-NEXT: vpbroadcastw 2(%rdi), %xmm03287; AVX2OR512VL-NEXT: retq3288;3289; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_i32:3290; XOPAVX1: # %bb.0:3291; XOPAVX1-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero3292; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3293; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3294; XOPAVX1-NEXT: retq3295;3296; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_i32:3297; XOPAVX2: # %bb.0:3298; XOPAVX2-NEXT: vpbroadcastw 2(%rdi), %xmm03299; XOPAVX2-NEXT: retq3300 %tmp = load i32, ptr %ptr, align 43301 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 03302 %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>3303 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>3304 ret <8 x i16> %tmp33305}3306 3307define <8 x i16> @insert_dup_elt3_mem_v8i16_i32(ptr %ptr) {3308; SSE2-LABEL: insert_dup_elt3_mem_v8i16_i32:3309; SSE2: # %bb.0:3310; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3311; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3312; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3313; SSE2-NEXT: retq3314;3315; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_i32:3316; SSSE3: # %bb.0:3317; SSSE3-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3318; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]3319; SSSE3-NEXT: retq3320;3321; SSE41-LABEL: insert_dup_elt3_mem_v8i16_i32:3322; SSE41: # %bb.0:3323; SSE41-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3324; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]3325; SSE41-NEXT: retq3326;3327; AVX1-LABEL: insert_dup_elt3_mem_v8i16_i32:3328; AVX1: # %bb.0:3329; AVX1-NEXT: vbroadcastss (%rdi), %xmm03330; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]3331; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3332; AVX1-NEXT: retq3333;3334; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v8i16_i32:3335; AVX2OR512VL: # %bb.0:3336; AVX2OR512VL-NEXT: vpbroadcastw 2(%rdi), %xmm03337; AVX2OR512VL-NEXT: retq3338;3339; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_i32:3340; XOPAVX1: # %bb.0:3341; XOPAVX1-NEXT: vbroadcastss (%rdi), %xmm03342; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]3343; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3344; XOPAVX1-NEXT: retq3345;3346; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_i32:3347; XOPAVX2: # %bb.0:3348; XOPAVX2-NEXT: vpbroadcastw 2(%rdi), %xmm03349; XOPAVX2-NEXT: retq3350 %tmp = load i32, ptr %ptr, align 43351 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 13352 %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>3353 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>3354 ret <8 x i16> %tmp33355}3356 3357define <8 x i16> @insert_dup_elt1_mem_v8i16_sext_i16(ptr %ptr) {3358; SSE-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:3359; SSE: # %bb.0:3360; SSE-NEXT: movswl (%rdi), %eax3361; SSE-NEXT: movd %eax, %xmm03362; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3363; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3364; SSE-NEXT: retq3365;3366; AVX1-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:3367; AVX1: # %bb.0:3368; AVX1-NEXT: movswl (%rdi), %eax3369; AVX1-NEXT: vmovd %eax, %xmm03370; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3371; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3372; AVX1-NEXT: retq3373;3374; AVX2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:3375; AVX2: # %bb.0:3376; AVX2-NEXT: movswl (%rdi), %eax3377; AVX2-NEXT: shrl $16, %eax3378; AVX2-NEXT: vmovd %eax, %xmm03379; AVX2-NEXT: vpbroadcastw %xmm0, %xmm03380; AVX2-NEXT: retq3381;3382; AVX512VL-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:3383; AVX512VL: # %bb.0:3384; AVX512VL-NEXT: movswl (%rdi), %eax3385; AVX512VL-NEXT: shrl $16, %eax3386; AVX512VL-NEXT: vpbroadcastw %eax, %xmm03387; AVX512VL-NEXT: retq3388;3389; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:3390; XOPAVX1: # %bb.0:3391; XOPAVX1-NEXT: movswl (%rdi), %eax3392; XOPAVX1-NEXT: vmovd %eax, %xmm03393; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3394; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3395; XOPAVX1-NEXT: retq3396;3397; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:3398; XOPAVX2: # %bb.0:3399; XOPAVX2-NEXT: movswl (%rdi), %eax3400; XOPAVX2-NEXT: shrl $16, %eax3401; XOPAVX2-NEXT: vmovd %eax, %xmm03402; XOPAVX2-NEXT: vpbroadcastw %xmm0, %xmm03403; XOPAVX2-NEXT: retq3404 %tmp = load i16, ptr %ptr, align 23405 %tmp1 = sext i16 %tmp to i323406 %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 03407 %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>3408 %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>3409 ret <8 x i16> %tmp43410}3411 3412define <8 x i16> @insert_dup_elt3_mem_v8i16_sext_i16(ptr %ptr) {3413; SSE2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3414; SSE2: # %bb.0:3415; SSE2-NEXT: movswl (%rdi), %eax3416; SSE2-NEXT: movd %eax, %xmm03417; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3418; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3419; SSE2-NEXT: retq3420;3421; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3422; SSSE3: # %bb.0:3423; SSSE3-NEXT: movswl (%rdi), %eax3424; SSSE3-NEXT: movd %eax, %xmm03425; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]3426; SSSE3-NEXT: retq3427;3428; SSE41-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3429; SSE41: # %bb.0:3430; SSE41-NEXT: movswl (%rdi), %eax3431; SSE41-NEXT: movd %eax, %xmm03432; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]3433; SSE41-NEXT: retq3434;3435; AVX1-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3436; AVX1: # %bb.0:3437; AVX1-NEXT: movswl (%rdi), %eax3438; AVX1-NEXT: vmovd %eax, %xmm03439; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]3440; AVX1-NEXT: retq3441;3442; AVX2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3443; AVX2: # %bb.0:3444; AVX2-NEXT: movswl (%rdi), %eax3445; AVX2-NEXT: shrl $16, %eax3446; AVX2-NEXT: vmovd %eax, %xmm03447; AVX2-NEXT: vpbroadcastw %xmm0, %xmm03448; AVX2-NEXT: retq3449;3450; AVX512VL-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3451; AVX512VL: # %bb.0:3452; AVX512VL-NEXT: movswl (%rdi), %eax3453; AVX512VL-NEXT: shrl $16, %eax3454; AVX512VL-NEXT: vpbroadcastw %eax, %xmm03455; AVX512VL-NEXT: retq3456;3457; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3458; XOPAVX1: # %bb.0:3459; XOPAVX1-NEXT: movswl (%rdi), %eax3460; XOPAVX1-NEXT: vmovd %eax, %xmm03461; XOPAVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]3462; XOPAVX1-NEXT: retq3463;3464; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:3465; XOPAVX2: # %bb.0:3466; XOPAVX2-NEXT: movswl (%rdi), %eax3467; XOPAVX2-NEXT: shrl $16, %eax3468; XOPAVX2-NEXT: vmovd %eax, %xmm03469; XOPAVX2-NEXT: vpbroadcastw %xmm0, %xmm03470; XOPAVX2-NEXT: retq3471 %tmp = load i16, ptr %ptr, align 23472 %tmp1 = sext i16 %tmp to i323473 %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 13474 %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>3475 %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>3476 ret <8 x i16> %tmp43477}3478 3479define <8 x i16> @insert_dup_mem_v8i16_i64(ptr %ptr) {3480; SSE-LABEL: insert_dup_mem_v8i16_i64:3481; SSE: # %bb.0:3482; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero3483; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3484; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3485; SSE-NEXT: retq3486;3487; AVX1-LABEL: insert_dup_mem_v8i16_i64:3488; AVX1: # %bb.0:3489; AVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero3490; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3491; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3492; AVX1-NEXT: retq3493;3494; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_i64:3495; AVX2OR512VL: # %bb.0:3496; AVX2OR512VL-NEXT: vpbroadcastw (%rdi), %xmm03497; AVX2OR512VL-NEXT: retq3498;3499; XOPAVX1-LABEL: insert_dup_mem_v8i16_i64:3500; XOPAVX1: # %bb.0:3501; XOPAVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero3502; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3503; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3504; XOPAVX1-NEXT: retq3505;3506; XOPAVX2-LABEL: insert_dup_mem_v8i16_i64:3507; XOPAVX2: # %bb.0:3508; XOPAVX2-NEXT: vpbroadcastw (%rdi), %xmm03509; XOPAVX2-NEXT: retq3510 %tmp = load i64, ptr %ptr, align 43511 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 03512 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>3513 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <8 x i32> zeroinitializer3514 ret <8 x i16> %tmp33515}3516 3517define <8 x i16> @insert_dup_elt1_mem_v8i16_i64(ptr %ptr) {3518; SSE-LABEL: insert_dup_elt1_mem_v8i16_i64:3519; SSE: # %bb.0:3520; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero3521; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3522; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3523; SSE-NEXT: retq3524;3525; AVX1-LABEL: insert_dup_elt1_mem_v8i16_i64:3526; AVX1: # %bb.0:3527; AVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero3528; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3529; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3530; AVX1-NEXT: retq3531;3532; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v8i16_i64:3533; AVX2OR512VL: # %bb.0:3534; AVX2OR512VL-NEXT: vpbroadcastw 2(%rdi), %xmm03535; AVX2OR512VL-NEXT: retq3536;3537; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_i64:3538; XOPAVX1: # %bb.0:3539; XOPAVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero3540; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]3541; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3542; XOPAVX1-NEXT: retq3543;3544; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_i64:3545; XOPAVX2: # %bb.0:3546; XOPAVX2-NEXT: vpbroadcastw 2(%rdi), %xmm03547; XOPAVX2-NEXT: retq3548 %tmp = load i64, ptr %ptr, align 43549 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 03550 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>3551 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>3552 ret <8 x i16> %tmp33553}3554 3555define <8 x i16> @insert_dup_elt3_mem_v8i16_i64(ptr %ptr) {3556; SSE-LABEL: insert_dup_elt3_mem_v8i16_i64:3557; SSE: # %bb.0:3558; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero3559; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]3560; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3561; SSE-NEXT: retq3562;3563; AVX1-LABEL: insert_dup_elt3_mem_v8i16_i64:3564; AVX1: # %bb.0:3565; AVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero3566; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]3567; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3568; AVX1-NEXT: retq3569;3570; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v8i16_i64:3571; AVX2OR512VL: # %bb.0:3572; AVX2OR512VL-NEXT: vpbroadcastw 6(%rdi), %xmm03573; AVX2OR512VL-NEXT: retq3574;3575; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_i64:3576; XOPAVX1: # %bb.0:3577; XOPAVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero3578; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]3579; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3580; XOPAVX1-NEXT: retq3581;3582; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_i64:3583; XOPAVX2: # %bb.0:3584; XOPAVX2-NEXT: vpbroadcastw 6(%rdi), %xmm03585; XOPAVX2-NEXT: retq3586 %tmp = load i64, ptr %ptr, align 43587 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 03588 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>3589 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>3590 ret <8 x i16> %tmp33591}3592 3593define <8 x i16> @insert_dup_elt7_mem_v8i16_i64(ptr %ptr) {3594; SSE2-LABEL: insert_dup_elt7_mem_v8i16_i64:3595; SSE2: # %bb.0:3596; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero3597; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3598; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]3599; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]3600; SSE2-NEXT: retq3601;3602; SSSE3-LABEL: insert_dup_elt7_mem_v8i16_i64:3603; SSSE3: # %bb.0:3604; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero3605; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]3606; SSSE3-NEXT: retq3607;3608; SSE41-LABEL: insert_dup_elt7_mem_v8i16_i64:3609; SSE41: # %bb.0:3610; SSE41-NEXT: movq {{.*#+}} xmm0 = mem[0],zero3611; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]3612; SSE41-NEXT: retq3613;3614; AVX1-LABEL: insert_dup_elt7_mem_v8i16_i64:3615; AVX1: # %bb.0:3616; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]3617; AVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]3618; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]3619; AVX1-NEXT: retq3620;3621; AVX2OR512VL-LABEL: insert_dup_elt7_mem_v8i16_i64:3622; AVX2OR512VL: # %bb.0:3623; AVX2OR512VL-NEXT: vpbroadcastw 6(%rdi), %xmm03624; AVX2OR512VL-NEXT: retq3625;3626; XOPAVX1-LABEL: insert_dup_elt7_mem_v8i16_i64:3627; XOPAVX1: # %bb.0:3628; XOPAVX1-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]3629; XOPAVX1-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]3630; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]3631; XOPAVX1-NEXT: retq3632;3633; XOPAVX2-LABEL: insert_dup_elt7_mem_v8i16_i64:3634; XOPAVX2: # %bb.0:3635; XOPAVX2-NEXT: vpbroadcastw 6(%rdi), %xmm03636; XOPAVX2-NEXT: retq3637 %tmp = load i64, ptr %ptr, align 43638 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 13639 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>3640 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>3641 ret <8 x i16> %tmp33642}3643 3644define <8 x i16> @insert_dup_mem_v8i16_sext_i16_i64(ptr %ptr) {3645; SSE-LABEL: insert_dup_mem_v8i16_sext_i16_i64:3646; SSE: # %bb.0:3647; SSE-NEXT: movzwl (%rdi), %eax3648; SSE-NEXT: movd %eax, %xmm03649; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3650; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3651; SSE-NEXT: retq3652;3653; AVX1-LABEL: insert_dup_mem_v8i16_sext_i16_i64:3654; AVX1: # %bb.0:3655; AVX1-NEXT: movzwl (%rdi), %eax3656; AVX1-NEXT: vmovd %eax, %xmm03657; AVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3658; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3659; AVX1-NEXT: retq3660;3661; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_sext_i16_i64:3662; AVX2OR512VL: # %bb.0:3663; AVX2OR512VL-NEXT: vpbroadcastw (%rdi), %xmm03664; AVX2OR512VL-NEXT: retq3665;3666; XOPAVX1-LABEL: insert_dup_mem_v8i16_sext_i16_i64:3667; XOPAVX1: # %bb.0:3668; XOPAVX1-NEXT: movzwl (%rdi), %eax3669; XOPAVX1-NEXT: vmovd %eax, %xmm03670; XOPAVX1-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3671; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]3672; XOPAVX1-NEXT: retq3673;3674; XOPAVX2-LABEL: insert_dup_mem_v8i16_sext_i16_i64:3675; XOPAVX2: # %bb.0:3676; XOPAVX2-NEXT: vpbroadcastw (%rdi), %xmm03677; XOPAVX2-NEXT: retq3678 %tmp = load i16, ptr %ptr, align 23679 %tmp1 = sext i16 %tmp to i643680 %tmp2 = insertelement <2 x i64> zeroinitializer, i64 %tmp1, i32 03681 %tmp3 = bitcast <2 x i64> %tmp2 to <8 x i16>3682 %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <8 x i32> zeroinitializer3683 ret <8 x i16> %tmp43684}3685