brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.8 KiB · d255129 Raw
573 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE424; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX --check-prefix=AVX5127 8; Widened shuffle broadcast loads9 10define <4 x float> @load_splat_4f32_4f32_0101(ptr %ptr) nounwind uwtable readnone ssp {11; SSE2-LABEL: load_splat_4f32_4f32_0101:12; SSE2:       # %bb.0: # %entry13; SSE2-NEXT:    movaps (%rdi), %xmm014; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]15; SSE2-NEXT:    retq16;17; SSE42-LABEL: load_splat_4f32_4f32_0101:18; SSE42:       # %bb.0: # %entry19; SSE42-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]20; SSE42-NEXT:    retq21;22; AVX-LABEL: load_splat_4f32_4f32_0101:23; AVX:       # %bb.0: # %entry24; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]25; AVX-NEXT:    retq26entry:27  %ld = load <4 x float>, ptr %ptr28  %ret = shufflevector <4 x float> %ld, <4 x float> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>29  ret <4 x float> %ret30}31 32define <8 x float> @load_splat_8f32_4f32_01010101(ptr %ptr) nounwind uwtable readnone ssp {33; SSE2-LABEL: load_splat_8f32_4f32_01010101:34; SSE2:       # %bb.0: # %entry35; SSE2-NEXT:    movaps (%rdi), %xmm036; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]37; SSE2-NEXT:    movaps %xmm0, %xmm138; SSE2-NEXT:    retq39;40; SSE42-LABEL: load_splat_8f32_4f32_01010101:41; SSE42:       # %bb.0: # %entry42; SSE42-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]43; SSE42-NEXT:    movapd %xmm0, %xmm144; SSE42-NEXT:    retq45;46; AVX-LABEL: load_splat_8f32_4f32_01010101:47; AVX:       # %bb.0: # %entry48; AVX-NEXT:    vbroadcastsd (%rdi), %ymm049; AVX-NEXT:    retq50entry:51  %ld = load <4 x float>, ptr %ptr52  %ret = shufflevector <4 x float> %ld, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>53  ret <8 x float> %ret54}55 56define <8 x float> @load_splat_8f32_8f32_01010101(ptr %ptr) nounwind uwtable readnone ssp {57; SSE2-LABEL: load_splat_8f32_8f32_01010101:58; SSE2:       # %bb.0: # %entry59; SSE2-NEXT:    movaps (%rdi), %xmm060; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]61; SSE2-NEXT:    movaps %xmm0, %xmm162; SSE2-NEXT:    retq63;64; SSE42-LABEL: load_splat_8f32_8f32_01010101:65; SSE42:       # %bb.0: # %entry66; SSE42-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]67; SSE42-NEXT:    movapd %xmm0, %xmm168; SSE42-NEXT:    retq69;70; AVX-LABEL: load_splat_8f32_8f32_01010101:71; AVX:       # %bb.0: # %entry72; AVX-NEXT:    vbroadcastsd (%rdi), %ymm073; AVX-NEXT:    retq74entry:75  %ld = load <8 x float>, ptr %ptr76  %ret = shufflevector <8 x float> %ld, <8 x float> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>77  ret <8 x float> %ret78}79 80define <4 x i32> @load_splat_4i32_4i32_0101(ptr %ptr) nounwind uwtable readnone ssp {81; SSE-LABEL: load_splat_4i32_4i32_0101:82; SSE:       # %bb.0: # %entry83; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]84; SSE-NEXT:    retq85;86; AVX1-LABEL: load_splat_4i32_4i32_0101:87; AVX1:       # %bb.0: # %entry88; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = mem[0,1,0,1]89; AVX1-NEXT:    retq90;91; AVX2-LABEL: load_splat_4i32_4i32_0101:92; AVX2:       # %bb.0: # %entry93; AVX2-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]94; AVX2-NEXT:    retq95;96; AVX512-LABEL: load_splat_4i32_4i32_0101:97; AVX512:       # %bb.0: # %entry98; AVX512-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]99; AVX512-NEXT:    retq100entry:101  %ld = load <4 x i32>, ptr %ptr102  %ret = shufflevector <4 x i32> %ld, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>103  ret <4 x i32> %ret104}105 106define <8 x i32> @load_splat_8i32_4i32_01010101(ptr %ptr) nounwind uwtable readnone ssp {107; SSE-LABEL: load_splat_8i32_4i32_01010101:108; SSE:       # %bb.0: # %entry109; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]110; SSE-NEXT:    movdqa %xmm0, %xmm1111; SSE-NEXT:    retq112;113; AVX-LABEL: load_splat_8i32_4i32_01010101:114; AVX:       # %bb.0: # %entry115; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0116; AVX-NEXT:    retq117entry:118  %ld = load <4 x i32>, ptr %ptr119  %ret = shufflevector <4 x i32> %ld, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>120  ret <8 x i32> %ret121}122 123define <8 x i32> @load_splat_8i32_8i32_01010101(ptr %ptr) nounwind uwtable readnone ssp {124; SSE-LABEL: load_splat_8i32_8i32_01010101:125; SSE:       # %bb.0: # %entry126; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]127; SSE-NEXT:    movdqa %xmm0, %xmm1128; SSE-NEXT:    retq129;130; AVX-LABEL: load_splat_8i32_8i32_01010101:131; AVX:       # %bb.0: # %entry132; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0133; AVX-NEXT:    retq134entry:135  %ld = load <8 x i32>, ptr %ptr136  %ret = shufflevector <8 x i32> %ld, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>137  ret <8 x i32> %ret138}139 140define <8 x i16> @load_splat_8i16_8i16_01010101(ptr %ptr) nounwind uwtable readnone ssp {141; SSE-LABEL: load_splat_8i16_8i16_01010101:142; SSE:       # %bb.0: # %entry143; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,0,0,0]144; SSE-NEXT:    retq145;146; AVX1-LABEL: load_splat_8i16_8i16_01010101:147; AVX1:       # %bb.0: # %entry148; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = mem[0,0,0,0]149; AVX1-NEXT:    retq150;151; AVX2-LABEL: load_splat_8i16_8i16_01010101:152; AVX2:       # %bb.0: # %entry153; AVX2-NEXT:    vbroadcastss (%rdi), %xmm0154; AVX2-NEXT:    retq155;156; AVX512-LABEL: load_splat_8i16_8i16_01010101:157; AVX512:       # %bb.0: # %entry158; AVX512-NEXT:    vbroadcastss (%rdi), %xmm0159; AVX512-NEXT:    retq160entry:161  %ld = load <8 x i16>, ptr %ptr162  %ret = shufflevector <8 x i16> %ld, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>163  ret <8 x i16> %ret164}165 166define <8 x i16> @load_splat_8i16_8i16_01230123(ptr %ptr) nounwind uwtable readnone ssp {167; SSE-LABEL: load_splat_8i16_8i16_01230123:168; SSE:       # %bb.0: # %entry169; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]170; SSE-NEXT:    retq171;172; AVX1-LABEL: load_splat_8i16_8i16_01230123:173; AVX1:       # %bb.0: # %entry174; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = mem[0,1,0,1]175; AVX1-NEXT:    retq176;177; AVX2-LABEL: load_splat_8i16_8i16_01230123:178; AVX2:       # %bb.0: # %entry179; AVX2-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]180; AVX2-NEXT:    retq181;182; AVX512-LABEL: load_splat_8i16_8i16_01230123:183; AVX512:       # %bb.0: # %entry184; AVX512-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]185; AVX512-NEXT:    retq186entry:187  %ld = load <8 x i16>, ptr %ptr188  %ret = shufflevector <8 x i16> %ld, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>189  ret <8 x i16> %ret190}191 192define <16 x i16> @load_splat_16i16_8i16_0101010101010101(ptr %ptr) nounwind uwtable readnone ssp {193; SSE-LABEL: load_splat_16i16_8i16_0101010101010101:194; SSE:       # %bb.0: # %entry195; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,0,0,0]196; SSE-NEXT:    movdqa %xmm0, %xmm1197; SSE-NEXT:    retq198;199; AVX-LABEL: load_splat_16i16_8i16_0101010101010101:200; AVX:       # %bb.0: # %entry201; AVX-NEXT:    vbroadcastss (%rdi), %ymm0202; AVX-NEXT:    retq203entry:204  %ld = load <8 x i16>, ptr %ptr205  %ret = shufflevector <8 x i16> %ld, <8 x i16> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>206  ret <16 x i16> %ret207}208 209define <16 x i16> @load_splat_16i16_8i16_0123012301230123(ptr %ptr) nounwind uwtable readnone ssp {210; SSE-LABEL: load_splat_16i16_8i16_0123012301230123:211; SSE:       # %bb.0: # %entry212; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]213; SSE-NEXT:    movdqa %xmm0, %xmm1214; SSE-NEXT:    retq215;216; AVX-LABEL: load_splat_16i16_8i16_0123012301230123:217; AVX:       # %bb.0: # %entry218; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0219; AVX-NEXT:    retq220entry:221  %ld = load <8 x i16>, ptr %ptr222  %ret = shufflevector <8 x i16> %ld, <8 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3,i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>223  ret <16 x i16> %ret224}225 226define <16 x i16> @load_splat_16i16_16i16_0101010101010101(ptr %ptr) nounwind uwtable readnone ssp {227; SSE-LABEL: load_splat_16i16_16i16_0101010101010101:228; SSE:       # %bb.0: # %entry229; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,0,0,0]230; SSE-NEXT:    movdqa %xmm0, %xmm1231; SSE-NEXT:    retq232;233; AVX-LABEL: load_splat_16i16_16i16_0101010101010101:234; AVX:       # %bb.0: # %entry235; AVX-NEXT:    vbroadcastss (%rdi), %ymm0236; AVX-NEXT:    retq237entry:238  %ld = load <16 x i16>, ptr %ptr239  %ret = shufflevector <16 x i16> %ld, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>240  ret <16 x i16> %ret241}242 243define <16 x i16> @load_splat_16i16_16i16_0123012301230123(ptr %ptr) nounwind uwtable readnone ssp {244; SSE-LABEL: load_splat_16i16_16i16_0123012301230123:245; SSE:       # %bb.0: # %entry246; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]247; SSE-NEXT:    movdqa %xmm0, %xmm1248; SSE-NEXT:    retq249;250; AVX-LABEL: load_splat_16i16_16i16_0123012301230123:251; AVX:       # %bb.0: # %entry252; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0253; AVX-NEXT:    retq254entry:255  %ld = load <16 x i16>, ptr %ptr256  %ret = shufflevector <16 x i16> %ld, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3,i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>257  ret <16 x i16> %ret258}259 260define <16 x i8> @load_splat_16i8_16i8_0101010101010101(ptr %ptr) nounwind uwtable readnone ssp {261; SSE-LABEL: load_splat_16i8_16i8_0101010101010101:262; SSE:       # %bb.0: # %entry263; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = mem[0,0,0,0,4,5,6,7]264; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]265; SSE-NEXT:    retq266;267; AVX1-LABEL: load_splat_16i8_16i8_0101010101010101:268; AVX1:       # %bb.0: # %entry269; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = mem[0,0,0,0,4,5,6,7]270; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]271; AVX1-NEXT:    retq272;273; AVX2-LABEL: load_splat_16i8_16i8_0101010101010101:274; AVX2:       # %bb.0: # %entry275; AVX2-NEXT:    vpbroadcastw (%rdi), %xmm0276; AVX2-NEXT:    retq277;278; AVX512-LABEL: load_splat_16i8_16i8_0101010101010101:279; AVX512:       # %bb.0: # %entry280; AVX512-NEXT:    vpbroadcastw (%rdi), %xmm0281; AVX512-NEXT:    retq282entry:283  %ld = load <16 x i8>, ptr %ptr284  %ret = shufflevector <16 x i8> %ld, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>285  ret <16 x i8> %ret286}287 288define <16 x i8> @load_splat_16i8_16i8_0123012301230123(ptr %ptr) nounwind uwtable readnone ssp {289; SSE-LABEL: load_splat_16i8_16i8_0123012301230123:290; SSE:       # %bb.0: # %entry291; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,0,0,0]292; SSE-NEXT:    retq293;294; AVX1-LABEL: load_splat_16i8_16i8_0123012301230123:295; AVX1:       # %bb.0: # %entry296; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = mem[0,0,0,0]297; AVX1-NEXT:    retq298;299; AVX2-LABEL: load_splat_16i8_16i8_0123012301230123:300; AVX2:       # %bb.0: # %entry301; AVX2-NEXT:    vbroadcastss (%rdi), %xmm0302; AVX2-NEXT:    retq303;304; AVX512-LABEL: load_splat_16i8_16i8_0123012301230123:305; AVX512:       # %bb.0: # %entry306; AVX512-NEXT:    vbroadcastss (%rdi), %xmm0307; AVX512-NEXT:    retq308entry:309  %ld = load <16 x i8>, ptr %ptr310  %ret = shufflevector <16 x i8> %ld, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>311  ret <16 x i8> %ret312}313 314define <16 x i8> @load_splat_16i8_16i8_0123456701234567(ptr %ptr) nounwind uwtable readnone ssp {315; SSE-LABEL: load_splat_16i8_16i8_0123456701234567:316; SSE:       # %bb.0: # %entry317; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]318; SSE-NEXT:    retq319;320; AVX1-LABEL: load_splat_16i8_16i8_0123456701234567:321; AVX1:       # %bb.0: # %entry322; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = mem[0,1,0,1]323; AVX1-NEXT:    retq324;325; AVX2-LABEL: load_splat_16i8_16i8_0123456701234567:326; AVX2:       # %bb.0: # %entry327; AVX2-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]328; AVX2-NEXT:    retq329;330; AVX512-LABEL: load_splat_16i8_16i8_0123456701234567:331; AVX512:       # %bb.0: # %entry332; AVX512-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]333; AVX512-NEXT:    retq334entry:335  %ld = load <16 x i8>, ptr %ptr336  %ret = shufflevector <16 x i8> %ld, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>337  ret <16 x i8> %ret338}339 340define <32 x i8> @load_splat_32i8_16i8_01010101010101010101010101010101(ptr %ptr) nounwind uwtable readnone ssp {341; SSE-LABEL: load_splat_32i8_16i8_01010101010101010101010101010101:342; SSE:       # %bb.0: # %entry343; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = mem[0,0,0,0,4,5,6,7]344; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]345; SSE-NEXT:    movdqa %xmm0, %xmm1346; SSE-NEXT:    retq347;348; AVX1-LABEL: load_splat_32i8_16i8_01010101010101010101010101010101:349; AVX1:       # %bb.0: # %entry350; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = mem[0,0,0,0,4,5,6,7]351; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]352; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0353; AVX1-NEXT:    retq354;355; AVX2-LABEL: load_splat_32i8_16i8_01010101010101010101010101010101:356; AVX2:       # %bb.0: # %entry357; AVX2-NEXT:    vpbroadcastw (%rdi), %ymm0358; AVX2-NEXT:    retq359;360; AVX512-LABEL: load_splat_32i8_16i8_01010101010101010101010101010101:361; AVX512:       # %bb.0: # %entry362; AVX512-NEXT:    vpbroadcastw (%rdi), %ymm0363; AVX512-NEXT:    retq364entry:365  %ld = load <16 x i8>, ptr %ptr366  %ret = shufflevector <16 x i8> %ld, <16 x i8> undef, <32 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>367  ret <32 x i8> %ret368}369 370define <32 x i8> @load_splat_32i8_16i8_01230123012301230123012301230123(ptr %ptr) nounwind uwtable readnone ssp {371; SSE-LABEL: load_splat_32i8_16i8_01230123012301230123012301230123:372; SSE:       # %bb.0: # %entry373; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,0,0,0]374; SSE-NEXT:    movdqa %xmm0, %xmm1375; SSE-NEXT:    retq376;377; AVX-LABEL: load_splat_32i8_16i8_01230123012301230123012301230123:378; AVX:       # %bb.0: # %entry379; AVX-NEXT:    vbroadcastss (%rdi), %ymm0380; AVX-NEXT:    retq381entry:382  %ld = load <16 x i8>, ptr %ptr383  %ret = shufflevector <16 x i8> %ld, <16 x i8> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>384  ret <32 x i8> %ret385}386 387define <32 x i8> @load_splat_32i8_16i8_01234567012345670123456701234567(ptr %ptr) nounwind uwtable readnone ssp {388; SSE-LABEL: load_splat_32i8_16i8_01234567012345670123456701234567:389; SSE:       # %bb.0: # %entry390; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]391; SSE-NEXT:    movdqa %xmm0, %xmm1392; SSE-NEXT:    retq393;394; AVX-LABEL: load_splat_32i8_16i8_01234567012345670123456701234567:395; AVX:       # %bb.0: # %entry396; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0397; AVX-NEXT:    retq398entry:399  %ld = load <16 x i8>, ptr %ptr400  %ret = shufflevector <16 x i8> %ld, <16 x i8> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>401  ret <32 x i8> %ret402}403 404define <32 x i8> @load_splat_32i8_32i8_01010101010101010101010101010101(ptr %ptr) nounwind uwtable readnone ssp {405; SSE-LABEL: load_splat_32i8_32i8_01010101010101010101010101010101:406; SSE:       # %bb.0: # %entry407; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = mem[0,0,0,0,4,5,6,7]408; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]409; SSE-NEXT:    movdqa %xmm0, %xmm1410; SSE-NEXT:    retq411;412; AVX1-LABEL: load_splat_32i8_32i8_01010101010101010101010101010101:413; AVX1:       # %bb.0: # %entry414; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = mem[0,0,0,0,4,5,6,7]415; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]416; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0417; AVX1-NEXT:    retq418;419; AVX2-LABEL: load_splat_32i8_32i8_01010101010101010101010101010101:420; AVX2:       # %bb.0: # %entry421; AVX2-NEXT:    vpbroadcastw (%rdi), %ymm0422; AVX2-NEXT:    retq423;424; AVX512-LABEL: load_splat_32i8_32i8_01010101010101010101010101010101:425; AVX512:       # %bb.0: # %entry426; AVX512-NEXT:    vpbroadcastw (%rdi), %ymm0427; AVX512-NEXT:    retq428entry:429  %ld = load <32 x i8>, ptr %ptr430  %ret = shufflevector <32 x i8> %ld, <32 x i8> undef, <32 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>431  ret <32 x i8> %ret432}433 434define <32 x i8> @load_splat_32i8_32i8_01230123012301230123012301230123(ptr %ptr) nounwind uwtable readnone ssp {435; SSE-LABEL: load_splat_32i8_32i8_01230123012301230123012301230123:436; SSE:       # %bb.0: # %entry437; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,0,0,0]438; SSE-NEXT:    movdqa %xmm0, %xmm1439; SSE-NEXT:    retq440;441; AVX-LABEL: load_splat_32i8_32i8_01230123012301230123012301230123:442; AVX:       # %bb.0: # %entry443; AVX-NEXT:    vbroadcastss (%rdi), %ymm0444; AVX-NEXT:    retq445entry:446  %ld = load <32 x i8>, ptr %ptr447  %ret = shufflevector <32 x i8> %ld, <32 x i8> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>448  ret <32 x i8> %ret449}450 451define <32 x i8> @load_splat_32i8_32i8_01234567012345670123456701234567(ptr %ptr) nounwind uwtable readnone ssp {452; SSE-LABEL: load_splat_32i8_32i8_01234567012345670123456701234567:453; SSE:       # %bb.0: # %entry454; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]455; SSE-NEXT:    movdqa %xmm0, %xmm1456; SSE-NEXT:    retq457;458; AVX-LABEL: load_splat_32i8_32i8_01234567012345670123456701234567:459; AVX:       # %bb.0: # %entry460; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0461; AVX-NEXT:    retq462entry:463  %ld = load <32 x i8>, ptr %ptr464  %ret = shufflevector <32 x i8> %ld, <32 x i8> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>465  ret <32 x i8> %ret466}467 468define <4 x float> @load_splat_4f32_8f32_0000(ptr %ptr) nounwind uwtable readnone ssp {469; SSE-LABEL: load_splat_4f32_8f32_0000:470; SSE:       # %bb.0: # %entry471; SSE-NEXT:    movaps (%rdi), %xmm0472; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]473; SSE-NEXT:    retq474;475; AVX-LABEL: load_splat_4f32_8f32_0000:476; AVX:       # %bb.0: # %entry477; AVX-NEXT:    vbroadcastss (%rdi), %xmm0478; AVX-NEXT:    retq479entry:480  %ld = load <8 x float>, ptr %ptr481  %ret = shufflevector <8 x float> %ld, <8 x float> undef, <4 x i32> zeroinitializer482  ret <4 x float> %ret483}484 485define <8 x float> @load_splat_8f32_16f32_89898989(ptr %ptr) nounwind uwtable readnone ssp {486; SSE2-LABEL: load_splat_8f32_16f32_89898989:487; SSE2:       # %bb.0: # %entry488; SSE2-NEXT:    movaps 32(%rdi), %xmm0489; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]490; SSE2-NEXT:    movaps %xmm0, %xmm1491; SSE2-NEXT:    retq492;493; SSE42-LABEL: load_splat_8f32_16f32_89898989:494; SSE42:       # %bb.0: # %entry495; SSE42-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]496; SSE42-NEXT:    movapd %xmm0, %xmm1497; SSE42-NEXT:    retq498;499; AVX-LABEL: load_splat_8f32_16f32_89898989:500; AVX:       # %bb.0: # %entry501; AVX-NEXT:    vbroadcastsd 32(%rdi), %ymm0502; AVX-NEXT:    retq503entry:504  %ld = load <16 x float>, ptr %ptr505  %ret = shufflevector <16 x float> %ld, <16 x float> undef, <8 x i32> <i32 8, i32 9, i32 8, i32 9, i32 8, i32 9, i32 8, i32 9>506  ret <8 x float> %ret507}508 509; PR34394510define <4 x i32> @load_splat_4i32_2i32_0101(ptr %vp) {511; SSE-LABEL: load_splat_4i32_2i32_0101:512; SSE:       # %bb.0:513; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero514; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]515; SSE-NEXT:    retq516;517; AVX-LABEL: load_splat_4i32_2i32_0101:518; AVX:       # %bb.0:519; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]520; AVX-NEXT:    retq521  %vec = load <2 x i32>, ptr %vp522  %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>523  ret <4 x i32> %res524}525 526define <8 x i32> @load_splat_8i32_2i32_0101(ptr %vp) {527; SSE-LABEL: load_splat_8i32_2i32_0101:528; SSE:       # %bb.0:529; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero530; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]531; SSE-NEXT:    movdqa %xmm0, %xmm1532; SSE-NEXT:    retq533;534; AVX-LABEL: load_splat_8i32_2i32_0101:535; AVX:       # %bb.0:536; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0537; AVX-NEXT:    retq538  %vec = load <2 x i32>, ptr %vp539  %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>540  ret <8 x i32> %res541}542 543define <16 x i32> @load_splat_16i32_2i32_0101(ptr %vp) {544; SSE-LABEL: load_splat_16i32_2i32_0101:545; SSE:       # %bb.0:546; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero547; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]548; SSE-NEXT:    movdqa %xmm0, %xmm1549; SSE-NEXT:    movdqa %xmm0, %xmm2550; SSE-NEXT:    movdqa %xmm0, %xmm3551; SSE-NEXT:    retq552;553; AVX1-LABEL: load_splat_16i32_2i32_0101:554; AVX1:       # %bb.0:555; AVX1-NEXT:    vbroadcastsd (%rdi), %ymm0556; AVX1-NEXT:    vmovaps %ymm0, %ymm1557; AVX1-NEXT:    retq558;559; AVX2-LABEL: load_splat_16i32_2i32_0101:560; AVX2:       # %bb.0:561; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm0562; AVX2-NEXT:    vmovaps %ymm0, %ymm1563; AVX2-NEXT:    retq564;565; AVX512-LABEL: load_splat_16i32_2i32_0101:566; AVX512:       # %bb.0:567; AVX512-NEXT:    vbroadcastsd (%rdi), %zmm0568; AVX512-NEXT:    retq569  %vec = load <2 x i32>, ptr %vp570  %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>571  ret <16 x i32> %res572}573