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