brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.6 KiB · 91c18be Raw
442 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 | FileCheck %s3 4; Test that we correctly fold a shuffle that performs a swizzle of another5; shuffle node according to the rule6;  shuffle (shuffle (x, undef, M0), undef, M1) -> shuffle(x, undef, M2)7;8; We only do this if the resulting mask is legal to avoid introducing an9; illegal shuffle that is expanded into a sub-optimal sequence of instructions10; during lowering stage.11 12define <4 x i32> @swizzle_1(<4 x i32> %v) {13; CHECK-LABEL: swizzle_1:14; CHECK:       # %bb.0:15; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]16; CHECK-NEXT:    retq17  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>18  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>19  ret <4 x i32> %220}21 22define <4 x i32> @swizzle_2(<4 x i32> %v) {23; CHECK-LABEL: swizzle_2:24; CHECK:       # %bb.0:25; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,3,0]26; CHECK-NEXT:    retq27  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>28  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>29  ret <4 x i32> %230}31 32define <4 x i32> @swizzle_3(<4 x i32> %v) {33; CHECK-LABEL: swizzle_3:34; CHECK:       # %bb.0:35; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]36; CHECK-NEXT:    retq37  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>38  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>39  ret <4 x i32> %240}41 42define <4 x i32> @swizzle_4(<4 x i32> %v) {43; CHECK-LABEL: swizzle_4:44; CHECK:       # %bb.0:45; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,0,2]46; CHECK-NEXT:    retq47  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>48  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>49  ret <4 x i32> %250}51 52define <4 x i32> @swizzle_5(<4 x i32> %v) {53; CHECK-LABEL: swizzle_5:54; CHECK:       # %bb.0:55; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]56; CHECK-NEXT:    retq57  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>58  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>59  ret <4 x i32> %260}61 62define <4 x i32> @swizzle_6(<4 x i32> %v) {63; CHECK-LABEL: swizzle_6:64; CHECK:       # %bb.0:65; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,0,1,3]66; CHECK-NEXT:    retq67  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>68  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>69  ret <4 x i32> %270}71 72define <4 x i32> @swizzle_7(<4 x i32> %v) {73; CHECK-LABEL: swizzle_7:74; CHECK:       # %bb.0:75; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,3,1]76; CHECK-NEXT:    retq77  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>78  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>79  ret <4 x i32> %280}81 82define <4 x i32> @swizzle_8(<4 x i32> %v) {83; CHECK-LABEL: swizzle_8:84; CHECK:       # %bb.0:85; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,0]86; CHECK-NEXT:    retq87  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>88  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>89  ret <4 x i32> %290}91 92define <4 x i32> @swizzle_9(<4 x i32> %v) {93; CHECK-LABEL: swizzle_9:94; CHECK:       # %bb.0:95; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]96; CHECK-NEXT:    retq97  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>98  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>99  ret <4 x i32> %2100}101 102define <4 x i32> @swizzle_10(<4 x i32> %v) {103; CHECK-LABEL: swizzle_10:104; CHECK:       # %bb.0:105; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,2,0,3]106; CHECK-NEXT:    retq107  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>108  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>109  ret <4 x i32> %2110}111 112define <4 x i32> @swizzle_11(<4 x i32> %v) {113; CHECK-LABEL: swizzle_11:114; CHECK:       # %bb.0:115; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]116; CHECK-NEXT:    retq117  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>118  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>119  ret <4 x i32> %2120}121 122define <4 x i32> @swizzle_12(<4 x i32> %v) {123; CHECK-LABEL: swizzle_12:124; CHECK:       # %bb.0:125; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]126; CHECK-NEXT:    retq127  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>128  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>129  ret <4 x i32> %2130}131 132define <4 x i32> @swizzle_13(<4 x i32> %v) {133; CHECK-LABEL: swizzle_13:134; CHECK:       # %bb.0:135; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]136; CHECK-NEXT:    retq137  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>138  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>139  ret <4 x i32> %2140}141 142define <4 x i32> @swizzle_14(<4 x i32> %v) {143; CHECK-LABEL: swizzle_14:144; CHECK:       # %bb.0:145; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,0,2,1]146; CHECK-NEXT:    retq147  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>148  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>149  ret <4 x i32> %2150}151 152define <4 x float> @swizzle_15(<4 x float> %v) {153; CHECK-LABEL: swizzle_15:154; CHECK:       # %bb.0:155; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]156; CHECK-NEXT:    retq157  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>158  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>159  ret <4 x float> %2160}161 162define <4 x float> @swizzle_16(<4 x float> %v) {163; CHECK-LABEL: swizzle_16:164; CHECK:       # %bb.0:165; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,1,3,0]166; CHECK-NEXT:    retq167  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>168  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>169  ret <4 x float> %2170}171 172define <4 x float> @swizzle_17(<4 x float> %v) {173; CHECK-LABEL: swizzle_17:174; CHECK:       # %bb.0:175; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]176; CHECK-NEXT:    retq177  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>178  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>179  ret <4 x float> %2180}181 182define <4 x float> @swizzle_18(<4 x float> %v) {183; CHECK-LABEL: swizzle_18:184; CHECK:       # %bb.0:185; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,0,2]186; CHECK-NEXT:    retq187  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>188  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>189  ret <4 x float> %2190}191 192define <4 x float> @swizzle_19(<4 x float> %v) {193; CHECK-LABEL: swizzle_19:194; CHECK:       # %bb.0:195; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,3,0,1]196; CHECK-NEXT:    retq197  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>198  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>199  ret <4 x float> %2200}201 202define <4 x float> @swizzle_20(<4 x float> %v) {203; CHECK-LABEL: swizzle_20:204; CHECK:       # %bb.0:205; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0,1,3]206; CHECK-NEXT:    retq207  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>208  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>209  ret <4 x float> %2210}211 212define <4 x float> @swizzle_21(<4 x float> %v) {213; CHECK-LABEL: swizzle_21:214; CHECK:       # %bb.0:215; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2,3,1]216; CHECK-NEXT:    retq217  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>218  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>219  ret <4 x float> %2220}221 222define <4 x float> @swizzle_22(<4 x float> %v) {223; CHECK-LABEL: swizzle_22:224; CHECK:       # %bb.0:225; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]226; CHECK-NEXT:    retq227  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>228  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>229  ret <4 x float> %2230}231 232define <4 x float> @swizzle_23(<4 x float> %v) {233; CHECK-LABEL: swizzle_23:234; CHECK:       # %bb.0:235; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,3,0,1]236; CHECK-NEXT:    retq237  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>238  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>239  ret <4 x float> %2240}241 242define <4 x float> @swizzle_24(<4 x float> %v) {243; CHECK-LABEL: swizzle_24:244; CHECK:       # %bb.0:245; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,2,0,3]246; CHECK-NEXT:    retq247  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>248  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>249  ret <4 x float> %2250}251 252define <4 x float> @swizzle_25(<4 x float> %v) {253; CHECK-LABEL: swizzle_25:254; CHECK:       # %bb.0:255; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]256; CHECK-NEXT:    retq257  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>258  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>259  ret <4 x float> %2260}261 262define <4 x float> @swizzle_26(<4 x float> %v) {263; CHECK-LABEL: swizzle_26:264; CHECK:       # %bb.0:265; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3,1,2]266; CHECK-NEXT:    retq267  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>268  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>269  ret <4 x float> %2270}271 272define <4 x float> @swizzle_27(<4 x float> %v) {273; CHECK-LABEL: swizzle_27:274; CHECK:       # %bb.0:275; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]276; CHECK-NEXT:    retq277  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>278  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>279  ret <4 x float> %2280}281 282define <4 x float> @swizzle_28(<4 x float> %v) {283; CHECK-LABEL: swizzle_28:284; CHECK:       # %bb.0:285; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0,2,1]286; CHECK-NEXT:    retq287  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>288  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>289  ret <4 x float> %2290}291 292define <4 x float> @swizzle_29(<4 x float> %v) {293; CHECK-LABEL: swizzle_29:294; CHECK:       # %bb.0:295; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]296; CHECK-NEXT:    retq297  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 2, i32 0>298  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3>299  ret <4 x float> %2300}301 302; Make sure that we combine the shuffles from each function below into a single303; legal shuffle (either pshuflw or pshufb depending on the masks).304 305define <8 x i16> @swizzle_30(<8 x i16> %v) {306; CHECK-LABEL: swizzle_30:307; CHECK:       # %bb.0:308; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]309; CHECK-NEXT:    retq310  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 7, i32 5, i32 6, i32 4>311  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 7, i32 5, i32 6, i32 4>312  ret <8 x i16> %2313}314 315define <8 x i16> @swizzle_31(<8 x i16> %v) {316; CHECK-LABEL: swizzle_31:317; CHECK:       # %bb.0:318; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]319; CHECK-NEXT:    retq320  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 3, i32 0, i32 2, i32 1, i32 7, i32 5, i32 6, i32 4>321  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 3, i32 0, i32 2, i32 1, i32 7, i32 5, i32 6, i32 4>322  ret <8 x i16> %2323}324 325define <8 x i16> @swizzle_32(<8 x i16> %v) {326; CHECK-LABEL: swizzle_32:327; CHECK:       # %bb.0:328; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]329; CHECK-NEXT:    retq330  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 7, i32 5, i32 6, i32 4>331  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 7, i32 5, i32 6, i32 4>332  ret <8 x i16> %2333}334 335define <8 x i16> @swizzle_33(<8 x i16> %v) {336; CHECK-LABEL: swizzle_33:337; CHECK:       # %bb.0:338; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,1,3,0,4,5,6,7]339; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,7,6,4]340; CHECK-NEXT:    retq341  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 5, i32 7, i32 2, i32 3, i32 1, i32 0>342  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 5, i32 7, i32 2, i32 3, i32 1, i32 0>343  ret <8 x i16> %2344}345 346define <8 x i16> @swizzle_34(<8 x i16> %v) {347; CHECK-LABEL: swizzle_34:348; CHECK:       # %bb.0:349; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7]350; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]351; CHECK-NEXT:    retq352  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 7, i32 6, i32 5, i32 1, i32 2, i32 0, i32 3>353  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 7, i32 6, i32 5, i32 1, i32 2, i32 0, i32 3>354  ret <8 x i16> %2355}356 357define <8 x i16> @swizzle_35(<8 x i16> %v) {358; CHECK-LABEL: swizzle_35:359; CHECK:       # %bb.0:360; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]361; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,6]362; CHECK-NEXT:    retq363  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 7, i32 4, i32 6, i32 5, i32 1, i32 3, i32 0, i32 2>364  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 7, i32 4, i32 6, i32 5, i32 1, i32 3, i32 0, i32 2>365  ret <8 x i16> %2366}367 368define <8 x i16> @swizzle_36(<8 x i16> %v) {369; CHECK-LABEL: swizzle_36:370; CHECK:       # %bb.0:371; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]372; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]373; CHECK-NEXT:    retq374  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 7, i32 5, i32 0, i32 1, i32 3, i32 2>375  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 7, i32 5, i32 0, i32 1, i32 3, i32 2>376  ret <8 x i16> %2377}378 379define <8 x i16> @swizzle_37(<8 x i16> %v) {380; CHECK-LABEL: swizzle_37:381; CHECK:       # %bb.0:382; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,5]383; CHECK-NEXT:    retq384  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 7, i32 5, i32 6, i32 4>385  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 7, i32 4, i32 6, i32 5>386  ret <8 x i16> %2387}388 389define <8 x i16> @swizzle_38(<8 x i16> %v) {390; CHECK-LABEL: swizzle_38:391; CHECK:       # %bb.0:392; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]393; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,6,7]394; CHECK-NEXT:    retq395  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 5, i32 6, i32 4, i32 7, i32 0, i32 2, i32 1, i32 3>396  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 5, i32 6, i32 4, i32 7, i32 0, i32 2, i32 1, i32 3>397  ret <8 x i16> %2398}399 400define <8 x i16> @swizzle_39(<8 x i16> %v) {401; CHECK-LABEL: swizzle_39:402; CHECK:       # %bb.0:403; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,3,1,0,4,5,6,7]404; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]405; CHECK-NEXT:    retq406  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 5, i32 4, i32 6, i32 7, i32 3, i32 2, i32 1, i32 0>407  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 5, i32 4, i32 6, i32 7, i32 3, i32 2, i32 1, i32 0>408  ret <8 x i16> %2409}410 411define <8 x i16> @swizzle_40(<8 x i16> %v) {412; CHECK-LABEL: swizzle_40:413; CHECK:       # %bb.0:414; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]415; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]416; CHECK-NEXT:    retq417  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 6, i32 4, i32 7, i32 5, i32 1, i32 0, i32 3, i32 2>418  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 6, i32 4, i32 7, i32 5, i32 1, i32 0, i32 3, i32 2>419  ret <8 x i16> %2420}421 422define <8 x i16> @swizzle_41(<8 x i16> %v) {423; CHECK-LABEL: swizzle_41:424; CHECK:       # %bb.0:425; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]426; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]427; CHECK-NEXT:    retq428  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 6, i32 7, i32 5, i32 4, i32 0, i32 1, i32 3, i32 2>429  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 6, i32 7, i32 5, i32 4, i32 0, i32 1, i32 3, i32 2>430  ret <8 x i16> %2431}432 433define <8 x i16> @swizzle_42(<8 x i16> %v) {434; CHECK-LABEL: swizzle_42:435; CHECK:       # %bb.0:436; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]437; CHECK-NEXT:    retq438  %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 7, i32 6, i32 4, i32 5>439  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 7, i32 6, i32 4, i32 5>440  ret <8 x i16> %2441}442