brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.1 KiB · 10a8402 Raw
538 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X643; RUN: llc < %s -mtriple=i386-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X864 5define void @test_udiv7_v2i32(ptr %x, ptr %y) nounwind {6; X64-LABEL: test_udiv7_v2i32:7; X64:       # %bb.0:8; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero9; X64-NEXT:    movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]10; X64-NEXT:    movdqa %xmm0, %xmm211; X64-NEXT:    pmuludq %xmm1, %xmm212; X64-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]13; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]14; X64-NEXT:    pmuludq %xmm1, %xmm315; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]16; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]17; X64-NEXT:    psubd %xmm2, %xmm018; X64-NEXT:    psrld $1, %xmm019; X64-NEXT:    paddd %xmm2, %xmm020; X64-NEXT:    psrld $2, %xmm021; X64-NEXT:    movq %xmm0, (%rsi)22; X64-NEXT:    retq23;24; X86-LABEL: test_udiv7_v2i32:25; X86:       # %bb.0:26; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax27; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx28; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero29; X86-NEXT:    movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]30; X86-NEXT:    movdqa %xmm0, %xmm231; X86-NEXT:    pmuludq %xmm1, %xmm232; X86-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]33; X86-NEXT:    movdqa %xmm0, %xmm334; X86-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]35; X86-NEXT:    pmuludq %xmm1, %xmm336; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]37; X86-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]38; X86-NEXT:    psubd %xmm2, %xmm039; X86-NEXT:    psrld $1, %xmm040; X86-NEXT:    paddd %xmm2, %xmm041; X86-NEXT:    psrld $2, %xmm042; X86-NEXT:    movq %xmm0, (%eax)43; X86-NEXT:    retl44  %a = load <2 x i32>, ptr %x45  %b = udiv <2 x i32> %a, <i32 7, i32 7>46  store <2 x i32> %b, ptr %y47  ret void48}49 50define void @test_urem7_v2i32(ptr %x, ptr %y) nounwind {51; X64-LABEL: test_urem7_v2i32:52; X64:       # %bb.0:53; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero54; X64-NEXT:    movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]55; X64-NEXT:    movdqa %xmm0, %xmm256; X64-NEXT:    pmuludq %xmm1, %xmm257; X64-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]58; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]59; X64-NEXT:    pmuludq %xmm1, %xmm360; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]61; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]62; X64-NEXT:    movdqa %xmm0, %xmm163; X64-NEXT:    psubd %xmm2, %xmm164; X64-NEXT:    psrld $1, %xmm165; X64-NEXT:    paddd %xmm2, %xmm166; X64-NEXT:    psrld $2, %xmm167; X64-NEXT:    movdqa %xmm1, %xmm268; X64-NEXT:    pslld $3, %xmm269; X64-NEXT:    psubd %xmm2, %xmm170; X64-NEXT:    paddd %xmm0, %xmm171; X64-NEXT:    movq %xmm1, (%rsi)72; X64-NEXT:    retq73;74; X86-LABEL: test_urem7_v2i32:75; X86:       # %bb.0:76; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax77; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx78; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero79; X86-NEXT:    movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]80; X86-NEXT:    movdqa %xmm0, %xmm281; X86-NEXT:    pmuludq %xmm1, %xmm282; X86-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]83; X86-NEXT:    movdqa %xmm0, %xmm384; X86-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]85; X86-NEXT:    pmuludq %xmm1, %xmm386; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]87; X86-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]88; X86-NEXT:    movdqa %xmm0, %xmm189; X86-NEXT:    psubd %xmm2, %xmm190; X86-NEXT:    psrld $1, %xmm191; X86-NEXT:    paddd %xmm2, %xmm192; X86-NEXT:    psrld $2, %xmm193; X86-NEXT:    movdqa %xmm1, %xmm294; X86-NEXT:    pslld $3, %xmm295; X86-NEXT:    psubd %xmm2, %xmm196; X86-NEXT:    paddd %xmm0, %xmm197; X86-NEXT:    movq %xmm1, (%eax)98; X86-NEXT:    retl99  %a = load <2 x i32>, ptr %x100  %b = urem <2 x i32> %a, <i32 7, i32 7>101  store <2 x i32> %b, ptr %y102  ret void103}104 105define void @test_sdiv7_v2i32(ptr %x, ptr %y) nounwind {106; X64-LABEL: test_sdiv7_v2i32:107; X64:       # %bb.0:108; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero109; X64-NEXT:    movdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027]110; X64-NEXT:    movdqa %xmm0, %xmm2111; X64-NEXT:    pmuludq %xmm1, %xmm2112; X64-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]113; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]114; X64-NEXT:    pmuludq %xmm1, %xmm3115; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3]116; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]117; X64-NEXT:    pxor %xmm3, %xmm3118; X64-NEXT:    pcmpgtd %xmm0, %xmm3119; X64-NEXT:    pand %xmm1, %xmm3120; X64-NEXT:    paddd %xmm0, %xmm3121; X64-NEXT:    psubd %xmm3, %xmm2122; X64-NEXT:    paddd %xmm0, %xmm2123; X64-NEXT:    movdqa %xmm2, %xmm0124; X64-NEXT:    psrld $31, %xmm0125; X64-NEXT:    psrad $2, %xmm2126; X64-NEXT:    paddd %xmm0, %xmm2127; X64-NEXT:    movq %xmm2, (%rsi)128; X64-NEXT:    retq129;130; X86-LABEL: test_sdiv7_v2i32:131; X86:       # %bb.0:132; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax133; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx134; X86-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero135; X86-NEXT:    movdqa {{.*#+}} xmm2 = [2454267027,2454267027,2454267027,2454267027]136; X86-NEXT:    movdqa %xmm1, %xmm0137; X86-NEXT:    pmuludq %xmm2, %xmm0138; X86-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]139; X86-NEXT:    movdqa %xmm1, %xmm3140; X86-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]141; X86-NEXT:    pmuludq %xmm2, %xmm3142; X86-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3]143; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]144; X86-NEXT:    pxor %xmm3, %xmm3145; X86-NEXT:    pcmpgtd %xmm1, %xmm3146; X86-NEXT:    pand %xmm2, %xmm3147; X86-NEXT:    paddd %xmm1, %xmm3148; X86-NEXT:    psubd %xmm3, %xmm0149; X86-NEXT:    paddd %xmm1, %xmm0150; X86-NEXT:    movdqa %xmm0, %xmm1151; X86-NEXT:    psrld $31, %xmm1152; X86-NEXT:    psrad $2, %xmm0153; X86-NEXT:    paddd %xmm1, %xmm0154; X86-NEXT:    movq %xmm0, (%eax)155; X86-NEXT:    retl156  %a = load <2 x i32>, ptr %x157  %b = sdiv <2 x i32> %a, <i32 7, i32 7>158  store <2 x i32> %b, ptr %y159  ret void160}161 162define void @test_srem7_v2i32(ptr %x, ptr %y) nounwind {163; X64-LABEL: test_srem7_v2i32:164; X64:       # %bb.0:165; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero166; X64-NEXT:    movdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027]167; X64-NEXT:    movdqa %xmm0, %xmm2168; X64-NEXT:    pmuludq %xmm1, %xmm2169; X64-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]170; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]171; X64-NEXT:    pmuludq %xmm1, %xmm3172; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3]173; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]174; X64-NEXT:    pxor %xmm3, %xmm3175; X64-NEXT:    pcmpgtd %xmm0, %xmm3176; X64-NEXT:    pand %xmm1, %xmm3177; X64-NEXT:    paddd %xmm0, %xmm3178; X64-NEXT:    psubd %xmm3, %xmm2179; X64-NEXT:    paddd %xmm0, %xmm2180; X64-NEXT:    movdqa %xmm2, %xmm1181; X64-NEXT:    psrld $31, %xmm1182; X64-NEXT:    psrad $2, %xmm2183; X64-NEXT:    paddd %xmm1, %xmm2184; X64-NEXT:    movdqa %xmm2, %xmm1185; X64-NEXT:    pslld $3, %xmm1186; X64-NEXT:    psubd %xmm1, %xmm2187; X64-NEXT:    paddd %xmm0, %xmm2188; X64-NEXT:    movq %xmm2, (%rsi)189; X64-NEXT:    retq190;191; X86-LABEL: test_srem7_v2i32:192; X86:       # %bb.0:193; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax194; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx195; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero196; X86-NEXT:    movdqa {{.*#+}} xmm2 = [2454267027,2454267027,2454267027,2454267027]197; X86-NEXT:    movdqa %xmm0, %xmm1198; X86-NEXT:    pmuludq %xmm2, %xmm1199; X86-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]200; X86-NEXT:    movdqa %xmm0, %xmm3201; X86-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]202; X86-NEXT:    pmuludq %xmm2, %xmm3203; X86-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3]204; X86-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]205; X86-NEXT:    pxor %xmm3, %xmm3206; X86-NEXT:    pcmpgtd %xmm0, %xmm3207; X86-NEXT:    pand %xmm2, %xmm3208; X86-NEXT:    paddd %xmm0, %xmm3209; X86-NEXT:    psubd %xmm3, %xmm1210; X86-NEXT:    paddd %xmm0, %xmm1211; X86-NEXT:    movdqa %xmm1, %xmm2212; X86-NEXT:    psrld $31, %xmm2213; X86-NEXT:    psrad $2, %xmm1214; X86-NEXT:    paddd %xmm2, %xmm1215; X86-NEXT:    movdqa %xmm1, %xmm2216; X86-NEXT:    pslld $3, %xmm2217; X86-NEXT:    psubd %xmm2, %xmm1218; X86-NEXT:    paddd %xmm0, %xmm1219; X86-NEXT:    movq %xmm1, (%eax)220; X86-NEXT:    retl221  %a = load <2 x i32>, ptr %x222  %b = srem <2 x i32> %a, <i32 7, i32 7>223  store <2 x i32> %b, ptr %y224  ret void225}226 227define void @test_udiv_pow2_v2i32(ptr %x, ptr %y) nounwind {228; X64-LABEL: test_udiv_pow2_v2i32:229; X64:       # %bb.0:230; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero231; X64-NEXT:    psrld $3, %xmm0232; X64-NEXT:    movq %xmm0, (%rsi)233; X64-NEXT:    retq234;235; X86-LABEL: test_udiv_pow2_v2i32:236; X86:       # %bb.0:237; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax238; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx239; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero240; X86-NEXT:    psrld $3, %xmm0241; X86-NEXT:    movq %xmm0, (%eax)242; X86-NEXT:    retl243  %a = load <2 x i32>, ptr %x244  %b = udiv <2 x i32> %a, <i32 8, i32 8>245  store <2 x i32> %b, ptr %y246  ret void247}248 249define void @test_urem_pow2_v2i32(ptr %x, ptr %y) nounwind {250; X64-LABEL: test_urem_pow2_v2i32:251; X64:       # %bb.0:252; X64-NEXT:    movabsq $30064771079, %rax # imm = 0x700000007253; X64-NEXT:    andq (%rdi), %rax254; X64-NEXT:    movq %rax, (%rsi)255; X64-NEXT:    retq256;257; X86-LABEL: test_urem_pow2_v2i32:258; X86:       # %bb.0:259; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax260; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx261; X86-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero262; X86-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0263; X86-NEXT:    movlps %xmm0, (%eax)264; X86-NEXT:    retl265  %a = load <2 x i32>, ptr %x266  %b = urem <2 x i32> %a, <i32 8, i32 8>267  store <2 x i32> %b, ptr %y268  ret void269}270 271define void @test_sdiv_pow2_v2i32(ptr %x, ptr %y) nounwind {272; X64-LABEL: test_sdiv_pow2_v2i32:273; X64:       # %bb.0:274; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero275; X64-NEXT:    movdqa %xmm0, %xmm1276; X64-NEXT:    psrad $31, %xmm1277; X64-NEXT:    psrld $29, %xmm1278; X64-NEXT:    paddd %xmm0, %xmm1279; X64-NEXT:    psrad $3, %xmm1280; X64-NEXT:    movq %xmm1, (%rsi)281; X64-NEXT:    retq282;283; X86-LABEL: test_sdiv_pow2_v2i32:284; X86:       # %bb.0:285; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax286; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx287; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero288; X86-NEXT:    movdqa %xmm0, %xmm1289; X86-NEXT:    psrad $31, %xmm1290; X86-NEXT:    psrld $29, %xmm1291; X86-NEXT:    paddd %xmm0, %xmm1292; X86-NEXT:    psrad $3, %xmm1293; X86-NEXT:    movq %xmm1, (%eax)294; X86-NEXT:    retl295  %a = load <2 x i32>, ptr %x296  %b = sdiv <2 x i32> %a, <i32 8, i32 8>297  store <2 x i32> %b, ptr %y298  ret void299}300 301define void @test_srem_pow2_v2i32(ptr %x, ptr %y) nounwind {302; X64-LABEL: test_srem_pow2_v2i32:303; X64:       # %bb.0:304; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero305; X64-NEXT:    psrld $3, %xmm0306; X64-NEXT:    movq %xmm0, (%rsi)307; X64-NEXT:    retq308;309; X86-LABEL: test_srem_pow2_v2i32:310; X86:       # %bb.0:311; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax312; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx313; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero314; X86-NEXT:    psrld $3, %xmm0315; X86-NEXT:    movq %xmm0, (%eax)316; X86-NEXT:    retl317  %a = load <2 x i32>, ptr %x318  %b = udiv <2 x i32> %a, <i32 8, i32 8>319  store <2 x i32> %b, ptr %y320  ret void321}322 323define void @test_udiv_v2i32(ptr %x, ptr %y, ptr %z) nounwind {324; X64-LABEL: test_udiv_v2i32:325; X64:       # %bb.0:326; X64-NEXT:    movq %rdx, %rcx327; X64-NEXT:    movq (%rdi), %rax328; X64-NEXT:    movq %rax, %xmm0329; X64-NEXT:    movq (%rsi), %rsi330; X64-NEXT:    movq %rsi, %xmm1331; X64-NEXT:    # kill: def $eax killed $eax killed $rax332; X64-NEXT:    xorl %edx, %edx333; X64-NEXT:    divl %esi334; X64-NEXT:    movd %eax, %xmm2335; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]336; X64-NEXT:    movd %xmm0, %eax337; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]338; X64-NEXT:    movd %xmm0, %esi339; X64-NEXT:    xorl %edx, %edx340; X64-NEXT:    divl %esi341; X64-NEXT:    movd %eax, %xmm0342; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]343; X64-NEXT:    movq %xmm2, (%rcx)344; X64-NEXT:    retq345;346; X86-LABEL: test_udiv_v2i32:347; X86:       # %bb.0:348; X86-NEXT:    pushl %esi349; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx350; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax351; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx352; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero353; X86-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero354; X86-NEXT:    movd %xmm0, %eax355; X86-NEXT:    movd %xmm1, %esi356; X86-NEXT:    xorl %edx, %edx357; X86-NEXT:    divl %esi358; X86-NEXT:    movd %eax, %xmm2359; X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]360; X86-NEXT:    movd %xmm0, %eax361; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]362; X86-NEXT:    movd %xmm1, %esi363; X86-NEXT:    xorl %edx, %edx364; X86-NEXT:    divl %esi365; X86-NEXT:    movd %eax, %xmm0366; X86-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]367; X86-NEXT:    movq %xmm2, (%ecx)368; X86-NEXT:    popl %esi369; X86-NEXT:    retl370  %a = load <2 x i32>, ptr %x371  %b = load <2 x i32>, ptr %y372  %c = udiv <2 x i32> %a, %b373  store <2 x i32> %c, ptr %z374  ret void375}376 377define void @test_urem_v2i32(ptr %x, ptr %y, ptr %z) nounwind {378; X64-LABEL: test_urem_v2i32:379; X64:       # %bb.0:380; X64-NEXT:    movq %rdx, %rcx381; X64-NEXT:    movq (%rdi), %rax382; X64-NEXT:    movq %rax, %xmm0383; X64-NEXT:    movq (%rsi), %rsi384; X64-NEXT:    movq %rsi, %xmm1385; X64-NEXT:    # kill: def $eax killed $eax killed $rax386; X64-NEXT:    xorl %edx, %edx387; X64-NEXT:    divl %esi388; X64-NEXT:    movd %edx, %xmm2389; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]390; X64-NEXT:    movd %xmm0, %eax391; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]392; X64-NEXT:    movd %xmm0, %esi393; X64-NEXT:    xorl %edx, %edx394; X64-NEXT:    divl %esi395; X64-NEXT:    movd %edx, %xmm0396; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]397; X64-NEXT:    movq %xmm2, (%rcx)398; X64-NEXT:    retq399;400; X86-LABEL: test_urem_v2i32:401; X86:       # %bb.0:402; X86-NEXT:    pushl %esi403; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx404; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax405; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx406; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero407; X86-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero408; X86-NEXT:    movd %xmm0, %eax409; X86-NEXT:    movd %xmm1, %esi410; X86-NEXT:    xorl %edx, %edx411; X86-NEXT:    divl %esi412; X86-NEXT:    movd %edx, %xmm2413; X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]414; X86-NEXT:    movd %xmm0, %eax415; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]416; X86-NEXT:    movd %xmm1, %esi417; X86-NEXT:    xorl %edx, %edx418; X86-NEXT:    divl %esi419; X86-NEXT:    movd %edx, %xmm0420; X86-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]421; X86-NEXT:    movq %xmm2, (%ecx)422; X86-NEXT:    popl %esi423; X86-NEXT:    retl424  %a = load <2 x i32>, ptr %x425  %b = load <2 x i32>, ptr %y426  %c = urem <2 x i32> %a, %b427  store <2 x i32> %c, ptr %z428  ret void429}430 431define void @test_sdiv_v2i32(ptr %x, ptr %y, ptr %z) nounwind {432; X64-LABEL: test_sdiv_v2i32:433; X64:       # %bb.0:434; X64-NEXT:    movq %rdx, %rcx435; X64-NEXT:    movq (%rdi), %rax436; X64-NEXT:    movq %rax, %xmm0437; X64-NEXT:    movq (%rsi), %rsi438; X64-NEXT:    movq %rsi, %xmm1439; X64-NEXT:    # kill: def $eax killed $eax killed $rax440; X64-NEXT:    cltd441; X64-NEXT:    idivl %esi442; X64-NEXT:    movd %eax, %xmm2443; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]444; X64-NEXT:    movd %xmm0, %eax445; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]446; X64-NEXT:    movd %xmm0, %esi447; X64-NEXT:    cltd448; X64-NEXT:    idivl %esi449; X64-NEXT:    movd %eax, %xmm0450; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]451; X64-NEXT:    movq %xmm2, (%rcx)452; X64-NEXT:    retq453;454; X86-LABEL: test_sdiv_v2i32:455; X86:       # %bb.0:456; X86-NEXT:    pushl %esi457; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx458; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax459; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx460; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero461; X86-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero462; X86-NEXT:    movd %xmm0, %eax463; X86-NEXT:    movd %xmm1, %esi464; X86-NEXT:    cltd465; X86-NEXT:    idivl %esi466; X86-NEXT:    movd %eax, %xmm2467; X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]468; X86-NEXT:    movd %xmm0, %eax469; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]470; X86-NEXT:    movd %xmm1, %esi471; X86-NEXT:    cltd472; X86-NEXT:    idivl %esi473; X86-NEXT:    movd %eax, %xmm0474; X86-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]475; X86-NEXT:    movq %xmm2, (%ecx)476; X86-NEXT:    popl %esi477; X86-NEXT:    retl478  %a = load <2 x i32>, ptr %x479  %b = load <2 x i32>, ptr %y480  %c = sdiv <2 x i32> %a, %b481  store <2 x i32> %c, ptr %z482  ret void483}484 485define void @test_srem_v2i32(ptr %x, ptr %y, ptr %z) nounwind {486; X64-LABEL: test_srem_v2i32:487; X64:       # %bb.0:488; X64-NEXT:    movq %rdx, %rcx489; X64-NEXT:    movq (%rdi), %rax490; X64-NEXT:    movq %rax, %xmm0491; X64-NEXT:    movq (%rsi), %rsi492; X64-NEXT:    movq %rsi, %xmm1493; X64-NEXT:    # kill: def $eax killed $eax killed $rax494; X64-NEXT:    cltd495; X64-NEXT:    idivl %esi496; X64-NEXT:    movd %eax, %xmm2497; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]498; X64-NEXT:    movd %xmm0, %eax499; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]500; X64-NEXT:    movd %xmm0, %esi501; X64-NEXT:    cltd502; X64-NEXT:    idivl %esi503; X64-NEXT:    movd %eax, %xmm0504; X64-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]505; X64-NEXT:    movq %xmm2, (%rcx)506; X64-NEXT:    retq507;508; X86-LABEL: test_srem_v2i32:509; X86:       # %bb.0:510; X86-NEXT:    pushl %esi511; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx512; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax513; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx514; X86-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero515; X86-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero516; X86-NEXT:    movd %xmm0, %eax517; X86-NEXT:    movd %xmm1, %esi518; X86-NEXT:    cltd519; X86-NEXT:    idivl %esi520; X86-NEXT:    movd %eax, %xmm2521; X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]522; X86-NEXT:    movd %xmm0, %eax523; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]524; X86-NEXT:    movd %xmm1, %esi525; X86-NEXT:    cltd526; X86-NEXT:    idivl %esi527; X86-NEXT:    movd %eax, %xmm0528; X86-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]529; X86-NEXT:    movq %xmm2, (%ecx)530; X86-NEXT:    popl %esi531; X86-NEXT:    retl532  %a = load <2 x i32>, ptr %x533  %b = load <2 x i32>, ptr %y534  %c = sdiv <2 x i32> %a, %b535  store <2 x i32> %c, ptr %z536  ret void537}538