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