brintos

brintos / llvm-project-archived public Read only

0
0
Text · 78.5 KiB · d151c6f Raw
2389 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2   | FileCheck %s --check-prefixes=ALL,SSE,SSE23; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s --check-prefixes=ALL,SSE,SSE414; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx    | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,AVX15; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2   | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,AVX26; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f,+avx512vl  | FileCheck %s --check-prefixes=ALL,AVX,AVX512,AVX512F7; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512bw,+avx512vl | FileCheck %s --check-prefixes=ALL,AVX,AVX512,AVX512BW8; RUN: llc < %s -mtriple=i686-- -mattr=+avx2 | FileCheck %s --check-prefixes=ALL,X86AVX29 10define <16 x i8> @undef_index(i8 %x) nounwind {11; ALL-LABEL: undef_index:12; ALL:       # %bb.0:13; ALL-NEXT:    ret{{[l|q]}}14  %ins = insertelement <16 x i8> undef, i8 %x, i64 undef15  ret <16 x i8> %ins16}17 18define <16 x i8> @undef_scalar(<16 x i8> %x, i32 %index) nounwind {19; ALL-LABEL: undef_scalar:20; ALL:       # %bb.0:21; ALL-NEXT:    ret{{[l|q]}}22  %ins = insertelement <16 x i8> %x, i8 undef, i32 %index23  ret <16 x i8> %ins24}25 26;27; Insertion into undef vectors28;29 30define <16 x i8> @arg_i8_v16i8_undef(i8 %x, i32 %y) nounwind {31; SSE2-LABEL: arg_i8_v16i8_undef:32; SSE2:       # %bb.0:33; SSE2-NEXT:    movd %edi, %xmm034; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]35; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]36; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]37; SSE2-NEXT:    retq38;39; SSE41-LABEL: arg_i8_v16i8_undef:40; SSE41:       # %bb.0:41; SSE41-NEXT:    movd %edi, %xmm042; SSE41-NEXT:    pxor %xmm1, %xmm143; SSE41-NEXT:    pshufb %xmm1, %xmm044; SSE41-NEXT:    retq45;46; AVX1-LABEL: arg_i8_v16i8_undef:47; AVX1:       # %bb.0:48; AVX1-NEXT:    vmovd %edi, %xmm049; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm150; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm051; AVX1-NEXT:    retq52;53; AVX2-LABEL: arg_i8_v16i8_undef:54; AVX2:       # %bb.0:55; AVX2-NEXT:    vmovd %edi, %xmm056; AVX2-NEXT:    vpbroadcastb %xmm0, %xmm057; AVX2-NEXT:    retq58;59; AVX512F-LABEL: arg_i8_v16i8_undef:60; AVX512F:       # %bb.0:61; AVX512F-NEXT:    vmovd %edi, %xmm062; AVX512F-NEXT:    vpbroadcastb %xmm0, %xmm063; AVX512F-NEXT:    retq64;65; AVX512BW-LABEL: arg_i8_v16i8_undef:66; AVX512BW:       # %bb.0:67; AVX512BW-NEXT:    vpbroadcastb %edi, %xmm068; AVX512BW-NEXT:    retq69;70; X86AVX2-LABEL: arg_i8_v16i8_undef:71; X86AVX2:       # %bb.0:72; X86AVX2-NEXT:    vpbroadcastb {{[0-9]+}}(%esp), %xmm073; X86AVX2-NEXT:    retl74  %ins = insertelement <16 x i8> undef, i8 %x, i32 %y75  ret <16 x i8> %ins76}77 78define <8 x i16> @arg_i16_v8i16_undef(i16 %x, i32 %y) nounwind {79; SSE-LABEL: arg_i16_v8i16_undef:80; SSE:       # %bb.0:81; SSE-NEXT:    movd %edi, %xmm082; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]83; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]84; SSE-NEXT:    retq85;86; AVX1-LABEL: arg_i16_v8i16_undef:87; AVX1:       # %bb.0:88; AVX1-NEXT:    vmovd %edi, %xmm089; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]90; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]91; AVX1-NEXT:    retq92;93; AVX2-LABEL: arg_i16_v8i16_undef:94; AVX2:       # %bb.0:95; AVX2-NEXT:    vmovd %edi, %xmm096; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm097; AVX2-NEXT:    retq98;99; AVX512F-LABEL: arg_i16_v8i16_undef:100; AVX512F:       # %bb.0:101; AVX512F-NEXT:    vmovd %edi, %xmm0102; AVX512F-NEXT:    vpbroadcastw %xmm0, %xmm0103; AVX512F-NEXT:    retq104;105; AVX512BW-LABEL: arg_i16_v8i16_undef:106; AVX512BW:       # %bb.0:107; AVX512BW-NEXT:    vpbroadcastw %edi, %xmm0108; AVX512BW-NEXT:    retq109;110; X86AVX2-LABEL: arg_i16_v8i16_undef:111; X86AVX2:       # %bb.0:112; X86AVX2-NEXT:    vpbroadcastw {{[0-9]+}}(%esp), %xmm0113; X86AVX2-NEXT:    retl114  %ins = insertelement <8 x i16> undef, i16 %x, i32 %y115  ret <8 x i16> %ins116}117 118define <4 x i32> @arg_i32_v4i32_undef(i32 %x, i32 %y) nounwind {119; SSE-LABEL: arg_i32_v4i32_undef:120; SSE:       # %bb.0:121; SSE-NEXT:    movd %edi, %xmm0122; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]123; SSE-NEXT:    retq124;125; AVX1-LABEL: arg_i32_v4i32_undef:126; AVX1:       # %bb.0:127; AVX1-NEXT:    vmovd %edi, %xmm0128; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]129; AVX1-NEXT:    retq130;131; AVX2-LABEL: arg_i32_v4i32_undef:132; AVX2:       # %bb.0:133; AVX2-NEXT:    vmovd %edi, %xmm0134; AVX2-NEXT:    vpbroadcastd %xmm0, %xmm0135; AVX2-NEXT:    retq136;137; AVX512-LABEL: arg_i32_v4i32_undef:138; AVX512:       # %bb.0:139; AVX512-NEXT:    vpbroadcastd %edi, %xmm0140; AVX512-NEXT:    retq141;142; X86AVX2-LABEL: arg_i32_v4i32_undef:143; X86AVX2:       # %bb.0:144; X86AVX2-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %xmm0145; X86AVX2-NEXT:    retl146  %ins = insertelement <4 x i32> undef, i32 %x, i32 %y147  ret <4 x i32> %ins148}149 150define <2 x i64> @arg_i64_v2i64_undef(i64 %x, i32 %y) nounwind {151; SSE-LABEL: arg_i64_v2i64_undef:152; SSE:       # %bb.0:153; SSE-NEXT:    movq %rdi, %xmm0154; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]155; SSE-NEXT:    retq156;157; AVX1-LABEL: arg_i64_v2i64_undef:158; AVX1:       # %bb.0:159; AVX1-NEXT:    vmovq %rdi, %xmm0160; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]161; AVX1-NEXT:    retq162;163; AVX2-LABEL: arg_i64_v2i64_undef:164; AVX2:       # %bb.0:165; AVX2-NEXT:    vmovq %rdi, %xmm0166; AVX2-NEXT:    vpbroadcastq %xmm0, %xmm0167; AVX2-NEXT:    retq168;169; AVX512-LABEL: arg_i64_v2i64_undef:170; AVX512:       # %bb.0:171; AVX512-NEXT:    vpbroadcastq %rdi, %xmm0172; AVX512-NEXT:    retq173;174; X86AVX2-LABEL: arg_i64_v2i64_undef:175; X86AVX2:       # %bb.0:176; X86AVX2-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]177; X86AVX2-NEXT:    retl178  %ins = insertelement <2 x i64> undef, i64 %x, i32 %y179  ret <2 x i64> %ins180}181 182define <4 x float> @arg_f32_v4f32_undef(float %x, i32 %y) nounwind {183; SSE-LABEL: arg_f32_v4f32_undef:184; SSE:       # %bb.0:185; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]186; SSE-NEXT:    retq187;188; AVX1-LABEL: arg_f32_v4f32_undef:189; AVX1:       # %bb.0:190; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,0,0,0]191; AVX1-NEXT:    retq192;193; AVX2-LABEL: arg_f32_v4f32_undef:194; AVX2:       # %bb.0:195; AVX2-NEXT:    vbroadcastss %xmm0, %xmm0196; AVX2-NEXT:    retq197;198; AVX512-LABEL: arg_f32_v4f32_undef:199; AVX512:       # %bb.0:200; AVX512-NEXT:    vbroadcastss %xmm0, %xmm0201; AVX512-NEXT:    retq202;203; X86AVX2-LABEL: arg_f32_v4f32_undef:204; X86AVX2:       # %bb.0:205; X86AVX2-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %xmm0206; X86AVX2-NEXT:    retl207  %ins = insertelement <4 x float> undef, float %x, i32 %y208  ret <4 x float> %ins209}210 211define <2 x double> @arg_f64_v2f64_undef(double %x, i32 %y) nounwind {212; SSE2-LABEL: arg_f64_v2f64_undef:213; SSE2:       # %bb.0:214; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]215; SSE2-NEXT:    retq216;217; SSE41-LABEL: arg_f64_v2f64_undef:218; SSE41:       # %bb.0:219; SSE41-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]220; SSE41-NEXT:    retq221;222; AVX-LABEL: arg_f64_v2f64_undef:223; AVX:       # %bb.0:224; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]225; AVX-NEXT:    retq226;227; X86AVX2-LABEL: arg_f64_v2f64_undef:228; X86AVX2:       # %bb.0:229; X86AVX2-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]230; X86AVX2-NEXT:    retl231  %ins = insertelement <2 x double> undef, double %x, i32 %y232  ret <2 x double> %ins233}234 235define <16 x i8> @load_i8_v16i8_undef(ptr %p, i32 %y) nounwind {236; SSE2-LABEL: load_i8_v16i8_undef:237; SSE2:       # %bb.0:238; SSE2-NEXT:    movzbl (%rdi), %eax239; SSE2-NEXT:    movd %eax, %xmm0240; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]241; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]242; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]243; SSE2-NEXT:    retq244;245; SSE41-LABEL: load_i8_v16i8_undef:246; SSE41:       # %bb.0:247; SSE41-NEXT:    movzbl (%rdi), %eax248; SSE41-NEXT:    movd %eax, %xmm0249; SSE41-NEXT:    pxor %xmm1, %xmm1250; SSE41-NEXT:    pshufb %xmm1, %xmm0251; SSE41-NEXT:    retq252;253; AVX1-LABEL: load_i8_v16i8_undef:254; AVX1:       # %bb.0:255; AVX1-NEXT:    movzbl (%rdi), %eax256; AVX1-NEXT:    vmovd %eax, %xmm0257; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1258; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0259; AVX1-NEXT:    retq260;261; AVX2-LABEL: load_i8_v16i8_undef:262; AVX2:       # %bb.0:263; AVX2-NEXT:    vpbroadcastb (%rdi), %xmm0264; AVX2-NEXT:    retq265;266; AVX512-LABEL: load_i8_v16i8_undef:267; AVX512:       # %bb.0:268; AVX512-NEXT:    vpbroadcastb (%rdi), %xmm0269; AVX512-NEXT:    retq270;271; X86AVX2-LABEL: load_i8_v16i8_undef:272; X86AVX2:       # %bb.0:273; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax274; X86AVX2-NEXT:    vpbroadcastb (%eax), %xmm0275; X86AVX2-NEXT:    retl276  %x = load i8, ptr %p277  %ins = insertelement <16 x i8> undef, i8 %x, i32 %y278  ret <16 x i8> %ins279}280 281define <8 x i16> @load_i16_v8i16_undef(ptr %p, i32 %y) nounwind {282; SSE-LABEL: load_i16_v8i16_undef:283; SSE:       # %bb.0:284; SSE-NEXT:    movzwl (%rdi), %eax285; SSE-NEXT:    movd %eax, %xmm0286; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]287; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]288; SSE-NEXT:    retq289;290; AVX1-LABEL: load_i16_v8i16_undef:291; AVX1:       # %bb.0:292; AVX1-NEXT:    movzwl (%rdi), %eax293; AVX1-NEXT:    vmovd %eax, %xmm0294; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]295; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]296; AVX1-NEXT:    retq297;298; AVX2-LABEL: load_i16_v8i16_undef:299; AVX2:       # %bb.0:300; AVX2-NEXT:    vpbroadcastw (%rdi), %xmm0301; AVX2-NEXT:    retq302;303; AVX512-LABEL: load_i16_v8i16_undef:304; AVX512:       # %bb.0:305; AVX512-NEXT:    vpbroadcastw (%rdi), %xmm0306; AVX512-NEXT:    retq307;308; X86AVX2-LABEL: load_i16_v8i16_undef:309; X86AVX2:       # %bb.0:310; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax311; X86AVX2-NEXT:    vpbroadcastw (%eax), %xmm0312; X86AVX2-NEXT:    retl313  %x = load i16, ptr %p314  %ins = insertelement <8 x i16> undef, i16 %x, i32 %y315  ret <8 x i16> %ins316}317 318define <4 x i32> @load_i32_v4i32_undef(ptr %p, i32 %y) nounwind {319; SSE-LABEL: load_i32_v4i32_undef:320; SSE:       # %bb.0:321; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero322; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]323; SSE-NEXT:    retq324;325; AVX-LABEL: load_i32_v4i32_undef:326; AVX:       # %bb.0:327; AVX-NEXT:    vbroadcastss (%rdi), %xmm0328; AVX-NEXT:    retq329;330; X86AVX2-LABEL: load_i32_v4i32_undef:331; X86AVX2:       # %bb.0:332; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax333; X86AVX2-NEXT:    vbroadcastss (%eax), %xmm0334; X86AVX2-NEXT:    retl335  %x = load i32, ptr %p336  %ins = insertelement <4 x i32> undef, i32 %x, i32 %y337  ret <4 x i32> %ins338}339 340define <2 x i64> @load_i64_v2i64_undef(ptr %p, i32 %y) nounwind {341; SSE-LABEL: load_i64_v2i64_undef:342; SSE:       # %bb.0:343; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero344; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]345; SSE-NEXT:    retq346;347; AVX-LABEL: load_i64_v2i64_undef:348; AVX:       # %bb.0:349; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]350; AVX-NEXT:    retq351;352; X86AVX2-LABEL: load_i64_v2i64_undef:353; X86AVX2:       # %bb.0:354; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax355; X86AVX2-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]356; X86AVX2-NEXT:    retl357  %x = load i64, ptr %p358  %ins = insertelement <2 x i64> undef, i64 %x, i32 %y359  ret <2 x i64> %ins360}361 362define <4 x float> @load_f32_v4f32_undef(ptr %p, i32 %y) nounwind {363; SSE-LABEL: load_f32_v4f32_undef:364; SSE:       # %bb.0:365; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero366; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]367; SSE-NEXT:    retq368;369; AVX-LABEL: load_f32_v4f32_undef:370; AVX:       # %bb.0:371; AVX-NEXT:    vbroadcastss (%rdi), %xmm0372; AVX-NEXT:    retq373;374; X86AVX2-LABEL: load_f32_v4f32_undef:375; X86AVX2:       # %bb.0:376; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax377; X86AVX2-NEXT:    vbroadcastss (%eax), %xmm0378; X86AVX2-NEXT:    retl379  %x = load float, ptr %p380  %ins = insertelement <4 x float> undef, float %x, i32 %y381  ret <4 x float> %ins382}383 384define <2 x double> @load_f64_v2f64_undef(ptr %p, i32 %y) nounwind {385; SSE2-LABEL: load_f64_v2f64_undef:386; SSE2:       # %bb.0:387; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero388; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]389; SSE2-NEXT:    retq390;391; SSE41-LABEL: load_f64_v2f64_undef:392; SSE41:       # %bb.0:393; SSE41-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]394; SSE41-NEXT:    retq395;396; AVX-LABEL: load_f64_v2f64_undef:397; AVX:       # %bb.0:398; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]399; AVX-NEXT:    retq400;401; X86AVX2-LABEL: load_f64_v2f64_undef:402; X86AVX2:       # %bb.0:403; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax404; X86AVX2-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]405; X86AVX2-NEXT:    retl406  %x = load double, ptr %p407  %ins = insertelement <2 x double> undef, double %x, i32 %y408  ret <2 x double> %ins409}410 411define <32 x i8> @arg_i8_v32i8_undef(i8 %x, i32 %y) nounwind {412; SSE-LABEL: arg_i8_v32i8_undef:413; SSE:       # %bb.0:414; SSE-NEXT:    # kill: def $esi killed $esi def $rsi415; SSE-NEXT:    andl $31, %esi416; SSE-NEXT:    movb %dil, -40(%rsp,%rsi)417; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0418; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1419; SSE-NEXT:    retq420;421; AVX1-LABEL: arg_i8_v32i8_undef:422; AVX1:       # %bb.0:423; AVX1-NEXT:    vmovd %edi, %xmm0424; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1425; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0426; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0427; AVX1-NEXT:    retq428;429; AVX2-LABEL: arg_i8_v32i8_undef:430; AVX2:       # %bb.0:431; AVX2-NEXT:    vmovd %edi, %xmm0432; AVX2-NEXT:    vpbroadcastb %xmm0, %ymm0433; AVX2-NEXT:    retq434;435; AVX512F-LABEL: arg_i8_v32i8_undef:436; AVX512F:       # %bb.0:437; AVX512F-NEXT:    vmovd %edi, %xmm0438; AVX512F-NEXT:    vpbroadcastb %xmm0, %ymm0439; AVX512F-NEXT:    retq440;441; AVX512BW-LABEL: arg_i8_v32i8_undef:442; AVX512BW:       # %bb.0:443; AVX512BW-NEXT:    vpbroadcastb %edi, %ymm0444; AVX512BW-NEXT:    retq445;446; X86AVX2-LABEL: arg_i8_v32i8_undef:447; X86AVX2:       # %bb.0:448; X86AVX2-NEXT:    vpbroadcastb {{[0-9]+}}(%esp), %ymm0449; X86AVX2-NEXT:    retl450  %ins = insertelement <32 x i8> undef, i8 %x, i32 %y451  ret <32 x i8> %ins452}453 454define <16 x i16> @arg_i16_v16i16_undef(i16 %x, i32 %y) nounwind {455; SSE-LABEL: arg_i16_v16i16_undef:456; SSE:       # %bb.0:457; SSE-NEXT:    # kill: def $esi killed $esi def $rsi458; SSE-NEXT:    andl $15, %esi459; SSE-NEXT:    movw %di, -40(%rsp,%rsi,2)460; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0461; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1462; SSE-NEXT:    retq463;464; AVX1-LABEL: arg_i16_v16i16_undef:465; AVX1:       # %bb.0:466; AVX1-NEXT:    vmovd %edi, %xmm0467; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]468; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]469; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0470; AVX1-NEXT:    retq471;472; AVX2-LABEL: arg_i16_v16i16_undef:473; AVX2:       # %bb.0:474; AVX2-NEXT:    vmovd %edi, %xmm0475; AVX2-NEXT:    vpbroadcastw %xmm0, %ymm0476; AVX2-NEXT:    retq477;478; AVX512F-LABEL: arg_i16_v16i16_undef:479; AVX512F:       # %bb.0:480; AVX512F-NEXT:    vmovd %edi, %xmm0481; AVX512F-NEXT:    vpbroadcastw %xmm0, %ymm0482; AVX512F-NEXT:    retq483;484; AVX512BW-LABEL: arg_i16_v16i16_undef:485; AVX512BW:       # %bb.0:486; AVX512BW-NEXT:    vpbroadcastw %edi, %ymm0487; AVX512BW-NEXT:    retq488;489; X86AVX2-LABEL: arg_i16_v16i16_undef:490; X86AVX2:       # %bb.0:491; X86AVX2-NEXT:    vpbroadcastw {{[0-9]+}}(%esp), %ymm0492; X86AVX2-NEXT:    retl493  %ins = insertelement <16 x i16> undef, i16 %x, i32 %y494  ret <16 x i16> %ins495}496 497define <8 x i32> @arg_i32_v8i32_undef(i32 %x, i32 %y) nounwind {498; SSE-LABEL: arg_i32_v8i32_undef:499; SSE:       # %bb.0:500; SSE-NEXT:    # kill: def $esi killed $esi def $rsi501; SSE-NEXT:    andl $7, %esi502; SSE-NEXT:    movl %edi, -40(%rsp,%rsi,4)503; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0504; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1505; SSE-NEXT:    retq506;507; AVX1-LABEL: arg_i32_v8i32_undef:508; AVX1:       # %bb.0:509; AVX1-NEXT:    vmovd %edi, %xmm0510; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]511; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0512; AVX1-NEXT:    retq513;514; AVX2-LABEL: arg_i32_v8i32_undef:515; AVX2:       # %bb.0:516; AVX2-NEXT:    vmovd %edi, %xmm0517; AVX2-NEXT:    vpbroadcastd %xmm0, %ymm0518; AVX2-NEXT:    retq519;520; AVX512-LABEL: arg_i32_v8i32_undef:521; AVX512:       # %bb.0:522; AVX512-NEXT:    vpbroadcastd %edi, %ymm0523; AVX512-NEXT:    retq524;525; X86AVX2-LABEL: arg_i32_v8i32_undef:526; X86AVX2:       # %bb.0:527; X86AVX2-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %ymm0528; X86AVX2-NEXT:    retl529  %ins = insertelement <8 x i32> undef, i32 %x, i32 %y530  ret <8 x i32> %ins531}532 533define <4 x i64> @arg_i64_v4i64_undef(i64 %x, i32 %y) nounwind {534; SSE-LABEL: arg_i64_v4i64_undef:535; SSE:       # %bb.0:536; SSE-NEXT:    # kill: def $esi killed $esi def $rsi537; SSE-NEXT:    andl $3, %esi538; SSE-NEXT:    movq %rdi, -40(%rsp,%rsi,8)539; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0540; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1541; SSE-NEXT:    retq542;543; AVX1-LABEL: arg_i64_v4i64_undef:544; AVX1:       # %bb.0:545; AVX1-NEXT:    vmovq %rdi, %xmm0546; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]547; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0548; AVX1-NEXT:    retq549;550; AVX2-LABEL: arg_i64_v4i64_undef:551; AVX2:       # %bb.0:552; AVX2-NEXT:    vmovq %rdi, %xmm0553; AVX2-NEXT:    vpbroadcastq %xmm0, %ymm0554; AVX2-NEXT:    retq555;556; AVX512-LABEL: arg_i64_v4i64_undef:557; AVX512:       # %bb.0:558; AVX512-NEXT:    vpbroadcastq %rdi, %ymm0559; AVX512-NEXT:    retq560;561; X86AVX2-LABEL: arg_i64_v4i64_undef:562; X86AVX2:       # %bb.0:563; X86AVX2-NEXT:    vbroadcastsd {{[0-9]+}}(%esp), %ymm0564; X86AVX2-NEXT:    retl565  %ins = insertelement <4 x i64> undef, i64 %x, i32 %y566  ret <4 x i64> %ins567}568 569define <8 x float> @arg_f32_v8f32_undef(float %x, i32 %y) nounwind {570; SSE-LABEL: arg_f32_v8f32_undef:571; SSE:       # %bb.0:572; SSE-NEXT:    # kill: def $edi killed $edi def $rdi573; SSE-NEXT:    andl $7, %edi574; SSE-NEXT:    movss %xmm0, -40(%rsp,%rdi,4)575; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0576; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1577; SSE-NEXT:    retq578;579; AVX1-LABEL: arg_f32_v8f32_undef:580; AVX1:       # %bb.0:581; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,0,0,0]582; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0583; AVX1-NEXT:    retq584;585; AVX2-LABEL: arg_f32_v8f32_undef:586; AVX2:       # %bb.0:587; AVX2-NEXT:    vbroadcastss %xmm0, %ymm0588; AVX2-NEXT:    retq589;590; AVX512-LABEL: arg_f32_v8f32_undef:591; AVX512:       # %bb.0:592; AVX512-NEXT:    vbroadcastss %xmm0, %ymm0593; AVX512-NEXT:    retq594;595; X86AVX2-LABEL: arg_f32_v8f32_undef:596; X86AVX2:       # %bb.0:597; X86AVX2-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %ymm0598; X86AVX2-NEXT:    retl599  %ins = insertelement <8 x float> undef, float %x, i32 %y600  ret <8 x float> %ins601}602 603define <4 x double> @arg_f64_v4f64_undef(double %x, i32 %y) nounwind {604; SSE-LABEL: arg_f64_v4f64_undef:605; SSE:       # %bb.0:606; SSE-NEXT:    # kill: def $edi killed $edi def $rdi607; SSE-NEXT:    andl $3, %edi608; SSE-NEXT:    movsd %xmm0, -40(%rsp,%rdi,8)609; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0610; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1611; SSE-NEXT:    retq612;613; AVX1-LABEL: arg_f64_v4f64_undef:614; AVX1:       # %bb.0:615; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]616; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0617; AVX1-NEXT:    retq618;619; AVX2-LABEL: arg_f64_v4f64_undef:620; AVX2:       # %bb.0:621; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0622; AVX2-NEXT:    retq623;624; AVX512-LABEL: arg_f64_v4f64_undef:625; AVX512:       # %bb.0:626; AVX512-NEXT:    vbroadcastsd %xmm0, %ymm0627; AVX512-NEXT:    retq628;629; X86AVX2-LABEL: arg_f64_v4f64_undef:630; X86AVX2:       # %bb.0:631; X86AVX2-NEXT:    vbroadcastsd {{[0-9]+}}(%esp), %ymm0632; X86AVX2-NEXT:    retl633  %ins = insertelement <4 x double> undef, double %x, i32 %y634  ret <4 x double> %ins635}636 637define <32 x i8> @load_i8_v32i8_undef(ptr %p, i32 %y) nounwind {638; SSE-LABEL: load_i8_v32i8_undef:639; SSE:       # %bb.0:640; SSE-NEXT:    # kill: def $esi killed $esi def $rsi641; SSE-NEXT:    movzbl (%rdi), %eax642; SSE-NEXT:    andl $31, %esi643; SSE-NEXT:    movb %al, -40(%rsp,%rsi)644; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0645; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1646; SSE-NEXT:    retq647;648; AVX1-LABEL: load_i8_v32i8_undef:649; AVX1:       # %bb.0:650; AVX1-NEXT:    movzbl (%rdi), %eax651; AVX1-NEXT:    vmovd %eax, %xmm0652; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1653; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0654; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0655; AVX1-NEXT:    retq656;657; AVX2-LABEL: load_i8_v32i8_undef:658; AVX2:       # %bb.0:659; AVX2-NEXT:    vpbroadcastb (%rdi), %ymm0660; AVX2-NEXT:    retq661;662; AVX512-LABEL: load_i8_v32i8_undef:663; AVX512:       # %bb.0:664; AVX512-NEXT:    vpbroadcastb (%rdi), %ymm0665; AVX512-NEXT:    retq666;667; X86AVX2-LABEL: load_i8_v32i8_undef:668; X86AVX2:       # %bb.0:669; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax670; X86AVX2-NEXT:    vpbroadcastb (%eax), %ymm0671; X86AVX2-NEXT:    retl672  %x = load i8, ptr %p673  %ins = insertelement <32 x i8> undef, i8 %x, i32 %y674  ret <32 x i8> %ins675}676 677define <16 x i16> @load_i16_v16i16_undef(ptr %p, i32 %y) nounwind {678; SSE-LABEL: load_i16_v16i16_undef:679; SSE:       # %bb.0:680; SSE-NEXT:    # kill: def $esi killed $esi def $rsi681; SSE-NEXT:    movzwl (%rdi), %eax682; SSE-NEXT:    andl $15, %esi683; SSE-NEXT:    movw %ax, -40(%rsp,%rsi,2)684; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0685; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1686; SSE-NEXT:    retq687;688; AVX1-LABEL: load_i16_v16i16_undef:689; AVX1:       # %bb.0:690; AVX1-NEXT:    movzwl (%rdi), %eax691; AVX1-NEXT:    vmovd %eax, %xmm0692; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]693; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]694; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0695; AVX1-NEXT:    retq696;697; AVX2-LABEL: load_i16_v16i16_undef:698; AVX2:       # %bb.0:699; AVX2-NEXT:    vpbroadcastw (%rdi), %ymm0700; AVX2-NEXT:    retq701;702; AVX512-LABEL: load_i16_v16i16_undef:703; AVX512:       # %bb.0:704; AVX512-NEXT:    vpbroadcastw (%rdi), %ymm0705; AVX512-NEXT:    retq706;707; X86AVX2-LABEL: load_i16_v16i16_undef:708; X86AVX2:       # %bb.0:709; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax710; X86AVX2-NEXT:    vpbroadcastw (%eax), %ymm0711; X86AVX2-NEXT:    retl712  %x = load i16, ptr %p713  %ins = insertelement <16 x i16> undef, i16 %x, i32 %y714  ret <16 x i16> %ins715}716 717define <8 x i32> @load_i32_v8i32_undef(ptr %p, i32 %y) nounwind {718; SSE-LABEL: load_i32_v8i32_undef:719; SSE:       # %bb.0:720; SSE-NEXT:    # kill: def $esi killed $esi def $rsi721; SSE-NEXT:    movl (%rdi), %eax722; SSE-NEXT:    andl $7, %esi723; SSE-NEXT:    movl %eax, -40(%rsp,%rsi,4)724; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0725; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1726; SSE-NEXT:    retq727;728; AVX-LABEL: load_i32_v8i32_undef:729; AVX:       # %bb.0:730; AVX-NEXT:    vbroadcastss (%rdi), %ymm0731; AVX-NEXT:    retq732;733; X86AVX2-LABEL: load_i32_v8i32_undef:734; X86AVX2:       # %bb.0:735; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax736; X86AVX2-NEXT:    vbroadcastss (%eax), %ymm0737; X86AVX2-NEXT:    retl738  %x = load i32, ptr %p739  %ins = insertelement <8 x i32> undef, i32 %x, i32 %y740  ret <8 x i32> %ins741}742 743define <4 x i64> @load_i64_v4i64_undef(ptr %p, i32 %y) nounwind {744; SSE-LABEL: load_i64_v4i64_undef:745; SSE:       # %bb.0:746; SSE-NEXT:    # kill: def $esi killed $esi def $rsi747; SSE-NEXT:    movq (%rdi), %rax748; SSE-NEXT:    andl $3, %esi749; SSE-NEXT:    movq %rax, -40(%rsp,%rsi,8)750; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0751; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1752; SSE-NEXT:    retq753;754; AVX-LABEL: load_i64_v4i64_undef:755; AVX:       # %bb.0:756; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0757; AVX-NEXT:    retq758;759; X86AVX2-LABEL: load_i64_v4i64_undef:760; X86AVX2:       # %bb.0:761; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax762; X86AVX2-NEXT:    vbroadcastsd (%eax), %ymm0763; X86AVX2-NEXT:    retl764  %x = load i64, ptr %p765  %ins = insertelement <4 x i64> undef, i64 %x, i32 %y766  ret <4 x i64> %ins767}768 769define <8 x float> @load_f32_v8f32_undef(ptr %p, i32 %y) nounwind {770; SSE-LABEL: load_f32_v8f32_undef:771; SSE:       # %bb.0:772; SSE-NEXT:    # kill: def $esi killed $esi def $rsi773; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero774; SSE-NEXT:    andl $7, %esi775; SSE-NEXT:    movss %xmm0, -40(%rsp,%rsi,4)776; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0777; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1778; SSE-NEXT:    retq779;780; AVX-LABEL: load_f32_v8f32_undef:781; AVX:       # %bb.0:782; AVX-NEXT:    vbroadcastss (%rdi), %ymm0783; AVX-NEXT:    retq784;785; X86AVX2-LABEL: load_f32_v8f32_undef:786; X86AVX2:       # %bb.0:787; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax788; X86AVX2-NEXT:    vbroadcastss (%eax), %ymm0789; X86AVX2-NEXT:    retl790  %x = load float, ptr %p791  %ins = insertelement <8 x float> undef, float %x, i32 %y792  ret <8 x float> %ins793}794 795define <4 x double> @load_f64_v4f64_undef(ptr %p, i32 %y) nounwind {796; SSE-LABEL: load_f64_v4f64_undef:797; SSE:       # %bb.0:798; SSE-NEXT:    # kill: def $esi killed $esi def $rsi799; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero800; SSE-NEXT:    andl $3, %esi801; SSE-NEXT:    movsd %xmm0, -40(%rsp,%rsi,8)802; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0803; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1804; SSE-NEXT:    retq805;806; AVX-LABEL: load_f64_v4f64_undef:807; AVX:       # %bb.0:808; AVX-NEXT:    vbroadcastsd (%rdi), %ymm0809; AVX-NEXT:    retq810;811; X86AVX2-LABEL: load_f64_v4f64_undef:812; X86AVX2:       # %bb.0:813; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax814; X86AVX2-NEXT:    vbroadcastsd (%eax), %ymm0815; X86AVX2-NEXT:    retl816  %x = load double, ptr %p817  %ins = insertelement <4 x double> undef, double %x, i32 %y818  ret <4 x double> %ins819}820 821;822; Insertion into arg vectors823;824 825define <16 x i8> @arg_i8_v16i8(<16 x i8> %v, i8 %x, i32 %y) nounwind {826; SSE-LABEL: arg_i8_v16i8:827; SSE:       # %bb.0:828; SSE-NEXT:    # kill: def $esi killed $esi def $rsi829; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)830; SSE-NEXT:    andl $15, %esi831; SSE-NEXT:    movb %dil, -24(%rsp,%rsi)832; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0833; SSE-NEXT:    retq834;835; AVX1OR2-LABEL: arg_i8_v16i8:836; AVX1OR2:       # %bb.0:837; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi838; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)839; AVX1OR2-NEXT:    andl $15, %esi840; AVX1OR2-NEXT:    movb %dil, -24(%rsp,%rsi)841; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm0842; AVX1OR2-NEXT:    retq843;844; AVX512F-LABEL: arg_i8_v16i8:845; AVX512F:       # %bb.0:846; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi847; AVX512F-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)848; AVX512F-NEXT:    andl $15, %esi849; AVX512F-NEXT:    movb %dil, -24(%rsp,%rsi)850; AVX512F-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm0851; AVX512F-NEXT:    retq852;853; AVX512BW-LABEL: arg_i8_v16i8:854; AVX512BW:       # %bb.0:855; AVX512BW-NEXT:    vpbroadcastb %esi, %xmm1856; AVX512BW-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k1857; AVX512BW-NEXT:    vpbroadcastb %edi, %xmm0 {%k1}858; AVX512BW-NEXT:    retq859;860; X86AVX2-LABEL: arg_i8_v16i8:861; X86AVX2:       # %bb.0:862; X86AVX2-NEXT:    pushl %ebp863; X86AVX2-NEXT:    movl %esp, %ebp864; X86AVX2-NEXT:    andl $-16, %esp865; X86AVX2-NEXT:    subl $32, %esp866; X86AVX2-NEXT:    movl 12(%ebp), %eax867; X86AVX2-NEXT:    andl $15, %eax868; X86AVX2-NEXT:    movzbl 8(%ebp), %ecx869; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)870; X86AVX2-NEXT:    movb %cl, (%esp,%eax)871; X86AVX2-NEXT:    vmovaps (%esp), %xmm0872; X86AVX2-NEXT:    movl %ebp, %esp873; X86AVX2-NEXT:    popl %ebp874; X86AVX2-NEXT:    retl875  %ins = insertelement <16 x i8> %v, i8 %x, i32 %y876  ret <16 x i8> %ins877}878 879define <8 x i16> @arg_i16_v8i16(<8 x i16> %v, i16 %x, i32 %y) nounwind {880; SSE-LABEL: arg_i16_v8i16:881; SSE:       # %bb.0:882; SSE-NEXT:    # kill: def $esi killed $esi def $rsi883; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)884; SSE-NEXT:    andl $7, %esi885; SSE-NEXT:    movw %di, -24(%rsp,%rsi,2)886; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0887; SSE-NEXT:    retq888;889; AVX1OR2-LABEL: arg_i16_v8i16:890; AVX1OR2:       # %bb.0:891; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi892; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)893; AVX1OR2-NEXT:    andl $7, %esi894; AVX1OR2-NEXT:    movw %di, -24(%rsp,%rsi,2)895; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm0896; AVX1OR2-NEXT:    retq897;898; AVX512F-LABEL: arg_i16_v8i16:899; AVX512F:       # %bb.0:900; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi901; AVX512F-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)902; AVX512F-NEXT:    andl $7, %esi903; AVX512F-NEXT:    movw %di, -24(%rsp,%rsi,2)904; AVX512F-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm0905; AVX512F-NEXT:    retq906;907; AVX512BW-LABEL: arg_i16_v8i16:908; AVX512BW:       # %bb.0:909; AVX512BW-NEXT:    vpbroadcastw %esi, %xmm1910; AVX512BW-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k1911; AVX512BW-NEXT:    vpbroadcastw %edi, %xmm0 {%k1}912; AVX512BW-NEXT:    retq913;914; X86AVX2-LABEL: arg_i16_v8i16:915; X86AVX2:       # %bb.0:916; X86AVX2-NEXT:    pushl %ebp917; X86AVX2-NEXT:    movl %esp, %ebp918; X86AVX2-NEXT:    andl $-16, %esp919; X86AVX2-NEXT:    subl $32, %esp920; X86AVX2-NEXT:    movl 12(%ebp), %eax921; X86AVX2-NEXT:    andl $7, %eax922; X86AVX2-NEXT:    movzwl 8(%ebp), %ecx923; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)924; X86AVX2-NEXT:    movw %cx, (%esp,%eax,2)925; X86AVX2-NEXT:    vmovaps (%esp), %xmm0926; X86AVX2-NEXT:    movl %ebp, %esp927; X86AVX2-NEXT:    popl %ebp928; X86AVX2-NEXT:    retl929  %ins = insertelement <8 x i16> %v, i16 %x, i32 %y930  ret <8 x i16> %ins931}932 933define <4 x i32> @arg_i32_v4i32(<4 x i32> %v, i32 %x, i32 %y) nounwind {934; SSE-LABEL: arg_i32_v4i32:935; SSE:       # %bb.0:936; SSE-NEXT:    # kill: def $esi killed $esi def $rsi937; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)938; SSE-NEXT:    andl $3, %esi939; SSE-NEXT:    movl %edi, -24(%rsp,%rsi,4)940; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0941; SSE-NEXT:    retq942;943; AVX1OR2-LABEL: arg_i32_v4i32:944; AVX1OR2:       # %bb.0:945; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi946; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)947; AVX1OR2-NEXT:    andl $3, %esi948; AVX1OR2-NEXT:    movl %edi, -24(%rsp,%rsi,4)949; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm0950; AVX1OR2-NEXT:    retq951;952; AVX512-LABEL: arg_i32_v4i32:953; AVX512:       # %bb.0:954; AVX512-NEXT:    vpbroadcastd %esi, %xmm1955; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k1956; AVX512-NEXT:    vpbroadcastd %edi, %xmm0 {%k1}957; AVX512-NEXT:    retq958;959; X86AVX2-LABEL: arg_i32_v4i32:960; X86AVX2:       # %bb.0:961; X86AVX2-NEXT:    pushl %ebp962; X86AVX2-NEXT:    movl %esp, %ebp963; X86AVX2-NEXT:    andl $-16, %esp964; X86AVX2-NEXT:    subl $32, %esp965; X86AVX2-NEXT:    movl 12(%ebp), %eax966; X86AVX2-NEXT:    andl $3, %eax967; X86AVX2-NEXT:    movl 8(%ebp), %ecx968; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)969; X86AVX2-NEXT:    movl %ecx, (%esp,%eax,4)970; X86AVX2-NEXT:    vmovaps (%esp), %xmm0971; X86AVX2-NEXT:    movl %ebp, %esp972; X86AVX2-NEXT:    popl %ebp973; X86AVX2-NEXT:    retl974  %ins = insertelement <4 x i32> %v, i32 %x, i32 %y975  ret <4 x i32> %ins976}977 978define <2 x i64> @arg_i64_v2i64(<2 x i64> %v, i64 %x, i32 %y) nounwind {979; SSE-LABEL: arg_i64_v2i64:980; SSE:       # %bb.0:981; SSE-NEXT:    # kill: def $esi killed $esi def $rsi982; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)983; SSE-NEXT:    andl $1, %esi984; SSE-NEXT:    movq %rdi, -24(%rsp,%rsi,8)985; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0986; SSE-NEXT:    retq987;988; AVX1OR2-LABEL: arg_i64_v2i64:989; AVX1OR2:       # %bb.0:990; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi991; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)992; AVX1OR2-NEXT:    andl $1, %esi993; AVX1OR2-NEXT:    movq %rdi, -24(%rsp,%rsi,8)994; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm0995; AVX1OR2-NEXT:    retq996;997; AVX512-LABEL: arg_i64_v2i64:998; AVX512:       # %bb.0:999; AVX512-NEXT:    movl %esi, %eax1000; AVX512-NEXT:    vpbroadcastq %rax, %xmm11001; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k11002; AVX512-NEXT:    vpbroadcastq %rdi, %xmm0 {%k1}1003; AVX512-NEXT:    retq1004;1005; X86AVX2-LABEL: arg_i64_v2i64:1006; X86AVX2:       # %bb.0:1007; X86AVX2-NEXT:    pushl %ebp1008; X86AVX2-NEXT:    movl %esp, %ebp1009; X86AVX2-NEXT:    pushl %esi1010; X86AVX2-NEXT:    andl $-16, %esp1011; X86AVX2-NEXT:    subl $48, %esp1012; X86AVX2-NEXT:    movl 8(%ebp), %edx1013; X86AVX2-NEXT:    movl 12(%ebp), %eax1014; X86AVX2-NEXT:    movl 16(%ebp), %ecx1015; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)1016; X86AVX2-NEXT:    addl %ecx, %ecx1017; X86AVX2-NEXT:    movl %ecx, %esi1018; X86AVX2-NEXT:    andl $3, %esi1019; X86AVX2-NEXT:    movl %edx, (%esp,%esi,4)1020; X86AVX2-NEXT:    vmovaps (%esp), %xmm01021; X86AVX2-NEXT:    vmovaps %xmm0, {{[0-9]+}}(%esp)1022; X86AVX2-NEXT:    incl %ecx1023; X86AVX2-NEXT:    andl $3, %ecx1024; X86AVX2-NEXT:    movl %eax, 16(%esp,%ecx,4)1025; X86AVX2-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm01026; X86AVX2-NEXT:    leal -4(%ebp), %esp1027; X86AVX2-NEXT:    popl %esi1028; X86AVX2-NEXT:    popl %ebp1029; X86AVX2-NEXT:    retl1030  %ins = insertelement <2 x i64> %v, i64 %x, i32 %y1031  ret <2 x i64> %ins1032}1033 1034define <4 x float> @arg_f32_v4f32(<4 x float> %v, float %x, i32 %y) nounwind {1035; SSE2-LABEL: arg_f32_v4f32:1036; SSE2:       # %bb.0:1037; SSE2-NEXT:    # kill: def $edi killed $edi def $rdi1038; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1039; SSE2-NEXT:    andl $3, %edi1040; SSE2-NEXT:    movss %xmm1, -24(%rsp,%rdi,4)1041; SSE2-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01042; SSE2-NEXT:    retq1043;1044; SSE41-LABEL: arg_f32_v4f32:1045; SSE41:       # %bb.0:1046; SSE41-NEXT:    movaps %xmm0, %xmm21047; SSE41-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0,0,0]1048; SSE41-NEXT:    movd %edi, %xmm01049; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]1050; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01051; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm21052; SSE41-NEXT:    movaps %xmm2, %xmm01053; SSE41-NEXT:    retq1054;1055; AVX1-LABEL: arg_f32_v4f32:1056; AVX1:       # %bb.0:1057; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,0,0,0]1058; AVX1-NEXT:    vmovd %edi, %xmm21059; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,0,0,0]1060; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21061; AVX1-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm01062; AVX1-NEXT:    retq1063;1064; AVX2-LABEL: arg_f32_v4f32:1065; AVX2:       # %bb.0:1066; AVX2-NEXT:    vbroadcastss %xmm1, %xmm11067; AVX2-NEXT:    vmovd %edi, %xmm21068; AVX2-NEXT:    vpbroadcastd %xmm2, %xmm21069; AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21070; AVX2-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm01071; AVX2-NEXT:    retq1072;1073; AVX512-LABEL: arg_f32_v4f32:1074; AVX512:       # %bb.0:1075; AVX512-NEXT:    vpbroadcastd %edi, %xmm21076; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %k11077; AVX512-NEXT:    vbroadcastss %xmm1, %xmm0 {%k1}1078; AVX512-NEXT:    retq1079;1080; X86AVX2-LABEL: arg_f32_v4f32:1081; X86AVX2:       # %bb.0:1082; X86AVX2-NEXT:    vpbroadcastd {{[0-9]+}}(%esp), %xmm11083; X86AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm11084; X86AVX2-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %xmm21085; X86AVX2-NEXT:    vblendvps %xmm1, %xmm2, %xmm0, %xmm01086; X86AVX2-NEXT:    retl1087  %ins = insertelement <4 x float> %v, float %x, i32 %y1088  ret <4 x float> %ins1089}1090 1091define <2 x double> @arg_f64_v2f64(<2 x double> %v, double %x, i32 %y) nounwind {1092; SSE2-LABEL: arg_f64_v2f64:1093; SSE2:       # %bb.0:1094; SSE2-NEXT:    # kill: def $edi killed $edi def $rdi1095; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1096; SSE2-NEXT:    andl $1, %edi1097; SSE2-NEXT:    movsd %xmm1, -24(%rsp,%rdi,8)1098; SSE2-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01099; SSE2-NEXT:    retq1100;1101; SSE41-LABEL: arg_f64_v2f64:1102; SSE41:       # %bb.0:1103; SSE41-NEXT:    movapd %xmm0, %xmm21104; SSE41-NEXT:    movddup {{.*#+}} xmm1 = xmm1[0,0]1105; SSE41-NEXT:    movd %edi, %xmm01106; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]1107; SSE41-NEXT:    pcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01108; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm21109; SSE41-NEXT:    movapd %xmm2, %xmm01110; SSE41-NEXT:    retq1111;1112; AVX1-LABEL: arg_f64_v2f64:1113; AVX1:       # %bb.0:1114; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]1115; AVX1-NEXT:    vmovd %edi, %xmm21116; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,1]1117; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21118; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm01119; AVX1-NEXT:    retq1120;1121; AVX2-LABEL: arg_f64_v2f64:1122; AVX2:       # %bb.0:1123; AVX2-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]1124; AVX2-NEXT:    movl %edi, %eax1125; AVX2-NEXT:    vmovq %rax, %xmm21126; AVX2-NEXT:    vpbroadcastq %xmm2, %xmm21127; AVX2-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21128; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm01129; AVX2-NEXT:    retq1130;1131; AVX512-LABEL: arg_f64_v2f64:1132; AVX512:       # %bb.0:1133; AVX512-NEXT:    movl %edi, %eax1134; AVX512-NEXT:    vpbroadcastq %rax, %xmm21135; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %k11136; AVX512-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} = xmm1[0,0]1137; AVX512-NEXT:    retq1138;1139; X86AVX2-LABEL: arg_f64_v2f64:1140; X86AVX2:       # %bb.0:1141; X86AVX2-NEXT:    pushl %ebp1142; X86AVX2-NEXT:    movl %esp, %ebp1143; X86AVX2-NEXT:    andl $-16, %esp1144; X86AVX2-NEXT:    subl $32, %esp1145; X86AVX2-NEXT:    movl 16(%ebp), %eax1146; X86AVX2-NEXT:    andl $1, %eax1147; X86AVX2-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero1148; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)1149; X86AVX2-NEXT:    vmovsd %xmm1, (%esp,%eax,8)1150; X86AVX2-NEXT:    vmovaps (%esp), %xmm01151; X86AVX2-NEXT:    movl %ebp, %esp1152; X86AVX2-NEXT:    popl %ebp1153; X86AVX2-NEXT:    retl1154  %ins = insertelement <2 x double> %v, double %x, i32 %y1155  ret <2 x double> %ins1156}1157 1158define <16 x i8> @load_i8_v16i8(<16 x i8> %v, ptr %p, i32 %y) nounwind {1159; SSE-LABEL: load_i8_v16i8:1160; SSE:       # %bb.0:1161; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1162; SSE-NEXT:    movzbl (%rdi), %eax1163; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1164; SSE-NEXT:    andl $15, %esi1165; SSE-NEXT:    movb %al, -24(%rsp,%rsi)1166; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01167; SSE-NEXT:    retq1168;1169; AVX1OR2-LABEL: load_i8_v16i8:1170; AVX1OR2:       # %bb.0:1171; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1172; AVX1OR2-NEXT:    movzbl (%rdi), %eax1173; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)1174; AVX1OR2-NEXT:    andl $15, %esi1175; AVX1OR2-NEXT:    movb %al, -24(%rsp,%rsi)1176; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm01177; AVX1OR2-NEXT:    retq1178;1179; AVX512F-LABEL: load_i8_v16i8:1180; AVX512F:       # %bb.0:1181; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi1182; AVX512F-NEXT:    movzbl (%rdi), %eax1183; AVX512F-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)1184; AVX512F-NEXT:    andl $15, %esi1185; AVX512F-NEXT:    movb %al, -24(%rsp,%rsi)1186; AVX512F-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm01187; AVX512F-NEXT:    retq1188;1189; AVX512BW-LABEL: load_i8_v16i8:1190; AVX512BW:       # %bb.0:1191; AVX512BW-NEXT:    vpbroadcastb %esi, %xmm11192; AVX512BW-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k11193; AVX512BW-NEXT:    vpbroadcastb (%rdi), %xmm0 {%k1}1194; AVX512BW-NEXT:    retq1195;1196; X86AVX2-LABEL: load_i8_v16i8:1197; X86AVX2:       # %bb.0:1198; X86AVX2-NEXT:    pushl %ebp1199; X86AVX2-NEXT:    movl %esp, %ebp1200; X86AVX2-NEXT:    andl $-16, %esp1201; X86AVX2-NEXT:    subl $32, %esp1202; X86AVX2-NEXT:    movl 12(%ebp), %eax1203; X86AVX2-NEXT:    andl $15, %eax1204; X86AVX2-NEXT:    movl 8(%ebp), %ecx1205; X86AVX2-NEXT:    movzbl (%ecx), %ecx1206; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)1207; X86AVX2-NEXT:    movb %cl, (%esp,%eax)1208; X86AVX2-NEXT:    vmovaps (%esp), %xmm01209; X86AVX2-NEXT:    movl %ebp, %esp1210; X86AVX2-NEXT:    popl %ebp1211; X86AVX2-NEXT:    retl1212  %x = load i8, ptr %p1213  %ins = insertelement <16 x i8> %v, i8 %x, i32 %y1214  ret <16 x i8> %ins1215}1216 1217define <8 x i16> @load_i16_v8i16(<8 x i16> %v, ptr %p, i32 %y) nounwind {1218; SSE-LABEL: load_i16_v8i16:1219; SSE:       # %bb.0:1220; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1221; SSE-NEXT:    movzwl (%rdi), %eax1222; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1223; SSE-NEXT:    andl $7, %esi1224; SSE-NEXT:    movw %ax, -24(%rsp,%rsi,2)1225; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01226; SSE-NEXT:    retq1227;1228; AVX1OR2-LABEL: load_i16_v8i16:1229; AVX1OR2:       # %bb.0:1230; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1231; AVX1OR2-NEXT:    movzwl (%rdi), %eax1232; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)1233; AVX1OR2-NEXT:    andl $7, %esi1234; AVX1OR2-NEXT:    movw %ax, -24(%rsp,%rsi,2)1235; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm01236; AVX1OR2-NEXT:    retq1237;1238; AVX512F-LABEL: load_i16_v8i16:1239; AVX512F:       # %bb.0:1240; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi1241; AVX512F-NEXT:    movzwl (%rdi), %eax1242; AVX512F-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)1243; AVX512F-NEXT:    andl $7, %esi1244; AVX512F-NEXT:    movw %ax, -24(%rsp,%rsi,2)1245; AVX512F-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm01246; AVX512F-NEXT:    retq1247;1248; AVX512BW-LABEL: load_i16_v8i16:1249; AVX512BW:       # %bb.0:1250; AVX512BW-NEXT:    vpbroadcastw %esi, %xmm11251; AVX512BW-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k11252; AVX512BW-NEXT:    vpbroadcastw (%rdi), %xmm0 {%k1}1253; AVX512BW-NEXT:    retq1254;1255; X86AVX2-LABEL: load_i16_v8i16:1256; X86AVX2:       # %bb.0:1257; X86AVX2-NEXT:    pushl %ebp1258; X86AVX2-NEXT:    movl %esp, %ebp1259; X86AVX2-NEXT:    andl $-16, %esp1260; X86AVX2-NEXT:    subl $32, %esp1261; X86AVX2-NEXT:    movl 12(%ebp), %eax1262; X86AVX2-NEXT:    andl $7, %eax1263; X86AVX2-NEXT:    movl 8(%ebp), %ecx1264; X86AVX2-NEXT:    movzwl (%ecx), %ecx1265; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)1266; X86AVX2-NEXT:    movw %cx, (%esp,%eax,2)1267; X86AVX2-NEXT:    vmovaps (%esp), %xmm01268; X86AVX2-NEXT:    movl %ebp, %esp1269; X86AVX2-NEXT:    popl %ebp1270; X86AVX2-NEXT:    retl1271  %x = load i16, ptr %p1272  %ins = insertelement <8 x i16> %v, i16 %x, i32 %y1273  ret <8 x i16> %ins1274}1275 1276define <4 x i32> @load_i32_v4i32(<4 x i32> %v, ptr %p, i32 %y) nounwind {1277; SSE-LABEL: load_i32_v4i32:1278; SSE:       # %bb.0:1279; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1280; SSE-NEXT:    movl (%rdi), %eax1281; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1282; SSE-NEXT:    andl $3, %esi1283; SSE-NEXT:    movl %eax, -24(%rsp,%rsi,4)1284; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01285; SSE-NEXT:    retq1286;1287; AVX1OR2-LABEL: load_i32_v4i32:1288; AVX1OR2:       # %bb.0:1289; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1290; AVX1OR2-NEXT:    movl (%rdi), %eax1291; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)1292; AVX1OR2-NEXT:    andl $3, %esi1293; AVX1OR2-NEXT:    movl %eax, -24(%rsp,%rsi,4)1294; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm01295; AVX1OR2-NEXT:    retq1296;1297; AVX512-LABEL: load_i32_v4i32:1298; AVX512:       # %bb.0:1299; AVX512-NEXT:    vpbroadcastd %esi, %xmm11300; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k11301; AVX512-NEXT:    vpbroadcastd (%rdi), %xmm0 {%k1}1302; AVX512-NEXT:    retq1303;1304; X86AVX2-LABEL: load_i32_v4i32:1305; X86AVX2:       # %bb.0:1306; X86AVX2-NEXT:    pushl %ebp1307; X86AVX2-NEXT:    movl %esp, %ebp1308; X86AVX2-NEXT:    andl $-16, %esp1309; X86AVX2-NEXT:    subl $32, %esp1310; X86AVX2-NEXT:    movl 12(%ebp), %eax1311; X86AVX2-NEXT:    andl $3, %eax1312; X86AVX2-NEXT:    movl 8(%ebp), %ecx1313; X86AVX2-NEXT:    movl (%ecx), %ecx1314; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)1315; X86AVX2-NEXT:    movl %ecx, (%esp,%eax,4)1316; X86AVX2-NEXT:    vmovaps (%esp), %xmm01317; X86AVX2-NEXT:    movl %ebp, %esp1318; X86AVX2-NEXT:    popl %ebp1319; X86AVX2-NEXT:    retl1320  %x = load i32, ptr %p1321  %ins = insertelement <4 x i32> %v, i32 %x, i32 %y1322  ret <4 x i32> %ins1323}1324 1325define <2 x i64> @load_i64_v2i64(<2 x i64> %v, ptr %p, i32 %y) nounwind {1326; SSE-LABEL: load_i64_v2i64:1327; SSE:       # %bb.0:1328; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1329; SSE-NEXT:    movq (%rdi), %rax1330; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1331; SSE-NEXT:    andl $1, %esi1332; SSE-NEXT:    movq %rax, -24(%rsp,%rsi,8)1333; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01334; SSE-NEXT:    retq1335;1336; AVX1OR2-LABEL: load_i64_v2i64:1337; AVX1OR2:       # %bb.0:1338; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1339; AVX1OR2-NEXT:    movq (%rdi), %rax1340; AVX1OR2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)1341; AVX1OR2-NEXT:    andl $1, %esi1342; AVX1OR2-NEXT:    movq %rax, -24(%rsp,%rsi,8)1343; AVX1OR2-NEXT:    vmovaps -{{[0-9]+}}(%rsp), %xmm01344; AVX1OR2-NEXT:    retq1345;1346; AVX512-LABEL: load_i64_v2i64:1347; AVX512:       # %bb.0:1348; AVX512-NEXT:    movl %esi, %eax1349; AVX512-NEXT:    vpbroadcastq %rax, %xmm11350; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k11351; AVX512-NEXT:    vpbroadcastq (%rdi), %xmm0 {%k1}1352; AVX512-NEXT:    retq1353;1354; X86AVX2-LABEL: load_i64_v2i64:1355; X86AVX2:       # %bb.0:1356; X86AVX2-NEXT:    pushl %ebp1357; X86AVX2-NEXT:    movl %esp, %ebp1358; X86AVX2-NEXT:    pushl %esi1359; X86AVX2-NEXT:    andl $-16, %esp1360; X86AVX2-NEXT:    subl $48, %esp1361; X86AVX2-NEXT:    movl 12(%ebp), %eax1362; X86AVX2-NEXT:    movl 8(%ebp), %ecx1363; X86AVX2-NEXT:    movl (%ecx), %edx1364; X86AVX2-NEXT:    movl 4(%ecx), %ecx1365; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)1366; X86AVX2-NEXT:    addl %eax, %eax1367; X86AVX2-NEXT:    movl %eax, %esi1368; X86AVX2-NEXT:    andl $3, %esi1369; X86AVX2-NEXT:    movl %edx, (%esp,%esi,4)1370; X86AVX2-NEXT:    vmovaps (%esp), %xmm01371; X86AVX2-NEXT:    vmovaps %xmm0, {{[0-9]+}}(%esp)1372; X86AVX2-NEXT:    incl %eax1373; X86AVX2-NEXT:    andl $3, %eax1374; X86AVX2-NEXT:    movl %ecx, 16(%esp,%eax,4)1375; X86AVX2-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm01376; X86AVX2-NEXT:    leal -4(%ebp), %esp1377; X86AVX2-NEXT:    popl %esi1378; X86AVX2-NEXT:    popl %ebp1379; X86AVX2-NEXT:    retl1380  %x = load i64, ptr %p1381  %ins = insertelement <2 x i64> %v, i64 %x, i32 %y1382  ret <2 x i64> %ins1383}1384 1385define <4 x float> @load_f32_v4f32(<4 x float> %v, ptr %p, i32 %y) nounwind {1386; SSE2-LABEL: load_f32_v4f32:1387; SSE2:       # %bb.0:1388; SSE2-NEXT:    # kill: def $esi killed $esi def $rsi1389; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero1390; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1391; SSE2-NEXT:    andl $3, %esi1392; SSE2-NEXT:    movss %xmm1, -24(%rsp,%rsi,4)1393; SSE2-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01394; SSE2-NEXT:    retq1395;1396; SSE41-LABEL: load_f32_v4f32:1397; SSE41:       # %bb.0:1398; SSE41-NEXT:    movaps %xmm0, %xmm11399; SSE41-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1400; SSE41-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0,0,0]1401; SSE41-NEXT:    movd %esi, %xmm01402; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]1403; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01404; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm11405; SSE41-NEXT:    movaps %xmm1, %xmm01406; SSE41-NEXT:    retq1407;1408; AVX1-LABEL: load_f32_v4f32:1409; AVX1:       # %bb.0:1410; AVX1-NEXT:    vbroadcastss (%rdi), %xmm11411; AVX1-NEXT:    vmovd %esi, %xmm21412; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,0,0,0]1413; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21414; AVX1-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm01415; AVX1-NEXT:    retq1416;1417; AVX2-LABEL: load_f32_v4f32:1418; AVX2:       # %bb.0:1419; AVX2-NEXT:    vbroadcastss (%rdi), %xmm11420; AVX2-NEXT:    vmovd %esi, %xmm21421; AVX2-NEXT:    vpbroadcastd %xmm2, %xmm21422; AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21423; AVX2-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm01424; AVX2-NEXT:    retq1425;1426; AVX512-LABEL: load_f32_v4f32:1427; AVX512:       # %bb.0:1428; AVX512-NEXT:    vpbroadcastd %esi, %xmm11429; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k11430; AVX512-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1}1431; AVX512-NEXT:    retq1432;1433; X86AVX2-LABEL: load_f32_v4f32:1434; X86AVX2:       # %bb.0:1435; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax1436; X86AVX2-NEXT:    vpbroadcastd {{[0-9]+}}(%esp), %xmm11437; X86AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm11438; X86AVX2-NEXT:    vbroadcastss (%eax), %xmm21439; X86AVX2-NEXT:    vblendvps %xmm1, %xmm2, %xmm0, %xmm01440; X86AVX2-NEXT:    retl1441  %x = load float, ptr %p1442  %ins = insertelement <4 x float> %v, float %x, i32 %y1443  ret <4 x float> %ins1444}1445 1446define <2 x double> @load_f64_v2f64(<2 x double> %v, ptr %p, i32 %y) nounwind {1447; SSE2-LABEL: load_f64_v2f64:1448; SSE2:       # %bb.0:1449; SSE2-NEXT:    # kill: def $esi killed $esi def $rsi1450; SSE2-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero1451; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1452; SSE2-NEXT:    andl $1, %esi1453; SSE2-NEXT:    movsd %xmm1, -24(%rsp,%rsi,8)1454; SSE2-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01455; SSE2-NEXT:    retq1456;1457; SSE41-LABEL: load_f64_v2f64:1458; SSE41:       # %bb.0:1459; SSE41-NEXT:    movapd %xmm0, %xmm11460; SSE41-NEXT:    movddup {{.*#+}} xmm2 = mem[0,0]1461; SSE41-NEXT:    movd %esi, %xmm01462; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]1463; SSE41-NEXT:    pcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01464; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm11465; SSE41-NEXT:    movapd %xmm1, %xmm01466; SSE41-NEXT:    retq1467;1468; AVX1-LABEL: load_f64_v2f64:1469; AVX1:       # %bb.0:1470; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = mem[0,0]1471; AVX1-NEXT:    vmovd %esi, %xmm21472; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,1]1473; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21474; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm01475; AVX1-NEXT:    retq1476;1477; AVX2-LABEL: load_f64_v2f64:1478; AVX2:       # %bb.0:1479; AVX2-NEXT:    vmovddup {{.*#+}} xmm1 = mem[0,0]1480; AVX2-NEXT:    movl %esi, %eax1481; AVX2-NEXT:    vmovq %rax, %xmm21482; AVX2-NEXT:    vpbroadcastq %xmm2, %xmm21483; AVX2-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21484; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm01485; AVX2-NEXT:    retq1486;1487; AVX512-LABEL: load_f64_v2f64:1488; AVX512:       # %bb.0:1489; AVX512-NEXT:    movl %esi, %eax1490; AVX512-NEXT:    vpbroadcastq %rax, %xmm11491; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k11492; AVX512-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} = mem[0,0]1493; AVX512-NEXT:    retq1494;1495; X86AVX2-LABEL: load_f64_v2f64:1496; X86AVX2:       # %bb.0:1497; X86AVX2-NEXT:    pushl %ebp1498; X86AVX2-NEXT:    movl %esp, %ebp1499; X86AVX2-NEXT:    andl $-16, %esp1500; X86AVX2-NEXT:    subl $32, %esp1501; X86AVX2-NEXT:    movl 12(%ebp), %eax1502; X86AVX2-NEXT:    andl $1, %eax1503; X86AVX2-NEXT:    movl 8(%ebp), %ecx1504; X86AVX2-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero1505; X86AVX2-NEXT:    vmovaps %xmm0, (%esp)1506; X86AVX2-NEXT:    vmovsd %xmm1, (%esp,%eax,8)1507; X86AVX2-NEXT:    vmovaps (%esp), %xmm01508; X86AVX2-NEXT:    movl %ebp, %esp1509; X86AVX2-NEXT:    popl %ebp1510; X86AVX2-NEXT:    retl1511  %x = load double, ptr %p1512  %ins = insertelement <2 x double> %v, double %x, i32 %y1513  ret <2 x double> %ins1514}1515 1516define <32 x i8> @arg_i8_v32i8(<32 x i8> %v, i8 %x, i32 %y) nounwind {1517; SSE-LABEL: arg_i8_v32i8:1518; SSE:       # %bb.0:1519; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1520; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1521; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1522; SSE-NEXT:    andl $31, %esi1523; SSE-NEXT:    movb %dil, -40(%rsp,%rsi)1524; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01525; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11526; SSE-NEXT:    retq1527;1528; AVX1OR2-LABEL: arg_i8_v32i8:1529; AVX1OR2:       # %bb.0:1530; AVX1OR2-NEXT:    pushq %rbp1531; AVX1OR2-NEXT:    movq %rsp, %rbp1532; AVX1OR2-NEXT:    andq $-32, %rsp1533; AVX1OR2-NEXT:    subq $64, %rsp1534; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1535; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)1536; AVX1OR2-NEXT:    andl $31, %esi1537; AVX1OR2-NEXT:    movb %dil, (%rsp,%rsi)1538; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm01539; AVX1OR2-NEXT:    movq %rbp, %rsp1540; AVX1OR2-NEXT:    popq %rbp1541; AVX1OR2-NEXT:    retq1542;1543; AVX512F-LABEL: arg_i8_v32i8:1544; AVX512F:       # %bb.0:1545; AVX512F-NEXT:    pushq %rbp1546; AVX512F-NEXT:    movq %rsp, %rbp1547; AVX512F-NEXT:    andq $-32, %rsp1548; AVX512F-NEXT:    subq $64, %rsp1549; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi1550; AVX512F-NEXT:    vmovaps %ymm0, (%rsp)1551; AVX512F-NEXT:    andl $31, %esi1552; AVX512F-NEXT:    movb %dil, (%rsp,%rsi)1553; AVX512F-NEXT:    vmovaps (%rsp), %ymm01554; AVX512F-NEXT:    movq %rbp, %rsp1555; AVX512F-NEXT:    popq %rbp1556; AVX512F-NEXT:    retq1557;1558; AVX512BW-LABEL: arg_i8_v32i8:1559; AVX512BW:       # %bb.0:1560; AVX512BW-NEXT:    vpbroadcastb %esi, %ymm11561; AVX512BW-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k11562; AVX512BW-NEXT:    vpbroadcastb %edi, %ymm0 {%k1}1563; AVX512BW-NEXT:    retq1564;1565; X86AVX2-LABEL: arg_i8_v32i8:1566; X86AVX2:       # %bb.0:1567; X86AVX2-NEXT:    pushl %ebp1568; X86AVX2-NEXT:    movl %esp, %ebp1569; X86AVX2-NEXT:    andl $-32, %esp1570; X86AVX2-NEXT:    subl $64, %esp1571; X86AVX2-NEXT:    movl 12(%ebp), %eax1572; X86AVX2-NEXT:    andl $31, %eax1573; X86AVX2-NEXT:    movzbl 8(%ebp), %ecx1574; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)1575; X86AVX2-NEXT:    movb %cl, (%esp,%eax)1576; X86AVX2-NEXT:    vmovaps (%esp), %ymm01577; X86AVX2-NEXT:    movl %ebp, %esp1578; X86AVX2-NEXT:    popl %ebp1579; X86AVX2-NEXT:    retl1580  %ins = insertelement <32 x i8> %v, i8 %x, i32 %y1581  ret <32 x i8> %ins1582}1583 1584define <16 x i16> @arg_i16_v16i16(<16 x i16> %v, i16 %x, i32 %y) nounwind {1585; SSE-LABEL: arg_i16_v16i16:1586; SSE:       # %bb.0:1587; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1588; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1589; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1590; SSE-NEXT:    andl $15, %esi1591; SSE-NEXT:    movw %di, -40(%rsp,%rsi,2)1592; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01593; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11594; SSE-NEXT:    retq1595;1596; AVX1OR2-LABEL: arg_i16_v16i16:1597; AVX1OR2:       # %bb.0:1598; AVX1OR2-NEXT:    pushq %rbp1599; AVX1OR2-NEXT:    movq %rsp, %rbp1600; AVX1OR2-NEXT:    andq $-32, %rsp1601; AVX1OR2-NEXT:    subq $64, %rsp1602; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1603; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)1604; AVX1OR2-NEXT:    andl $15, %esi1605; AVX1OR2-NEXT:    movw %di, (%rsp,%rsi,2)1606; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm01607; AVX1OR2-NEXT:    movq %rbp, %rsp1608; AVX1OR2-NEXT:    popq %rbp1609; AVX1OR2-NEXT:    retq1610;1611; AVX512F-LABEL: arg_i16_v16i16:1612; AVX512F:       # %bb.0:1613; AVX512F-NEXT:    pushq %rbp1614; AVX512F-NEXT:    movq %rsp, %rbp1615; AVX512F-NEXT:    andq $-32, %rsp1616; AVX512F-NEXT:    subq $64, %rsp1617; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi1618; AVX512F-NEXT:    vmovaps %ymm0, (%rsp)1619; AVX512F-NEXT:    andl $15, %esi1620; AVX512F-NEXT:    movw %di, (%rsp,%rsi,2)1621; AVX512F-NEXT:    vmovaps (%rsp), %ymm01622; AVX512F-NEXT:    movq %rbp, %rsp1623; AVX512F-NEXT:    popq %rbp1624; AVX512F-NEXT:    retq1625;1626; AVX512BW-LABEL: arg_i16_v16i16:1627; AVX512BW:       # %bb.0:1628; AVX512BW-NEXT:    vpbroadcastw %esi, %ymm11629; AVX512BW-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k11630; AVX512BW-NEXT:    vpbroadcastw %edi, %ymm0 {%k1}1631; AVX512BW-NEXT:    retq1632;1633; X86AVX2-LABEL: arg_i16_v16i16:1634; X86AVX2:       # %bb.0:1635; X86AVX2-NEXT:    pushl %ebp1636; X86AVX2-NEXT:    movl %esp, %ebp1637; X86AVX2-NEXT:    andl $-32, %esp1638; X86AVX2-NEXT:    subl $64, %esp1639; X86AVX2-NEXT:    movl 12(%ebp), %eax1640; X86AVX2-NEXT:    andl $15, %eax1641; X86AVX2-NEXT:    movzwl 8(%ebp), %ecx1642; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)1643; X86AVX2-NEXT:    movw %cx, (%esp,%eax,2)1644; X86AVX2-NEXT:    vmovaps (%esp), %ymm01645; X86AVX2-NEXT:    movl %ebp, %esp1646; X86AVX2-NEXT:    popl %ebp1647; X86AVX2-NEXT:    retl1648  %ins = insertelement <16 x i16> %v, i16 %x, i32 %y1649  ret <16 x i16> %ins1650}1651 1652define <8 x i32> @arg_i32_v8i32(<8 x i32> %v, i32 %x, i32 %y) nounwind {1653; SSE-LABEL: arg_i32_v8i32:1654; SSE:       # %bb.0:1655; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1656; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1657; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1658; SSE-NEXT:    andl $7, %esi1659; SSE-NEXT:    movl %edi, -40(%rsp,%rsi,4)1660; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01661; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11662; SSE-NEXT:    retq1663;1664; AVX1OR2-LABEL: arg_i32_v8i32:1665; AVX1OR2:       # %bb.0:1666; AVX1OR2-NEXT:    pushq %rbp1667; AVX1OR2-NEXT:    movq %rsp, %rbp1668; AVX1OR2-NEXT:    andq $-32, %rsp1669; AVX1OR2-NEXT:    subq $64, %rsp1670; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1671; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)1672; AVX1OR2-NEXT:    andl $7, %esi1673; AVX1OR2-NEXT:    movl %edi, (%rsp,%rsi,4)1674; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm01675; AVX1OR2-NEXT:    movq %rbp, %rsp1676; AVX1OR2-NEXT:    popq %rbp1677; AVX1OR2-NEXT:    retq1678;1679; AVX512-LABEL: arg_i32_v8i32:1680; AVX512:       # %bb.0:1681; AVX512-NEXT:    vpbroadcastd %esi, %ymm11682; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k11683; AVX512-NEXT:    vpbroadcastd %edi, %ymm0 {%k1}1684; AVX512-NEXT:    retq1685;1686; X86AVX2-LABEL: arg_i32_v8i32:1687; X86AVX2:       # %bb.0:1688; X86AVX2-NEXT:    pushl %ebp1689; X86AVX2-NEXT:    movl %esp, %ebp1690; X86AVX2-NEXT:    andl $-32, %esp1691; X86AVX2-NEXT:    subl $64, %esp1692; X86AVX2-NEXT:    movl 12(%ebp), %eax1693; X86AVX2-NEXT:    andl $7, %eax1694; X86AVX2-NEXT:    movl 8(%ebp), %ecx1695; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)1696; X86AVX2-NEXT:    movl %ecx, (%esp,%eax,4)1697; X86AVX2-NEXT:    vmovaps (%esp), %ymm01698; X86AVX2-NEXT:    movl %ebp, %esp1699; X86AVX2-NEXT:    popl %ebp1700; X86AVX2-NEXT:    retl1701  %ins = insertelement <8 x i32> %v, i32 %x, i32 %y1702  ret <8 x i32> %ins1703}1704 1705define <4 x i64> @arg_i64_v4i64(<4 x i64> %v, i64 %x, i32 %y) nounwind {1706; SSE-LABEL: arg_i64_v4i64:1707; SSE:       # %bb.0:1708; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1709; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1710; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1711; SSE-NEXT:    andl $3, %esi1712; SSE-NEXT:    movq %rdi, -40(%rsp,%rsi,8)1713; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01714; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11715; SSE-NEXT:    retq1716;1717; AVX1OR2-LABEL: arg_i64_v4i64:1718; AVX1OR2:       # %bb.0:1719; AVX1OR2-NEXT:    pushq %rbp1720; AVX1OR2-NEXT:    movq %rsp, %rbp1721; AVX1OR2-NEXT:    andq $-32, %rsp1722; AVX1OR2-NEXT:    subq $64, %rsp1723; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1724; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)1725; AVX1OR2-NEXT:    andl $3, %esi1726; AVX1OR2-NEXT:    movq %rdi, (%rsp,%rsi,8)1727; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm01728; AVX1OR2-NEXT:    movq %rbp, %rsp1729; AVX1OR2-NEXT:    popq %rbp1730; AVX1OR2-NEXT:    retq1731;1732; AVX512-LABEL: arg_i64_v4i64:1733; AVX512:       # %bb.0:1734; AVX512-NEXT:    movl %esi, %eax1735; AVX512-NEXT:    vpbroadcastq %rax, %ymm11736; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k11737; AVX512-NEXT:    vpbroadcastq %rdi, %ymm0 {%k1}1738; AVX512-NEXT:    retq1739;1740; X86AVX2-LABEL: arg_i64_v4i64:1741; X86AVX2:       # %bb.0:1742; X86AVX2-NEXT:    pushl %ebp1743; X86AVX2-NEXT:    movl %esp, %ebp1744; X86AVX2-NEXT:    pushl %esi1745; X86AVX2-NEXT:    andl $-32, %esp1746; X86AVX2-NEXT:    subl $96, %esp1747; X86AVX2-NEXT:    movl 8(%ebp), %edx1748; X86AVX2-NEXT:    movl 12(%ebp), %eax1749; X86AVX2-NEXT:    movl 16(%ebp), %ecx1750; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)1751; X86AVX2-NEXT:    addl %ecx, %ecx1752; X86AVX2-NEXT:    movl %ecx, %esi1753; X86AVX2-NEXT:    andl $7, %esi1754; X86AVX2-NEXT:    movl %edx, (%esp,%esi,4)1755; X86AVX2-NEXT:    vmovaps (%esp), %ymm01756; X86AVX2-NEXT:    vmovaps %ymm0, {{[0-9]+}}(%esp)1757; X86AVX2-NEXT:    incl %ecx1758; X86AVX2-NEXT:    andl $7, %ecx1759; X86AVX2-NEXT:    movl %eax, 32(%esp,%ecx,4)1760; X86AVX2-NEXT:    vmovaps {{[0-9]+}}(%esp), %ymm01761; X86AVX2-NEXT:    leal -4(%ebp), %esp1762; X86AVX2-NEXT:    popl %esi1763; X86AVX2-NEXT:    popl %ebp1764; X86AVX2-NEXT:    retl1765  %ins = insertelement <4 x i64> %v, i64 %x, i32 %y1766  ret <4 x i64> %ins1767}1768 1769define <8 x float> @arg_f32_v8f32(<8 x float> %v, float %x, i32 %y) nounwind {1770; SSE-LABEL: arg_f32_v8f32:1771; SSE:       # %bb.0:1772; SSE-NEXT:    # kill: def $edi killed $edi def $rdi1773; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1774; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1775; SSE-NEXT:    andl $7, %edi1776; SSE-NEXT:    movss %xmm2, -40(%rsp,%rdi,4)1777; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01778; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11779; SSE-NEXT:    retq1780;1781; AVX1-LABEL: arg_f32_v8f32:1782; AVX1:       # %bb.0:1783; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,0,0,0]1784; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm1, %ymm11785; AVX1-NEXT:    vmovd %edi, %xmm21786; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,0,0,0]1787; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31788; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm2, %xmm21789; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm21790; AVX1-NEXT:    vblendvps %ymm2, %ymm1, %ymm0, %ymm01791; AVX1-NEXT:    retq1792;1793; AVX2-LABEL: arg_f32_v8f32:1794; AVX2:       # %bb.0:1795; AVX2-NEXT:    vbroadcastss %xmm1, %ymm11796; AVX2-NEXT:    vmovd %edi, %xmm21797; AVX2-NEXT:    vpbroadcastd %xmm2, %ymm21798; AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm21799; AVX2-NEXT:    vblendvps %ymm2, %ymm1, %ymm0, %ymm01800; AVX2-NEXT:    retq1801;1802; AVX512-LABEL: arg_f32_v8f32:1803; AVX512:       # %bb.0:1804; AVX512-NEXT:    vpbroadcastd %edi, %ymm21805; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %k11806; AVX512-NEXT:    vbroadcastss %xmm1, %ymm0 {%k1}1807; AVX512-NEXT:    retq1808;1809; X86AVX2-LABEL: arg_f32_v8f32:1810; X86AVX2:       # %bb.0:1811; X86AVX2-NEXT:    vpbroadcastd {{[0-9]+}}(%esp), %ymm11812; X86AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %ymm1, %ymm11813; X86AVX2-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %ymm21814; X86AVX2-NEXT:    vblendvps %ymm1, %ymm2, %ymm0, %ymm01815; X86AVX2-NEXT:    retl1816  %ins = insertelement <8 x float> %v, float %x, i32 %y1817  ret <8 x float> %ins1818}1819 1820define <4 x double> @arg_f64_v4f64(<4 x double> %v, double %x, i32 %y) nounwind {1821; SSE-LABEL: arg_f64_v4f64:1822; SSE:       # %bb.0:1823; SSE-NEXT:    # kill: def $edi killed $edi def $rdi1824; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1825; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1826; SSE-NEXT:    andl $3, %edi1827; SSE-NEXT:    movsd %xmm2, -40(%rsp,%rdi,8)1828; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01829; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11830; SSE-NEXT:    retq1831;1832; AVX1-LABEL: arg_f64_v4f64:1833; AVX1:       # %bb.0:1834; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]1835; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm1, %ymm11836; AVX1-NEXT:    movl %edi, %eax1837; AVX1-NEXT:    vmovq %rax, %xmm21838; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,1]1839; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31840; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm2, %xmm21841; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm21842; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm01843; AVX1-NEXT:    retq1844;1845; AVX2-LABEL: arg_f64_v4f64:1846; AVX2:       # %bb.0:1847; AVX2-NEXT:    vbroadcastsd %xmm1, %ymm11848; AVX2-NEXT:    movl %edi, %eax1849; AVX2-NEXT:    vmovq %rax, %xmm21850; AVX2-NEXT:    vpbroadcastq %xmm2, %ymm21851; AVX2-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm21852; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm01853; AVX2-NEXT:    retq1854;1855; AVX512-LABEL: arg_f64_v4f64:1856; AVX512:       # %bb.0:1857; AVX512-NEXT:    movl %edi, %eax1858; AVX512-NEXT:    vpbroadcastq %rax, %ymm21859; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %k11860; AVX512-NEXT:    vbroadcastsd %xmm1, %ymm0 {%k1}1861; AVX512-NEXT:    retq1862;1863; X86AVX2-LABEL: arg_f64_v4f64:1864; X86AVX2:       # %bb.0:1865; X86AVX2-NEXT:    pushl %ebp1866; X86AVX2-NEXT:    movl %esp, %ebp1867; X86AVX2-NEXT:    andl $-32, %esp1868; X86AVX2-NEXT:    subl $64, %esp1869; X86AVX2-NEXT:    movl 16(%ebp), %eax1870; X86AVX2-NEXT:    andl $3, %eax1871; X86AVX2-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero1872; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)1873; X86AVX2-NEXT:    vmovsd %xmm1, (%esp,%eax,8)1874; X86AVX2-NEXT:    vmovaps (%esp), %ymm01875; X86AVX2-NEXT:    movl %ebp, %esp1876; X86AVX2-NEXT:    popl %ebp1877; X86AVX2-NEXT:    retl1878  %ins = insertelement <4 x double> %v, double %x, i32 %y1879  ret <4 x double> %ins1880}1881 1882define <32 x i8> @load_i8_v32i8(<32 x i8> %v, ptr %p, i32 %y) nounwind {1883; SSE-LABEL: load_i8_v32i8:1884; SSE:       # %bb.0:1885; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1886; SSE-NEXT:    movzbl (%rdi), %eax1887; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1888; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1889; SSE-NEXT:    andl $31, %esi1890; SSE-NEXT:    movb %al, -40(%rsp,%rsi)1891; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01892; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11893; SSE-NEXT:    retq1894;1895; AVX1OR2-LABEL: load_i8_v32i8:1896; AVX1OR2:       # %bb.0:1897; AVX1OR2-NEXT:    pushq %rbp1898; AVX1OR2-NEXT:    movq %rsp, %rbp1899; AVX1OR2-NEXT:    andq $-32, %rsp1900; AVX1OR2-NEXT:    subq $64, %rsp1901; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1902; AVX1OR2-NEXT:    movzbl (%rdi), %eax1903; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)1904; AVX1OR2-NEXT:    andl $31, %esi1905; AVX1OR2-NEXT:    movb %al, (%rsp,%rsi)1906; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm01907; AVX1OR2-NEXT:    movq %rbp, %rsp1908; AVX1OR2-NEXT:    popq %rbp1909; AVX1OR2-NEXT:    retq1910;1911; AVX512F-LABEL: load_i8_v32i8:1912; AVX512F:       # %bb.0:1913; AVX512F-NEXT:    pushq %rbp1914; AVX512F-NEXT:    movq %rsp, %rbp1915; AVX512F-NEXT:    andq $-32, %rsp1916; AVX512F-NEXT:    subq $64, %rsp1917; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi1918; AVX512F-NEXT:    movzbl (%rdi), %eax1919; AVX512F-NEXT:    vmovaps %ymm0, (%rsp)1920; AVX512F-NEXT:    andl $31, %esi1921; AVX512F-NEXT:    movb %al, (%rsp,%rsi)1922; AVX512F-NEXT:    vmovaps (%rsp), %ymm01923; AVX512F-NEXT:    movq %rbp, %rsp1924; AVX512F-NEXT:    popq %rbp1925; AVX512F-NEXT:    retq1926;1927; AVX512BW-LABEL: load_i8_v32i8:1928; AVX512BW:       # %bb.0:1929; AVX512BW-NEXT:    vpbroadcastb %esi, %ymm11930; AVX512BW-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k11931; AVX512BW-NEXT:    vpbroadcastb (%rdi), %ymm0 {%k1}1932; AVX512BW-NEXT:    retq1933;1934; X86AVX2-LABEL: load_i8_v32i8:1935; X86AVX2:       # %bb.0:1936; X86AVX2-NEXT:    pushl %ebp1937; X86AVX2-NEXT:    movl %esp, %ebp1938; X86AVX2-NEXT:    andl $-32, %esp1939; X86AVX2-NEXT:    subl $64, %esp1940; X86AVX2-NEXT:    movl 12(%ebp), %eax1941; X86AVX2-NEXT:    andl $31, %eax1942; X86AVX2-NEXT:    movl 8(%ebp), %ecx1943; X86AVX2-NEXT:    movzbl (%ecx), %ecx1944; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)1945; X86AVX2-NEXT:    movb %cl, (%esp,%eax)1946; X86AVX2-NEXT:    vmovaps (%esp), %ymm01947; X86AVX2-NEXT:    movl %ebp, %esp1948; X86AVX2-NEXT:    popl %ebp1949; X86AVX2-NEXT:    retl1950  %x = load i8, ptr %p1951  %ins = insertelement <32 x i8> %v, i8 %x, i32 %y1952  ret <32 x i8> %ins1953}1954 1955define <16 x i16> @load_i16_v16i16(<16 x i16> %v, ptr %p, i32 %y) nounwind {1956; SSE-LABEL: load_i16_v16i16:1957; SSE:       # %bb.0:1958; SSE-NEXT:    # kill: def $esi killed $esi def $rsi1959; SSE-NEXT:    movzwl (%rdi), %eax1960; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1961; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1962; SSE-NEXT:    andl $15, %esi1963; SSE-NEXT:    movw %ax, -40(%rsp,%rsi,2)1964; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm01965; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm11966; SSE-NEXT:    retq1967;1968; AVX1OR2-LABEL: load_i16_v16i16:1969; AVX1OR2:       # %bb.0:1970; AVX1OR2-NEXT:    pushq %rbp1971; AVX1OR2-NEXT:    movq %rsp, %rbp1972; AVX1OR2-NEXT:    andq $-32, %rsp1973; AVX1OR2-NEXT:    subq $64, %rsp1974; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi1975; AVX1OR2-NEXT:    movzwl (%rdi), %eax1976; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)1977; AVX1OR2-NEXT:    andl $15, %esi1978; AVX1OR2-NEXT:    movw %ax, (%rsp,%rsi,2)1979; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm01980; AVX1OR2-NEXT:    movq %rbp, %rsp1981; AVX1OR2-NEXT:    popq %rbp1982; AVX1OR2-NEXT:    retq1983;1984; AVX512F-LABEL: load_i16_v16i16:1985; AVX512F:       # %bb.0:1986; AVX512F-NEXT:    pushq %rbp1987; AVX512F-NEXT:    movq %rsp, %rbp1988; AVX512F-NEXT:    andq $-32, %rsp1989; AVX512F-NEXT:    subq $64, %rsp1990; AVX512F-NEXT:    # kill: def $esi killed $esi def $rsi1991; AVX512F-NEXT:    movzwl (%rdi), %eax1992; AVX512F-NEXT:    vmovaps %ymm0, (%rsp)1993; AVX512F-NEXT:    andl $15, %esi1994; AVX512F-NEXT:    movw %ax, (%rsp,%rsi,2)1995; AVX512F-NEXT:    vmovaps (%rsp), %ymm01996; AVX512F-NEXT:    movq %rbp, %rsp1997; AVX512F-NEXT:    popq %rbp1998; AVX512F-NEXT:    retq1999;2000; AVX512BW-LABEL: load_i16_v16i16:2001; AVX512BW:       # %bb.0:2002; AVX512BW-NEXT:    vpbroadcastw %esi, %ymm12003; AVX512BW-NEXT:    vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k12004; AVX512BW-NEXT:    vpbroadcastw (%rdi), %ymm0 {%k1}2005; AVX512BW-NEXT:    retq2006;2007; X86AVX2-LABEL: load_i16_v16i16:2008; X86AVX2:       # %bb.0:2009; X86AVX2-NEXT:    pushl %ebp2010; X86AVX2-NEXT:    movl %esp, %ebp2011; X86AVX2-NEXT:    andl $-32, %esp2012; X86AVX2-NEXT:    subl $64, %esp2013; X86AVX2-NEXT:    movl 12(%ebp), %eax2014; X86AVX2-NEXT:    andl $15, %eax2015; X86AVX2-NEXT:    movl 8(%ebp), %ecx2016; X86AVX2-NEXT:    movzwl (%ecx), %ecx2017; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)2018; X86AVX2-NEXT:    movw %cx, (%esp,%eax,2)2019; X86AVX2-NEXT:    vmovaps (%esp), %ymm02020; X86AVX2-NEXT:    movl %ebp, %esp2021; X86AVX2-NEXT:    popl %ebp2022; X86AVX2-NEXT:    retl2023  %x = load i16, ptr %p2024  %ins = insertelement <16 x i16> %v, i16 %x, i32 %y2025  ret <16 x i16> %ins2026}2027 2028define <8 x i32> @load_i32_v8i32(<8 x i32> %v, ptr %p, i32 %y) nounwind {2029; SSE-LABEL: load_i32_v8i32:2030; SSE:       # %bb.0:2031; SSE-NEXT:    # kill: def $esi killed $esi def $rsi2032; SSE-NEXT:    movl (%rdi), %eax2033; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)2034; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)2035; SSE-NEXT:    andl $7, %esi2036; SSE-NEXT:    movl %eax, -40(%rsp,%rsi,4)2037; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm02038; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm12039; SSE-NEXT:    retq2040;2041; AVX1OR2-LABEL: load_i32_v8i32:2042; AVX1OR2:       # %bb.0:2043; AVX1OR2-NEXT:    pushq %rbp2044; AVX1OR2-NEXT:    movq %rsp, %rbp2045; AVX1OR2-NEXT:    andq $-32, %rsp2046; AVX1OR2-NEXT:    subq $64, %rsp2047; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi2048; AVX1OR2-NEXT:    movl (%rdi), %eax2049; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)2050; AVX1OR2-NEXT:    andl $7, %esi2051; AVX1OR2-NEXT:    movl %eax, (%rsp,%rsi,4)2052; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm02053; AVX1OR2-NEXT:    movq %rbp, %rsp2054; AVX1OR2-NEXT:    popq %rbp2055; AVX1OR2-NEXT:    retq2056;2057; AVX512-LABEL: load_i32_v8i32:2058; AVX512:       # %bb.0:2059; AVX512-NEXT:    vpbroadcastd %esi, %ymm12060; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k12061; AVX512-NEXT:    vpbroadcastd (%rdi), %ymm0 {%k1}2062; AVX512-NEXT:    retq2063;2064; X86AVX2-LABEL: load_i32_v8i32:2065; X86AVX2:       # %bb.0:2066; X86AVX2-NEXT:    pushl %ebp2067; X86AVX2-NEXT:    movl %esp, %ebp2068; X86AVX2-NEXT:    andl $-32, %esp2069; X86AVX2-NEXT:    subl $64, %esp2070; X86AVX2-NEXT:    movl 12(%ebp), %eax2071; X86AVX2-NEXT:    andl $7, %eax2072; X86AVX2-NEXT:    movl 8(%ebp), %ecx2073; X86AVX2-NEXT:    movl (%ecx), %ecx2074; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)2075; X86AVX2-NEXT:    movl %ecx, (%esp,%eax,4)2076; X86AVX2-NEXT:    vmovaps (%esp), %ymm02077; X86AVX2-NEXT:    movl %ebp, %esp2078; X86AVX2-NEXT:    popl %ebp2079; X86AVX2-NEXT:    retl2080  %x = load i32, ptr %p2081  %ins = insertelement <8 x i32> %v, i32 %x, i32 %y2082  ret <8 x i32> %ins2083}2084 2085define <4 x i64> @load_i64_v4i64(<4 x i64> %v, ptr %p, i32 %y) nounwind {2086; SSE-LABEL: load_i64_v4i64:2087; SSE:       # %bb.0:2088; SSE-NEXT:    # kill: def $esi killed $esi def $rsi2089; SSE-NEXT:    movq (%rdi), %rax2090; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)2091; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)2092; SSE-NEXT:    andl $3, %esi2093; SSE-NEXT:    movq %rax, -40(%rsp,%rsi,8)2094; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm02095; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm12096; SSE-NEXT:    retq2097;2098; AVX1OR2-LABEL: load_i64_v4i64:2099; AVX1OR2:       # %bb.0:2100; AVX1OR2-NEXT:    pushq %rbp2101; AVX1OR2-NEXT:    movq %rsp, %rbp2102; AVX1OR2-NEXT:    andq $-32, %rsp2103; AVX1OR2-NEXT:    subq $64, %rsp2104; AVX1OR2-NEXT:    # kill: def $esi killed $esi def $rsi2105; AVX1OR2-NEXT:    movq (%rdi), %rax2106; AVX1OR2-NEXT:    vmovaps %ymm0, (%rsp)2107; AVX1OR2-NEXT:    andl $3, %esi2108; AVX1OR2-NEXT:    movq %rax, (%rsp,%rsi,8)2109; AVX1OR2-NEXT:    vmovaps (%rsp), %ymm02110; AVX1OR2-NEXT:    movq %rbp, %rsp2111; AVX1OR2-NEXT:    popq %rbp2112; AVX1OR2-NEXT:    retq2113;2114; AVX512-LABEL: load_i64_v4i64:2115; AVX512:       # %bb.0:2116; AVX512-NEXT:    movl %esi, %eax2117; AVX512-NEXT:    vpbroadcastq %rax, %ymm12118; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k12119; AVX512-NEXT:    vpbroadcastq (%rdi), %ymm0 {%k1}2120; AVX512-NEXT:    retq2121;2122; X86AVX2-LABEL: load_i64_v4i64:2123; X86AVX2:       # %bb.0:2124; X86AVX2-NEXT:    pushl %ebp2125; X86AVX2-NEXT:    movl %esp, %ebp2126; X86AVX2-NEXT:    pushl %esi2127; X86AVX2-NEXT:    andl $-32, %esp2128; X86AVX2-NEXT:    subl $96, %esp2129; X86AVX2-NEXT:    movl 12(%ebp), %eax2130; X86AVX2-NEXT:    movl 8(%ebp), %ecx2131; X86AVX2-NEXT:    movl (%ecx), %edx2132; X86AVX2-NEXT:    movl 4(%ecx), %ecx2133; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)2134; X86AVX2-NEXT:    addl %eax, %eax2135; X86AVX2-NEXT:    movl %eax, %esi2136; X86AVX2-NEXT:    andl $7, %esi2137; X86AVX2-NEXT:    movl %edx, (%esp,%esi,4)2138; X86AVX2-NEXT:    vmovaps (%esp), %ymm02139; X86AVX2-NEXT:    vmovaps %ymm0, {{[0-9]+}}(%esp)2140; X86AVX2-NEXT:    incl %eax2141; X86AVX2-NEXT:    andl $7, %eax2142; X86AVX2-NEXT:    movl %ecx, 32(%esp,%eax,4)2143; X86AVX2-NEXT:    vmovaps {{[0-9]+}}(%esp), %ymm02144; X86AVX2-NEXT:    leal -4(%ebp), %esp2145; X86AVX2-NEXT:    popl %esi2146; X86AVX2-NEXT:    popl %ebp2147; X86AVX2-NEXT:    retl2148  %x = load i64, ptr %p2149  %ins = insertelement <4 x i64> %v, i64 %x, i32 %y2150  ret <4 x i64> %ins2151}2152 2153define <8 x float> @load_f32_v8f32(<8 x float> %v, ptr %p, i32 %y) nounwind {2154; SSE-LABEL: load_f32_v8f32:2155; SSE:       # %bb.0:2156; SSE-NEXT:    # kill: def $esi killed $esi def $rsi2157; SSE-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2158; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)2159; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)2160; SSE-NEXT:    andl $7, %esi2161; SSE-NEXT:    movss %xmm2, -40(%rsp,%rsi,4)2162; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm02163; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm12164; SSE-NEXT:    retq2165;2166; AVX1-LABEL: load_f32_v8f32:2167; AVX1:       # %bb.0:2168; AVX1-NEXT:    vmovd %esi, %xmm12169; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]2170; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm22171; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm12172; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12173; AVX1-NEXT:    vbroadcastss (%rdi), %ymm22174; AVX1-NEXT:    vblendvps %ymm1, %ymm2, %ymm0, %ymm02175; AVX1-NEXT:    retq2176;2177; AVX2-LABEL: load_f32_v8f32:2178; AVX2:       # %bb.0:2179; AVX2-NEXT:    vbroadcastss (%rdi), %ymm12180; AVX2-NEXT:    vmovd %esi, %xmm22181; AVX2-NEXT:    vpbroadcastd %xmm2, %ymm22182; AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm22183; AVX2-NEXT:    vblendvps %ymm2, %ymm1, %ymm0, %ymm02184; AVX2-NEXT:    retq2185;2186; AVX512-LABEL: load_f32_v8f32:2187; AVX512:       # %bb.0:2188; AVX512-NEXT:    vpbroadcastd %esi, %ymm12189; AVX512-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k12190; AVX512-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1}2191; AVX512-NEXT:    retq2192;2193; X86AVX2-LABEL: load_f32_v8f32:2194; X86AVX2:       # %bb.0:2195; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax2196; X86AVX2-NEXT:    vpbroadcastd {{[0-9]+}}(%esp), %ymm12197; X86AVX2-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %ymm1, %ymm12198; X86AVX2-NEXT:    vbroadcastss (%eax), %ymm22199; X86AVX2-NEXT:    vblendvps %ymm1, %ymm2, %ymm0, %ymm02200; X86AVX2-NEXT:    retl2201  %x = load float, ptr %p2202  %ins = insertelement <8 x float> %v, float %x, i32 %y2203  ret <8 x float> %ins2204}2205 2206define <4 x double> @load_f64_v4f64(<4 x double> %v, ptr %p, i32 %y) nounwind {2207; SSE-LABEL: load_f64_v4f64:2208; SSE:       # %bb.0:2209; SSE-NEXT:    # kill: def $esi killed $esi def $rsi2210; SSE-NEXT:    movsd {{.*#+}} xmm2 = mem[0],zero2211; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)2212; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)2213; SSE-NEXT:    andl $3, %esi2214; SSE-NEXT:    movsd %xmm2, -40(%rsp,%rsi,8)2215; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm02216; SSE-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm12217; SSE-NEXT:    retq2218;2219; AVX1-LABEL: load_f64_v4f64:2220; AVX1:       # %bb.0:2221; AVX1-NEXT:    movl %esi, %eax2222; AVX1-NEXT:    vmovq %rax, %xmm12223; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]2224; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm22225; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm12226; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm12227; AVX1-NEXT:    vbroadcastsd (%rdi), %ymm22228; AVX1-NEXT:    vblendvpd %ymm1, %ymm2, %ymm0, %ymm02229; AVX1-NEXT:    retq2230;2231; AVX2-LABEL: load_f64_v4f64:2232; AVX2:       # %bb.0:2233; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm12234; AVX2-NEXT:    movl %esi, %eax2235; AVX2-NEXT:    vmovq %rax, %xmm22236; AVX2-NEXT:    vpbroadcastq %xmm2, %ymm22237; AVX2-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm22238; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm02239; AVX2-NEXT:    retq2240;2241; AVX512-LABEL: load_f64_v4f64:2242; AVX512:       # %bb.0:2243; AVX512-NEXT:    movl %esi, %eax2244; AVX512-NEXT:    vpbroadcastq %rax, %ymm12245; AVX512-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %k12246; AVX512-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1}2247; AVX512-NEXT:    retq2248;2249; X86AVX2-LABEL: load_f64_v4f64:2250; X86AVX2:       # %bb.0:2251; X86AVX2-NEXT:    pushl %ebp2252; X86AVX2-NEXT:    movl %esp, %ebp2253; X86AVX2-NEXT:    andl $-32, %esp2254; X86AVX2-NEXT:    subl $64, %esp2255; X86AVX2-NEXT:    movl 12(%ebp), %eax2256; X86AVX2-NEXT:    andl $3, %eax2257; X86AVX2-NEXT:    movl 8(%ebp), %ecx2258; X86AVX2-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero2259; X86AVX2-NEXT:    vmovaps %ymm0, (%esp)2260; X86AVX2-NEXT:    vmovsd %xmm1, (%esp,%eax,8)2261; X86AVX2-NEXT:    vmovaps (%esp), %ymm02262; X86AVX2-NEXT:    movl %ebp, %esp2263; X86AVX2-NEXT:    popl %ebp2264; X86AVX2-NEXT:    retl2265  %x = load double, ptr %p2266  %ins = insertelement <4 x double> %v, double %x, i32 %y2267  ret <4 x double> %ins2268}2269 2270; Don't die trying to insert to an invalid index.2271 2272define i32 @PR44139(ptr %p) {2273; SSE-LABEL: PR44139:2274; SSE:       # %bb.0:2275; SSE-NEXT:    movl (%rdi), %eax2276; SSE-NEXT:    pshufd {{.*#+}} xmm0 = mem[0,1,0,1]2277; SSE-NEXT:    movdqa %xmm0, 96(%rdi)2278; SSE-NEXT:    movdqa %xmm0, 112(%rdi)2279; SSE-NEXT:    movdqa %xmm0, 64(%rdi)2280; SSE-NEXT:    movdqa %xmm0, 80(%rdi)2281; SSE-NEXT:    movdqa %xmm0, 32(%rdi)2282; SSE-NEXT:    movdqa %xmm0, 48(%rdi)2283; SSE-NEXT:    movdqa %xmm0, (%rdi)2284; SSE-NEXT:    movdqa %xmm0, 16(%rdi)2285; SSE-NEXT:    leal 2147483647(%rax), %ecx2286; SSE-NEXT:    testl %eax, %eax2287; SSE-NEXT:    cmovnsl %eax, %ecx2288; SSE-NEXT:    andl $-2147483648, %ecx # imm = 0x800000002289; SSE-NEXT:    addl %eax, %ecx2290; SSE-NEXT:    # kill: def $eax killed $eax killed $rax2291; SSE-NEXT:    xorl %edx, %edx2292; SSE-NEXT:    divl %ecx2293; SSE-NEXT:    retq2294;2295; AVX1-LABEL: PR44139:2296; AVX1:       # %bb.0:2297; AVX1-NEXT:    movq (%rdi), %rax2298; AVX1-NEXT:    vbroadcastsd (%rdi), %ymm02299; AVX1-NEXT:    vpinsrq $1, %rax, %xmm0, %xmm12300; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]2301; AVX1-NEXT:    vmovaps %ymm0, 64(%rdi)2302; AVX1-NEXT:    vmovaps %ymm0, 96(%rdi)2303; AVX1-NEXT:    vmovaps %ymm0, 32(%rdi)2304; AVX1-NEXT:    vmovaps %ymm1, (%rdi)2305; AVX1-NEXT:    leal 2147483647(%rax), %ecx2306; AVX1-NEXT:    testl %eax, %eax2307; AVX1-NEXT:    cmovnsl %eax, %ecx2308; AVX1-NEXT:    andl $-2147483648, %ecx # imm = 0x800000002309; AVX1-NEXT:    addl %eax, %ecx2310; AVX1-NEXT:    # kill: def $eax killed $eax killed $rax2311; AVX1-NEXT:    xorl %edx, %edx2312; AVX1-NEXT:    divl %ecx2313; AVX1-NEXT:    vzeroupper2314; AVX1-NEXT:    retq2315;2316; AVX2-LABEL: PR44139:2317; AVX2:       # %bb.0:2318; AVX2-NEXT:    movq (%rdi), %rax2319; AVX2-NEXT:    vpbroadcastq (%rdi), %ymm02320; AVX2-NEXT:    vpinsrq $1, %rax, %xmm0, %xmm12321; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]2322; AVX2-NEXT:    vmovdqa %ymm0, 64(%rdi)2323; AVX2-NEXT:    vmovdqa %ymm0, 96(%rdi)2324; AVX2-NEXT:    vmovdqa %ymm0, 32(%rdi)2325; AVX2-NEXT:    vmovdqa %ymm1, (%rdi)2326; AVX2-NEXT:    leal 2147483647(%rax), %ecx2327; AVX2-NEXT:    testl %eax, %eax2328; AVX2-NEXT:    cmovnsl %eax, %ecx2329; AVX2-NEXT:    andl $-2147483648, %ecx # imm = 0x800000002330; AVX2-NEXT:    addl %eax, %ecx2331; AVX2-NEXT:    # kill: def $eax killed $eax killed $rax2332; AVX2-NEXT:    xorl %edx, %edx2333; AVX2-NEXT:    divl %ecx2334; AVX2-NEXT:    vzeroupper2335; AVX2-NEXT:    retq2336;2337; AVX512-LABEL: PR44139:2338; AVX512:       # %bb.0:2339; AVX512-NEXT:    movq (%rdi), %rax2340; AVX512-NEXT:    vpbroadcastq (%rdi), %zmm02341; AVX512-NEXT:    vpinsrq $1, %rax, %xmm0, %xmm12342; AVX512-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm12343; AVX512-NEXT:    vmovdqa64 %zmm0, 64(%rdi)2344; AVX512-NEXT:    vmovdqa64 %zmm1, (%rdi)2345; AVX512-NEXT:    leal 2147483647(%rax), %ecx2346; AVX512-NEXT:    testl %eax, %eax2347; AVX512-NEXT:    cmovnsl %eax, %ecx2348; AVX512-NEXT:    andl $-2147483648, %ecx # imm = 0x800000002349; AVX512-NEXT:    addl %eax, %ecx2350; AVX512-NEXT:    # kill: def $eax killed $eax killed $rax2351; AVX512-NEXT:    xorl %edx, %edx2352; AVX512-NEXT:    divl %ecx2353; AVX512-NEXT:    vzeroupper2354; AVX512-NEXT:    retq2355;2356; X86AVX2-LABEL: PR44139:2357; X86AVX2:       # %bb.0:2358; X86AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx2359; X86AVX2-NEXT:    vbroadcastsd (%ecx), %ymm02360; X86AVX2-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0]2361; X86AVX2-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]2362; X86AVX2-NEXT:    vmovaps %ymm0, 64(%ecx)2363; X86AVX2-NEXT:    vmovaps %ymm0, 96(%ecx)2364; X86AVX2-NEXT:    vmovaps %ymm0, 32(%ecx)2365; X86AVX2-NEXT:    movl (%ecx), %eax2366; X86AVX2-NEXT:    vmovaps %ymm1, (%ecx)2367; X86AVX2-NEXT:    leal 2147483647(%eax), %ecx2368; X86AVX2-NEXT:    testl %eax, %eax2369; X86AVX2-NEXT:    cmovnsl %eax, %ecx2370; X86AVX2-NEXT:    andl $-2147483648, %ecx # imm = 0x800000002371; X86AVX2-NEXT:    addl %eax, %ecx2372; X86AVX2-NEXT:    xorl %edx, %edx2373; X86AVX2-NEXT:    divl %ecx2374; X86AVX2-NEXT:    vzeroupper2375; X86AVX2-NEXT:    retl2376  %L = load <16 x i64>, ptr %p2377  %E1 = extractelement <16 x i64> %L, i64 02378  %tempvector = insertelement <16 x i64> undef, i64 %E1, i32 02379  %vector = shufflevector <16 x i64> %tempvector, <16 x i64> undef, <16 x i32> zeroinitializer2380  %C3 = icmp sgt i64 9223372036854775807, -92233720368547758082381  %t0 = trunc <16 x i64> %vector to <16 x i32>2382  %I4 = insertelement <16 x i64> %vector, i64 %E1, i1 %C32383  store <16 x i64> %I4, ptr %p2384  %elt = extractelement <16 x i32> %t0, i32 02385  %B = srem i32 %elt, -21474836482386  %B9 = udiv i32 %elt, %B2387  ret i32 %B92388}2389