brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.7 KiB · a39ea60 Raw
495 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknwon -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE413; RUN: llc < %s -mtriple=x86_64-unknwon -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX14; RUN: llc < %s -mtriple=x86_64-unknwon -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX25; RUN: llc < %s -mtriple=i686-unknwon -mattr=+avx2 | FileCheck %s --check-prefixes=X86-AVX26 7; PR148878; These tests inject a store into the chain to test the inreg versions of pmovsx9 10define void @test1(ptr %in, ptr %out) nounwind {11; SSE41-LABEL: test1:12; SSE41:       # %bb.0:13; SSE41-NEXT:    pmovsxbq (%rdi), %xmm014; SSE41-NEXT:    xorps %xmm1, %xmm115; SSE41-NEXT:    movups %xmm1, (%rax)16; SSE41-NEXT:    movdqu %xmm0, (%rsi)17; SSE41-NEXT:    retq18;19; AVX-LABEL: test1:20; AVX:       # %bb.0:21; AVX-NEXT:    vpmovsxbq (%rdi), %xmm022; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm123; AVX-NEXT:    vmovups %xmm1, (%rax)24; AVX-NEXT:    vmovdqu %xmm0, (%rsi)25; AVX-NEXT:    retq26;27; X86-AVX2-LABEL: test1:28; X86-AVX2:       # %bb.0:29; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax30; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx31; X86-AVX2-NEXT:    vpmovsxbq (%ecx), %xmm032; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm133; X86-AVX2-NEXT:    vmovups %xmm1, (%eax)34; X86-AVX2-NEXT:    vmovdqu %xmm0, (%eax)35; X86-AVX2-NEXT:    retl36  %wide.load35 = load <2 x i8>, ptr %in, align 137  %sext = sext <2 x i8> %wide.load35 to <2 x i64>38  store <2 x i64> zeroinitializer, ptr undef, align 839  store <2 x i64> %sext, ptr %out, align 840  ret void41}42 43define void @test2(ptr %in, ptr %out) nounwind {44; SSE41-LABEL: test2:45; SSE41:       # %bb.0:46; SSE41-NEXT:    pmovsxbq (%rdi), %xmm047; SSE41-NEXT:    pmovsxbq 2(%rdi), %xmm148; SSE41-NEXT:    xorps %xmm2, %xmm249; SSE41-NEXT:    movups %xmm2, (%rax)50; SSE41-NEXT:    movdqu %xmm1, 16(%rsi)51; SSE41-NEXT:    movdqu %xmm0, (%rsi)52; SSE41-NEXT:    retq53;54; AVX1-LABEL: test2:55; AVX1:       # %bb.0:56; AVX1-NEXT:    vpmovsxbq (%rdi), %xmm057; AVX1-NEXT:    vpmovsxbq 2(%rdi), %xmm158; AVX1-NEXT:    vxorps %xmm2, %xmm2, %xmm259; AVX1-NEXT:    vmovups %ymm2, (%rax)60; AVX1-NEXT:    vmovdqu %xmm1, 16(%rsi)61; AVX1-NEXT:    vmovdqu %xmm0, (%rsi)62; AVX1-NEXT:    vzeroupper63; AVX1-NEXT:    retq64;65; AVX2-LABEL: test2:66; AVX2:       # %bb.0:67; AVX2-NEXT:    vpmovsxbq (%rdi), %ymm068; AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm169; AVX2-NEXT:    vmovups %ymm1, (%rax)70; AVX2-NEXT:    vmovdqu %ymm0, (%rsi)71; AVX2-NEXT:    vzeroupper72; AVX2-NEXT:    retq73;74; X86-AVX2-LABEL: test2:75; X86-AVX2:       # %bb.0:76; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax77; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx78; X86-AVX2-NEXT:    vpmovsxbq (%ecx), %ymm079; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm180; X86-AVX2-NEXT:    vmovups %ymm1, (%eax)81; X86-AVX2-NEXT:    vmovdqu %ymm0, (%eax)82; X86-AVX2-NEXT:    vzeroupper83; X86-AVX2-NEXT:    retl84  %wide.load35 = load <4 x i8>, ptr %in, align 185  %sext = sext <4 x i8> %wide.load35 to <4 x i64>86  store <4 x i64> zeroinitializer, ptr undef, align 887  store <4 x i64> %sext, ptr %out, align 888  ret void89}90 91define void @test3(ptr %in, ptr %out) nounwind {92; SSE41-LABEL: test3:93; SSE41:       # %bb.0:94; SSE41-NEXT:    pmovsxbd (%rdi), %xmm095; SSE41-NEXT:    xorps %xmm1, %xmm196; SSE41-NEXT:    movups %xmm1, (%rax)97; SSE41-NEXT:    movdqu %xmm0, (%rsi)98; SSE41-NEXT:    retq99;100; AVX-LABEL: test3:101; AVX:       # %bb.0:102; AVX-NEXT:    vpmovsxbd (%rdi), %xmm0103; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1104; AVX-NEXT:    vmovups %xmm1, (%rax)105; AVX-NEXT:    vmovdqu %xmm0, (%rsi)106; AVX-NEXT:    retq107;108; X86-AVX2-LABEL: test3:109; X86-AVX2:       # %bb.0:110; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax111; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx112; X86-AVX2-NEXT:    vpmovsxbd (%ecx), %xmm0113; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1114; X86-AVX2-NEXT:    vmovups %xmm1, (%eax)115; X86-AVX2-NEXT:    vmovdqu %xmm0, (%eax)116; X86-AVX2-NEXT:    retl117  %wide.load35 = load <4 x i8>, ptr %in, align 1118  %sext = sext <4 x i8> %wide.load35 to <4 x i32>119  store <4 x i32> zeroinitializer, ptr undef, align 8120  store <4 x i32> %sext, ptr %out, align 8121  ret void122}123 124define void @test4(ptr %in, ptr %out) nounwind {125; SSE41-LABEL: test4:126; SSE41:       # %bb.0:127; SSE41-NEXT:    pmovsxbd (%rdi), %xmm0128; SSE41-NEXT:    pmovsxbd 4(%rdi), %xmm1129; SSE41-NEXT:    xorps %xmm2, %xmm2130; SSE41-NEXT:    movups %xmm2, (%rax)131; SSE41-NEXT:    movdqu %xmm1, 16(%rsi)132; SSE41-NEXT:    movdqu %xmm0, (%rsi)133; SSE41-NEXT:    retq134;135; AVX1-LABEL: test4:136; AVX1:       # %bb.0:137; AVX1-NEXT:    vpmovsxbd (%rdi), %xmm0138; AVX1-NEXT:    vpmovsxbd 4(%rdi), %xmm1139; AVX1-NEXT:    vxorps %xmm2, %xmm2, %xmm2140; AVX1-NEXT:    vmovups %ymm2, (%rax)141; AVX1-NEXT:    vmovdqu %xmm1, 16(%rsi)142; AVX1-NEXT:    vmovdqu %xmm0, (%rsi)143; AVX1-NEXT:    vzeroupper144; AVX1-NEXT:    retq145;146; AVX2-LABEL: test4:147; AVX2:       # %bb.0:148; AVX2-NEXT:    vpmovsxbd (%rdi), %ymm0149; AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1150; AVX2-NEXT:    vmovups %ymm1, (%rax)151; AVX2-NEXT:    vmovdqu %ymm0, (%rsi)152; AVX2-NEXT:    vzeroupper153; AVX2-NEXT:    retq154;155; X86-AVX2-LABEL: test4:156; X86-AVX2:       # %bb.0:157; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax158; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx159; X86-AVX2-NEXT:    vpmovsxbd (%ecx), %ymm0160; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1161; X86-AVX2-NEXT:    vmovups %ymm1, (%eax)162; X86-AVX2-NEXT:    vmovdqu %ymm0, (%eax)163; X86-AVX2-NEXT:    vzeroupper164; X86-AVX2-NEXT:    retl165  %wide.load35 = load <8 x i8>, ptr %in, align 1166  %sext = sext <8 x i8> %wide.load35 to <8 x i32>167  store <8 x i32> zeroinitializer, ptr undef, align 8168  store <8 x i32> %sext, ptr %out, align 8169  ret void170}171 172define void @test5(ptr %in, ptr %out) nounwind {173; SSE41-LABEL: test5:174; SSE41:       # %bb.0:175; SSE41-NEXT:    pmovsxbw (%rdi), %xmm0176; SSE41-NEXT:    xorps %xmm1, %xmm1177; SSE41-NEXT:    movups %xmm1, (%rax)178; SSE41-NEXT:    movdqu %xmm0, (%rsi)179; SSE41-NEXT:    retq180;181; AVX-LABEL: test5:182; AVX:       # %bb.0:183; AVX-NEXT:    vpmovsxbw (%rdi), %xmm0184; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1185; AVX-NEXT:    vmovups %xmm1, (%rax)186; AVX-NEXT:    vmovdqu %xmm0, (%rsi)187; AVX-NEXT:    retq188;189; X86-AVX2-LABEL: test5:190; X86-AVX2:       # %bb.0:191; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax192; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx193; X86-AVX2-NEXT:    vpmovsxbw (%ecx), %xmm0194; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1195; X86-AVX2-NEXT:    vmovups %xmm1, (%eax)196; X86-AVX2-NEXT:    vmovdqu %xmm0, (%eax)197; X86-AVX2-NEXT:    retl198  %wide.load35 = load <8 x i8>, ptr %in, align 1199  %sext = sext <8 x i8> %wide.load35 to <8 x i16>200  store <8 x i16> zeroinitializer, ptr undef, align 8201  store <8 x i16> %sext, ptr %out, align 8202  ret void203}204 205define void @test6(ptr %in, ptr %out) nounwind {206; SSE41-LABEL: test6:207; SSE41:       # %bb.0:208; SSE41-NEXT:    pmovsxbw (%rdi), %xmm0209; SSE41-NEXT:    pmovsxbw 8(%rdi), %xmm1210; SSE41-NEXT:    xorps %xmm2, %xmm2211; SSE41-NEXT:    movups %xmm2, (%rax)212; SSE41-NEXT:    movdqu %xmm1, 16(%rsi)213; SSE41-NEXT:    movdqu %xmm0, (%rsi)214; SSE41-NEXT:    retq215;216; AVX1-LABEL: test6:217; AVX1:       # %bb.0:218; AVX1-NEXT:    vpmovsxbw (%rdi), %xmm0219; AVX1-NEXT:    vpmovsxbw 8(%rdi), %xmm1220; AVX1-NEXT:    vxorps %xmm2, %xmm2, %xmm2221; AVX1-NEXT:    vmovups %ymm2, (%rax)222; AVX1-NEXT:    vmovdqu %xmm1, 16(%rsi)223; AVX1-NEXT:    vmovdqu %xmm0, (%rsi)224; AVX1-NEXT:    vzeroupper225; AVX1-NEXT:    retq226;227; AVX2-LABEL: test6:228; AVX2:       # %bb.0:229; AVX2-NEXT:    vpmovsxbw (%rdi), %ymm0230; AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1231; AVX2-NEXT:    vmovups %ymm1, (%rax)232; AVX2-NEXT:    vmovdqu %ymm0, (%rsi)233; AVX2-NEXT:    vzeroupper234; AVX2-NEXT:    retq235;236; X86-AVX2-LABEL: test6:237; X86-AVX2:       # %bb.0:238; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax239; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx240; X86-AVX2-NEXT:    vpmovsxbw (%ecx), %ymm0241; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1242; X86-AVX2-NEXT:    vmovups %ymm1, (%eax)243; X86-AVX2-NEXT:    vmovdqu %ymm0, (%eax)244; X86-AVX2-NEXT:    vzeroupper245; X86-AVX2-NEXT:    retl246  %wide.load35 = load <16 x i8>, ptr %in, align 1247  %sext = sext <16 x i8> %wide.load35 to <16 x i16>248  store <16 x i16> zeroinitializer, ptr undef, align 8249  store <16 x i16> %sext, ptr %out, align 8250  ret void251}252 253define void @test7(ptr %in, ptr %out) nounwind {254; SSE41-LABEL: test7:255; SSE41:       # %bb.0:256; SSE41-NEXT:    pmovsxwq (%rdi), %xmm0257; SSE41-NEXT:    xorps %xmm1, %xmm1258; SSE41-NEXT:    movups %xmm1, (%rax)259; SSE41-NEXT:    movdqu %xmm0, (%rsi)260; SSE41-NEXT:    retq261;262; AVX-LABEL: test7:263; AVX:       # %bb.0:264; AVX-NEXT:    vpmovsxwq (%rdi), %xmm0265; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1266; AVX-NEXT:    vmovups %xmm1, (%rax)267; AVX-NEXT:    vmovdqu %xmm0, (%rsi)268; AVX-NEXT:    retq269;270; X86-AVX2-LABEL: test7:271; X86-AVX2:       # %bb.0:272; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax273; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx274; X86-AVX2-NEXT:    vpmovsxwq (%ecx), %xmm0275; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1276; X86-AVX2-NEXT:    vmovups %xmm1, (%eax)277; X86-AVX2-NEXT:    vmovdqu %xmm0, (%eax)278; X86-AVX2-NEXT:    retl279  %wide.load35 = load <2 x i16>, ptr %in, align 1280  %sext = sext <2 x i16> %wide.load35 to <2 x i64>281  store <2 x i64> zeroinitializer, ptr undef, align 8282  store <2 x i64> %sext, ptr %out, align 8283  ret void284}285 286define void @test8(ptr %in, ptr %out) nounwind {287; SSE41-LABEL: test8:288; SSE41:       # %bb.0:289; SSE41-NEXT:    pmovsxwq (%rdi), %xmm0290; SSE41-NEXT:    pmovsxwq 4(%rdi), %xmm1291; SSE41-NEXT:    xorps %xmm2, %xmm2292; SSE41-NEXT:    movups %xmm2, (%rax)293; SSE41-NEXT:    movdqu %xmm1, 16(%rsi)294; SSE41-NEXT:    movdqu %xmm0, (%rsi)295; SSE41-NEXT:    retq296;297; AVX1-LABEL: test8:298; AVX1:       # %bb.0:299; AVX1-NEXT:    vpmovsxwq (%rdi), %xmm0300; AVX1-NEXT:    vpmovsxwq 4(%rdi), %xmm1301; AVX1-NEXT:    vxorps %xmm2, %xmm2, %xmm2302; AVX1-NEXT:    vmovups %ymm2, (%rax)303; AVX1-NEXT:    vmovdqu %xmm1, 16(%rsi)304; AVX1-NEXT:    vmovdqu %xmm0, (%rsi)305; AVX1-NEXT:    vzeroupper306; AVX1-NEXT:    retq307;308; AVX2-LABEL: test8:309; AVX2:       # %bb.0:310; AVX2-NEXT:    vpmovsxwq (%rdi), %ymm0311; AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1312; AVX2-NEXT:    vmovups %ymm1, (%rax)313; AVX2-NEXT:    vmovdqu %ymm0, (%rsi)314; AVX2-NEXT:    vzeroupper315; AVX2-NEXT:    retq316;317; X86-AVX2-LABEL: test8:318; X86-AVX2:       # %bb.0:319; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax320; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx321; X86-AVX2-NEXT:    vpmovsxwq (%ecx), %ymm0322; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1323; X86-AVX2-NEXT:    vmovups %ymm1, (%eax)324; X86-AVX2-NEXT:    vmovdqu %ymm0, (%eax)325; X86-AVX2-NEXT:    vzeroupper326; X86-AVX2-NEXT:    retl327  %wide.load35 = load <4 x i16>, ptr %in, align 1328  %sext = sext <4 x i16> %wide.load35 to <4 x i64>329  store <4 x i64> zeroinitializer, ptr undef, align 8330  store <4 x i64> %sext, ptr %out, align 8331  ret void332}333 334define void @test9(ptr %in, ptr %out) nounwind {335; SSE41-LABEL: test9:336; SSE41:       # %bb.0:337; SSE41-NEXT:    pmovsxwd (%rdi), %xmm0338; SSE41-NEXT:    xorps %xmm1, %xmm1339; SSE41-NEXT:    movups %xmm1, (%rax)340; SSE41-NEXT:    movdqu %xmm0, (%rsi)341; SSE41-NEXT:    retq342;343; AVX-LABEL: test9:344; AVX:       # %bb.0:345; AVX-NEXT:    vpmovsxwd (%rdi), %xmm0346; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1347; AVX-NEXT:    vmovups %xmm1, (%rax)348; AVX-NEXT:    vmovdqu %xmm0, (%rsi)349; AVX-NEXT:    retq350;351; X86-AVX2-LABEL: test9:352; X86-AVX2:       # %bb.0:353; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax354; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx355; X86-AVX2-NEXT:    vpmovsxwd (%ecx), %xmm0356; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1357; X86-AVX2-NEXT:    vmovups %xmm1, (%eax)358; X86-AVX2-NEXT:    vmovdqu %xmm0, (%eax)359; X86-AVX2-NEXT:    retl360  %wide.load35 = load <4 x i16>, ptr %in, align 1361  %sext = sext <4 x i16> %wide.load35 to <4 x i32>362  store <4 x i32> zeroinitializer, ptr undef, align 8363  store <4 x i32> %sext, ptr %out, align 8364  ret void365}366 367define void @test10(ptr %in, ptr %out) nounwind {368; SSE41-LABEL: test10:369; SSE41:       # %bb.0:370; SSE41-NEXT:    pmovsxwd (%rdi), %xmm0371; SSE41-NEXT:    pmovsxwd 8(%rdi), %xmm1372; SSE41-NEXT:    xorps %xmm2, %xmm2373; SSE41-NEXT:    movups %xmm2, (%rax)374; SSE41-NEXT:    movdqu %xmm1, 16(%rsi)375; SSE41-NEXT:    movdqu %xmm0, (%rsi)376; SSE41-NEXT:    retq377;378; AVX1-LABEL: test10:379; AVX1:       # %bb.0:380; AVX1-NEXT:    vpmovsxwd (%rdi), %xmm0381; AVX1-NEXT:    vpmovsxwd 8(%rdi), %xmm1382; AVX1-NEXT:    vxorps %xmm2, %xmm2, %xmm2383; AVX1-NEXT:    vmovups %ymm2, (%rax)384; AVX1-NEXT:    vmovdqu %xmm1, 16(%rsi)385; AVX1-NEXT:    vmovdqu %xmm0, (%rsi)386; AVX1-NEXT:    vzeroupper387; AVX1-NEXT:    retq388;389; AVX2-LABEL: test10:390; AVX2:       # %bb.0:391; AVX2-NEXT:    vpmovsxwd (%rdi), %ymm0392; AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1393; AVX2-NEXT:    vmovups %ymm1, (%rax)394; AVX2-NEXT:    vmovdqu %ymm0, (%rsi)395; AVX2-NEXT:    vzeroupper396; AVX2-NEXT:    retq397;398; X86-AVX2-LABEL: test10:399; X86-AVX2:       # %bb.0:400; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax401; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx402; X86-AVX2-NEXT:    vpmovsxwd (%ecx), %ymm0403; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1404; X86-AVX2-NEXT:    vmovups %ymm1, (%eax)405; X86-AVX2-NEXT:    vmovdqu %ymm0, (%eax)406; X86-AVX2-NEXT:    vzeroupper407; X86-AVX2-NEXT:    retl408  %wide.load35 = load <8 x i16>, ptr %in, align 1409  %sext = sext <8 x i16> %wide.load35 to <8 x i32>410  store <8 x i32> zeroinitializer, ptr undef, align 8411  store <8 x i32> %sext, ptr %out, align 8412  ret void413}414 415define void @test11(ptr %in, ptr %out) nounwind {416; SSE41-LABEL: test11:417; SSE41:       # %bb.0:418; SSE41-NEXT:    pmovsxdq (%rdi), %xmm0419; SSE41-NEXT:    xorps %xmm1, %xmm1420; SSE41-NEXT:    movups %xmm1, (%rax)421; SSE41-NEXT:    movdqu %xmm0, (%rsi)422; SSE41-NEXT:    retq423;424; AVX-LABEL: test11:425; AVX:       # %bb.0:426; AVX-NEXT:    vpmovsxdq (%rdi), %xmm0427; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1428; AVX-NEXT:    vmovups %xmm1, (%rax)429; AVX-NEXT:    vmovdqu %xmm0, (%rsi)430; AVX-NEXT:    retq431;432; X86-AVX2-LABEL: test11:433; X86-AVX2:       # %bb.0:434; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax435; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx436; X86-AVX2-NEXT:    vpmovsxdq (%ecx), %xmm0437; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1438; X86-AVX2-NEXT:    vmovups %xmm1, (%eax)439; X86-AVX2-NEXT:    vmovdqu %xmm0, (%eax)440; X86-AVX2-NEXT:    retl441  %wide.load35 = load <2 x i32>, ptr %in, align 1442  %sext = sext <2 x i32> %wide.load35 to <2 x i64>443  store <2 x i64> zeroinitializer, ptr undef, align 8444  store <2 x i64> %sext, ptr %out, align 8445  ret void446}447 448define void @test12(ptr %in, ptr %out) nounwind {449; SSE41-LABEL: test12:450; SSE41:       # %bb.0:451; SSE41-NEXT:    pmovsxdq (%rdi), %xmm0452; SSE41-NEXT:    pmovsxdq 8(%rdi), %xmm1453; SSE41-NEXT:    xorps %xmm2, %xmm2454; SSE41-NEXT:    movups %xmm2, (%rax)455; SSE41-NEXT:    movdqu %xmm1, 16(%rsi)456; SSE41-NEXT:    movdqu %xmm0, (%rsi)457; SSE41-NEXT:    retq458;459; AVX1-LABEL: test12:460; AVX1:       # %bb.0:461; AVX1-NEXT:    vpmovsxdq (%rdi), %xmm0462; AVX1-NEXT:    vpmovsxdq 8(%rdi), %xmm1463; AVX1-NEXT:    vxorps %xmm2, %xmm2, %xmm2464; AVX1-NEXT:    vmovups %ymm2, (%rax)465; AVX1-NEXT:    vmovdqu %xmm1, 16(%rsi)466; AVX1-NEXT:    vmovdqu %xmm0, (%rsi)467; AVX1-NEXT:    vzeroupper468; AVX1-NEXT:    retq469;470; AVX2-LABEL: test12:471; AVX2:       # %bb.0:472; AVX2-NEXT:    vpmovsxdq (%rdi), %ymm0473; AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1474; AVX2-NEXT:    vmovups %ymm1, (%rax)475; AVX2-NEXT:    vmovdqu %ymm0, (%rsi)476; AVX2-NEXT:    vzeroupper477; AVX2-NEXT:    retq478;479; X86-AVX2-LABEL: test12:480; X86-AVX2:       # %bb.0:481; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax482; X86-AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx483; X86-AVX2-NEXT:    vpmovsxdq (%ecx), %ymm0484; X86-AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1485; X86-AVX2-NEXT:    vmovups %ymm1, (%eax)486; X86-AVX2-NEXT:    vmovdqu %ymm0, (%eax)487; X86-AVX2-NEXT:    vzeroupper488; X86-AVX2-NEXT:    retl489  %wide.load35 = load <4 x i32>, ptr %in, align 1490  %sext = sext <4 x i32> %wide.load35 to <4 x i64>491  store <4 x i64> zeroinitializer, ptr undef, align 8492  store <4 x i64> %sext, ptr %out, align 8493  ret void494}495