brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.9 KiB · 392bc83 Raw
708 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X643; RUN: llc < %s -mtriple=i686 -mattr=cmov | FileCheck %s --check-prefix=X864 5declare  i4  @llvm.sdiv.fix.i4   (i4,  i4,  i32)6declare  i15 @llvm.sdiv.fix.i15  (i15, i15, i32)7declare  i16 @llvm.sdiv.fix.i16  (i16, i16, i32)8declare  i18 @llvm.sdiv.fix.i18  (i18, i18, i32)9declare  i64 @llvm.sdiv.fix.i64  (i64, i64, i32)10declare  <4 x i32> @llvm.sdiv.fix.v4i32(<4 x i32>, <4 x i32>, i32)11 12define i16 @func(i16 %x, i16 %y) nounwind {13; X64-LABEL: func:14; X64:       # %bb.0:15; X64-NEXT:    movswl %si, %esi16; X64-NEXT:    movswl %di, %ecx17; X64-NEXT:    shll $7, %ecx18; X64-NEXT:    movl %ecx, %eax19; X64-NEXT:    cltd20; X64-NEXT:    idivl %esi21; X64-NEXT:    # kill: def $eax killed $eax def $rax22; X64-NEXT:    leal -1(%rax), %edi23; X64-NEXT:    testl %esi, %esi24; X64-NEXT:    sets %sil25; X64-NEXT:    testl %ecx, %ecx26; X64-NEXT:    sets %cl27; X64-NEXT:    xorb %sil, %cl28; X64-NEXT:    testl %edx, %edx29; X64-NEXT:    setne %dl30; X64-NEXT:    testb %cl, %dl31; X64-NEXT:    cmovnel %edi, %eax32; X64-NEXT:    # kill: def $ax killed $ax killed $rax33; X64-NEXT:    retq34;35; X86-LABEL: func:36; X86:       # %bb.0:37; X86-NEXT:    pushl %ebx38; X86-NEXT:    pushl %edi39; X86-NEXT:    pushl %esi40; X86-NEXT:    movswl {{[0-9]+}}(%esp), %esi41; X86-NEXT:    movswl {{[0-9]+}}(%esp), %ecx42; X86-NEXT:    shll $7, %ecx43; X86-NEXT:    movl %ecx, %eax44; X86-NEXT:    cltd45; X86-NEXT:    idivl %esi46; X86-NEXT:    leal -1(%eax), %edi47; X86-NEXT:    testl %esi, %esi48; X86-NEXT:    sets %bl49; X86-NEXT:    testl %ecx, %ecx50; X86-NEXT:    sets %cl51; X86-NEXT:    xorb %bl, %cl52; X86-NEXT:    testl %edx, %edx53; X86-NEXT:    setne %dl54; X86-NEXT:    testb %cl, %dl55; X86-NEXT:    cmovnel %edi, %eax56; X86-NEXT:    # kill: def $ax killed $ax killed $eax57; X86-NEXT:    popl %esi58; X86-NEXT:    popl %edi59; X86-NEXT:    popl %ebx60; X86-NEXT:    retl61  %tmp = call i16 @llvm.sdiv.fix.i16(i16 %x, i16 %y, i32 7)62  ret i16 %tmp63}64 65define i16 @func2(i8 %x, i8 %y) nounwind {66; X64-LABEL: func2:67; X64:       # %bb.0:68; X64-NEXT:    movsbl %sil, %esi69; X64-NEXT:    movsbl %dil, %ecx70; X64-NEXT:    shll $14, %ecx71; X64-NEXT:    movl %ecx, %eax72; X64-NEXT:    cltd73; X64-NEXT:    idivl %esi74; X64-NEXT:    # kill: def $eax killed $eax def $rax75; X64-NEXT:    leal -1(%rax), %edi76; X64-NEXT:    testl %esi, %esi77; X64-NEXT:    sets %sil78; X64-NEXT:    testl %ecx, %ecx79; X64-NEXT:    sets %cl80; X64-NEXT:    xorb %sil, %cl81; X64-NEXT:    testl %edx, %edx82; X64-NEXT:    setne %dl83; X64-NEXT:    testb %cl, %dl84; X64-NEXT:    cmovel %eax, %edi85; X64-NEXT:    addl %edi, %edi86; X64-NEXT:    movswl %di, %eax87; X64-NEXT:    shrl %eax88; X64-NEXT:    # kill: def $ax killed $ax killed $eax89; X64-NEXT:    retq90;91; X86-LABEL: func2:92; X86:       # %bb.0:93; X86-NEXT:    pushl %ebx94; X86-NEXT:    pushl %edi95; X86-NEXT:    pushl %esi96; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %edi97; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %ecx98; X86-NEXT:    shll $14, %ecx99; X86-NEXT:    movl %ecx, %eax100; X86-NEXT:    cltd101; X86-NEXT:    idivl %edi102; X86-NEXT:    leal -1(%eax), %esi103; X86-NEXT:    testl %edi, %edi104; X86-NEXT:    sets %bl105; X86-NEXT:    testl %ecx, %ecx106; X86-NEXT:    sets %cl107; X86-NEXT:    xorb %bl, %cl108; X86-NEXT:    testl %edx, %edx109; X86-NEXT:    setne %dl110; X86-NEXT:    testb %cl, %dl111; X86-NEXT:    cmovel %eax, %esi112; X86-NEXT:    addl %esi, %esi113; X86-NEXT:    movswl %si, %eax114; X86-NEXT:    shrl %eax115; X86-NEXT:    # kill: def $ax killed $ax killed $eax116; X86-NEXT:    popl %esi117; X86-NEXT:    popl %edi118; X86-NEXT:    popl %ebx119; X86-NEXT:    retl120  %x2 = sext i8 %x to i15121  %y2 = sext i8 %y to i15122  %tmp = call i15 @llvm.sdiv.fix.i15(i15 %x2, i15 %y2, i32 14)123  %tmp2 = sext i15 %tmp to i16124  ret i16 %tmp2125}126 127define i16 @func3(i15 %x, i8 %y) nounwind {128; X64-LABEL: func3:129; X64:       # %bb.0:130; X64-NEXT:    shll $8, %esi131; X64-NEXT:    movswl %si, %ecx132; X64-NEXT:    addl %edi, %edi133; X64-NEXT:    shrl $4, %ecx134; X64-NEXT:    movl %edi, %eax135; X64-NEXT:    cwtd136; X64-NEXT:    idivw %cx137; X64-NEXT:    # kill: def $ax killed $ax def $rax138; X64-NEXT:    leal -1(%rax), %esi139; X64-NEXT:    testw %di, %di140; X64-NEXT:    sets %dil141; X64-NEXT:    testw %cx, %cx142; X64-NEXT:    sets %cl143; X64-NEXT:    xorb %dil, %cl144; X64-NEXT:    testw %dx, %dx145; X64-NEXT:    setne %dl146; X64-NEXT:    testb %cl, %dl147; X64-NEXT:    cmovel %eax, %esi148; X64-NEXT:    addl %esi, %esi149; X64-NEXT:    movswl %si, %eax150; X64-NEXT:    shrl %eax151; X64-NEXT:    # kill: def $ax killed $ax killed $eax152; X64-NEXT:    retq153;154; X86-LABEL: func3:155; X86:       # %bb.0:156; X86-NEXT:    pushl %edi157; X86-NEXT:    pushl %esi158; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx159; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax160; X86-NEXT:    shll $8, %eax161; X86-NEXT:    movswl %ax, %esi162; X86-NEXT:    addl %ecx, %ecx163; X86-NEXT:    shrl $4, %esi164; X86-NEXT:    movl %ecx, %eax165; X86-NEXT:    cwtd166; X86-NEXT:    idivw %si167; X86-NEXT:    # kill: def $ax killed $ax def $eax168; X86-NEXT:    leal -1(%eax), %edi169; X86-NEXT:    testw %cx, %cx170; X86-NEXT:    sets %cl171; X86-NEXT:    testw %si, %si172; X86-NEXT:    sets %ch173; X86-NEXT:    xorb %cl, %ch174; X86-NEXT:    testw %dx, %dx175; X86-NEXT:    setne %cl176; X86-NEXT:    testb %ch, %cl177; X86-NEXT:    cmovel %eax, %edi178; X86-NEXT:    addl %edi, %edi179; X86-NEXT:    movswl %di, %eax180; X86-NEXT:    shrl %eax181; X86-NEXT:    # kill: def $ax killed $ax killed $eax182; X86-NEXT:    popl %esi183; X86-NEXT:    popl %edi184; X86-NEXT:    retl185  %y2 = sext i8 %y to i15186  %y3 = shl i15 %y2, 7187  %tmp = call i15 @llvm.sdiv.fix.i15(i15 %x, i15 %y3, i32 4)188  %tmp2 = sext i15 %tmp to i16189  ret i16 %tmp2190}191 192define i4 @func4(i4 %x, i4 %y) nounwind {193; X64-LABEL: func4:194; X64:       # %bb.0:195; X64-NEXT:    shlb $4, %sil196; X64-NEXT:    sarb $4, %sil197; X64-NEXT:    shlb $4, %dil198; X64-NEXT:    sarb $4, %dil199; X64-NEXT:    shlb $2, %dil200; X64-NEXT:    movsbl %dil, %ecx201; X64-NEXT:    movl %ecx, %eax202; X64-NEXT:    idivb %sil203; X64-NEXT:    movsbl %ah, %edx204; X64-NEXT:    movzbl %al, %edi205; X64-NEXT:    leal -1(%rdi), %eax206; X64-NEXT:    movzbl %al, %eax207; X64-NEXT:    testb %sil, %sil208; X64-NEXT:    sets %sil209; X64-NEXT:    testb %cl, %cl210; X64-NEXT:    sets %cl211; X64-NEXT:    xorb %sil, %cl212; X64-NEXT:    testb %dl, %dl213; X64-NEXT:    setne %dl214; X64-NEXT:    testb %cl, %dl215; X64-NEXT:    cmovel %edi, %eax216; X64-NEXT:    # kill: def $al killed $al killed $eax217; X64-NEXT:    retq218;219; X86-LABEL: func4:220; X86:       # %bb.0:221; X86-NEXT:    pushl %ebx222; X86-NEXT:    pushl %esi223; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx224; X86-NEXT:    shlb $4, %cl225; X86-NEXT:    sarb $4, %cl226; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %edx227; X86-NEXT:    shlb $4, %dl228; X86-NEXT:    sarb $4, %dl229; X86-NEXT:    shlb $2, %dl230; X86-NEXT:    movsbl %dl, %eax231; X86-NEXT:    idivb %cl232; X86-NEXT:    movsbl %ah, %ebx233; X86-NEXT:    movzbl %al, %esi234; X86-NEXT:    decb %al235; X86-NEXT:    movzbl %al, %eax236; X86-NEXT:    testb %cl, %cl237; X86-NEXT:    sets %cl238; X86-NEXT:    testb %dl, %dl239; X86-NEXT:    sets %dl240; X86-NEXT:    xorb %cl, %dl241; X86-NEXT:    testb %bl, %bl242; X86-NEXT:    setne %cl243; X86-NEXT:    testb %dl, %cl244; X86-NEXT:    cmovel %esi, %eax245; X86-NEXT:    # kill: def $al killed $al killed $eax246; X86-NEXT:    popl %esi247; X86-NEXT:    popl %ebx248; X86-NEXT:    retl249  %tmp = call i4 @llvm.sdiv.fix.i4(i4 %x, i4 %y, i32 2)250  ret i4 %tmp251}252 253define i64 @func5(i64 %x, i64 %y) nounwind {254; X64-LABEL: func5:255; X64:       # %bb.0:256; X64-NEXT:    pushq %rbp257; X64-NEXT:    pushq %r15258; X64-NEXT:    pushq %r14259; X64-NEXT:    pushq %r13260; X64-NEXT:    pushq %r12261; X64-NEXT:    pushq %rbx262; X64-NEXT:    pushq %rax263; X64-NEXT:    movq %rsi, %rbx264; X64-NEXT:    movq %rdi, %r14265; X64-NEXT:    movq %rdi, %r15266; X64-NEXT:    sarq $63, %r15267; X64-NEXT:    shldq $31, %rdi, %r15268; X64-NEXT:    shlq $31, %r14269; X64-NEXT:    movq %rsi, %r12270; X64-NEXT:    sarq $63, %r12271; X64-NEXT:    movq %r14, %rdi272; X64-NEXT:    movq %r15, %rsi273; X64-NEXT:    movq %rbx, %rdx274; X64-NEXT:    movq %r12, %rcx275; X64-NEXT:    callq __divti3@PLT276; X64-NEXT:    movq %rax, (%rsp) # 8-byte Spill277; X64-NEXT:    leaq -1(%rax), %rbp278; X64-NEXT:    testq %r15, %r15279; X64-NEXT:    sets %al280; X64-NEXT:    testq %r12, %r12281; X64-NEXT:    sets %r13b282; X64-NEXT:    xorb %al, %r13b283; X64-NEXT:    movq %r14, %rdi284; X64-NEXT:    movq %r15, %rsi285; X64-NEXT:    movq %rbx, %rdx286; X64-NEXT:    movq %r12, %rcx287; X64-NEXT:    callq __modti3@PLT288; X64-NEXT:    orq %rax, %rdx289; X64-NEXT:    setne %al290; X64-NEXT:    testb %r13b, %al291; X64-NEXT:    cmoveq (%rsp), %rbp # 8-byte Folded Reload292; X64-NEXT:    movq %rbp, %rax293; X64-NEXT:    addq $8, %rsp294; X64-NEXT:    popq %rbx295; X64-NEXT:    popq %r12296; X64-NEXT:    popq %r13297; X64-NEXT:    popq %r14298; X64-NEXT:    popq %r15299; X64-NEXT:    popq %rbp300; X64-NEXT:    retq301;302; X86-LABEL: func5:303; X86:       # %bb.0:304; X86-NEXT:    pushl %ebp305; X86-NEXT:    movl %esp, %ebp306; X86-NEXT:    pushl %ebx307; X86-NEXT:    pushl %edi308; X86-NEXT:    pushl %esi309; X86-NEXT:    andl $-16, %esp310; X86-NEXT:    subl $112, %esp311; X86-NEXT:    movl 8(%ebp), %ecx312; X86-NEXT:    movl 12(%ebp), %edi313; X86-NEXT:    movl 16(%ebp), %eax314; X86-NEXT:    movl 20(%ebp), %edx315; X86-NEXT:    movl %edx, %ebx316; X86-NEXT:    sarl $31, %ebx317; X86-NEXT:    movl %ebx, {{[0-9]+}}(%esp)318; X86-NEXT:    movl %ebx, {{[0-9]+}}(%esp)319; X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)320; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)321; X86-NEXT:    movl %edi, %esi322; X86-NEXT:    sarl $31, %esi323; X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)324; X86-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill325; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax326; X86-NEXT:    movl %eax, (%esp)327; X86-NEXT:    shldl $31, %edi, %esi328; X86-NEXT:    shldl $31, %ecx, %edi329; X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)330; X86-NEXT:    shll $31, %ecx331; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill332; X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)333; X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)334; X86-NEXT:    calll __divti3335; X86-NEXT:    subl $4, %esp336; X86-NEXT:    movl 20(%ebp), %eax337; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)338; X86-NEXT:    movl 16(%ebp), %eax339; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)340; X86-NEXT:    movl %ebx, {{[0-9]+}}(%esp)341; X86-NEXT:    movl %ebx, {{[0-9]+}}(%esp)342; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload343; X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)344; X86-NEXT:    movl %edi, {{[0-9]+}}(%esp)345; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload346; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)347; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax348; X86-NEXT:    movl %eax, (%esp)349; X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)350; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi351; X86-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill352; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi353; X86-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill354; X86-NEXT:    subl $1, %esi355; X86-NEXT:    sbbl $0, %edi356; X86-NEXT:    testl %ebx, %ebx357; X86-NEXT:    sets %al358; X86-NEXT:    testl %ecx, %ecx359; X86-NEXT:    sets %bl360; X86-NEXT:    xorb %al, %bl361; X86-NEXT:    calll __modti3362; X86-NEXT:    subl $4, %esp363; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax364; X86-NEXT:    orl {{[0-9]+}}(%esp), %eax365; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx366; X86-NEXT:    orl {{[0-9]+}}(%esp), %ecx367; X86-NEXT:    orl %eax, %ecx368; X86-NEXT:    setne %al369; X86-NEXT:    testb %bl, %al370; X86-NEXT:    cmovel {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload371; X86-NEXT:    cmovel {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload372; X86-NEXT:    movl %esi, %eax373; X86-NEXT:    movl %edi, %edx374; X86-NEXT:    leal -12(%ebp), %esp375; X86-NEXT:    popl %esi376; X86-NEXT:    popl %edi377; X86-NEXT:    popl %ebx378; X86-NEXT:    popl %ebp379; X86-NEXT:    retl380  %tmp = call i64 @llvm.sdiv.fix.i64(i64 %x, i64 %y, i32 31)381  ret i64 %tmp382}383 384define i18 @func6(i16 %x, i16 %y) nounwind {385; X64-LABEL: func6:386; X64:       # %bb.0:387; X64-NEXT:    movswl %di, %ecx388; X64-NEXT:    movswl %si, %esi389; X64-NEXT:    shll $7, %ecx390; X64-NEXT:    movl %ecx, %eax391; X64-NEXT:    cltd392; X64-NEXT:    idivl %esi393; X64-NEXT:    # kill: def $eax killed $eax def $rax394; X64-NEXT:    leal -1(%rax), %edi395; X64-NEXT:    testl %esi, %esi396; X64-NEXT:    sets %sil397; X64-NEXT:    testl %ecx, %ecx398; X64-NEXT:    sets %cl399; X64-NEXT:    xorb %sil, %cl400; X64-NEXT:    testl %edx, %edx401; X64-NEXT:    setne %dl402; X64-NEXT:    testb %cl, %dl403; X64-NEXT:    cmovnel %edi, %eax404; X64-NEXT:    # kill: def $eax killed $eax killed $rax405; X64-NEXT:    retq406;407; X86-LABEL: func6:408; X86:       # %bb.0:409; X86-NEXT:    pushl %ebx410; X86-NEXT:    pushl %edi411; X86-NEXT:    pushl %esi412; X86-NEXT:    movswl {{[0-9]+}}(%esp), %esi413; X86-NEXT:    movswl {{[0-9]+}}(%esp), %ecx414; X86-NEXT:    shll $7, %ecx415; X86-NEXT:    movl %ecx, %eax416; X86-NEXT:    cltd417; X86-NEXT:    idivl %esi418; X86-NEXT:    leal -1(%eax), %edi419; X86-NEXT:    testl %esi, %esi420; X86-NEXT:    sets %bl421; X86-NEXT:    testl %ecx, %ecx422; X86-NEXT:    sets %cl423; X86-NEXT:    xorb %bl, %cl424; X86-NEXT:    testl %edx, %edx425; X86-NEXT:    setne %dl426; X86-NEXT:    testb %cl, %dl427; X86-NEXT:    cmovnel %edi, %eax428; X86-NEXT:    popl %esi429; X86-NEXT:    popl %edi430; X86-NEXT:    popl %ebx431; X86-NEXT:    retl432  %x2 = sext i16 %x to i18433  %y2 = sext i16 %y to i18434  %tmp = call i18 @llvm.sdiv.fix.i18(i18 %x2, i18 %y2, i32 7)435  ret i18 %tmp436}437 438define <4 x i32> @vec(<4 x i32> %x, <4 x i32> %y) nounwind {439; X64-LABEL: vec:440; X64:       # %bb.0:441; X64-NEXT:    pxor %xmm2, %xmm2442; X64-NEXT:    pcmpgtd %xmm1, %xmm2443; X64-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[2,3,2,3]444; X64-NEXT:    movdqa %xmm1, %xmm3445; X64-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]446; X64-NEXT:    movq %xmm3, %rcx447; X64-NEXT:    pxor %xmm5, %xmm5448; X64-NEXT:    pcmpgtd %xmm0, %xmm5449; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]450; X64-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]451; X64-NEXT:    psllq $31, %xmm0452; X64-NEXT:    movq %xmm0, %rax453; X64-NEXT:    cqto454; X64-NEXT:    idivq %rcx455; X64-NEXT:    movq %rax, %rsi456; X64-NEXT:    movq %rdx, %r8457; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]458; X64-NEXT:    movq %xmm3, %rcx459; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]460; X64-NEXT:    movq %xmm3, %rax461; X64-NEXT:    cqto462; X64-NEXT:    idivq %rcx463; X64-NEXT:    movq %rax, %rdi464; X64-NEXT:    movq %rdx, %r10465; X64-NEXT:    pxor %xmm3, %xmm3466; X64-NEXT:    pcmpgtd %xmm4, %xmm3467; X64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]468; X64-NEXT:    movq %xmm4, %rcx469; X64-NEXT:    pxor %xmm5, %xmm5470; X64-NEXT:    pcmpgtd %xmm1, %xmm5471; X64-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1]472; X64-NEXT:    psllq $31, %xmm1473; X64-NEXT:    movq %xmm1, %rax474; X64-NEXT:    cqto475; X64-NEXT:    idivq %rcx476; X64-NEXT:    movq %rax, %rcx477; X64-NEXT:    movq %rdx, %r9478; X64-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]479; X64-NEXT:    movq %xmm4, %r11480; X64-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[2,3,2,3]481; X64-NEXT:    movq %xmm4, %rax482; X64-NEXT:    cqto483; X64-NEXT:    idivq %r11484; X64-NEXT:    movq %r8, %xmm5485; X64-NEXT:    movq %r10, %xmm6486; X64-NEXT:    pxor %xmm4, %xmm4487; X64-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]488; X64-NEXT:    pcmpeqd %xmm4, %xmm5489; X64-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,0,3,2]490; X64-NEXT:    pand %xmm5, %xmm6491; X64-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]492; X64-NEXT:    pxor %xmm5, %xmm5493; X64-NEXT:    pcmpgtd %xmm2, %xmm5494; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]495; X64-NEXT:    pxor %xmm2, %xmm2496; X64-NEXT:    pcmpgtd %xmm0, %xmm2497; X64-NEXT:    movq %rsi, %xmm0498; X64-NEXT:    pxor %xmm5, %xmm2499; X64-NEXT:    movq %rdi, %xmm5500; X64-NEXT:    pandn %xmm2, %xmm6501; X64-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]502; X64-NEXT:    movdqa %xmm6, %xmm5503; X64-NEXT:    pandn %xmm0, %xmm5504; X64-NEXT:    pcmpeqd %xmm2, %xmm2505; X64-NEXT:    paddq %xmm2, %xmm0506; X64-NEXT:    pand %xmm6, %xmm0507; X64-NEXT:    por %xmm5, %xmm0508; X64-NEXT:    movq %r9, %xmm5509; X64-NEXT:    movq %rdx, %xmm6510; X64-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]511; X64-NEXT:    pcmpeqd %xmm4, %xmm5512; X64-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,0,3,2]513; X64-NEXT:    pand %xmm5, %xmm6514; X64-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]515; X64-NEXT:    pxor %xmm5, %xmm5516; X64-NEXT:    pcmpgtd %xmm3, %xmm5517; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]518; X64-NEXT:    pcmpgtd %xmm1, %xmm4519; X64-NEXT:    pxor %xmm5, %xmm4520; X64-NEXT:    pandn %xmm4, %xmm6521; X64-NEXT:    movq %rcx, %xmm1522; X64-NEXT:    movq %rax, %xmm3523; X64-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]524; X64-NEXT:    movdqa %xmm6, %xmm3525; X64-NEXT:    pandn %xmm1, %xmm3526; X64-NEXT:    paddq %xmm2, %xmm1527; X64-NEXT:    pand %xmm6, %xmm1528; X64-NEXT:    por %xmm3, %xmm1529; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]530; X64-NEXT:    retq531;532; X86-LABEL: vec:533; X86:       # %bb.0:534; X86-NEXT:    pushl %ebp535; X86-NEXT:    pushl %ebx536; X86-NEXT:    pushl %edi537; X86-NEXT:    pushl %esi538; X86-NEXT:    subl $60, %esp539; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx540; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi541; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx542; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi543; X86-NEXT:    movl %esi, %ebp544; X86-NEXT:    sarl $31, %ebp545; X86-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill546; X86-NEXT:    movl %ecx, %edx547; X86-NEXT:    shll $31, %edx548; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill549; X86-NEXT:    movl %ecx, %eax550; X86-NEXT:    shrl $31, %eax551; X86-NEXT:    shldl $31, %ecx, %eax552; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill553; X86-NEXT:    pushl %ebp554; X86-NEXT:    pushl %esi555; X86-NEXT:    pushl %eax556; X86-NEXT:    pushl %edx557; X86-NEXT:    calll __divdi3558; X86-NEXT:    addl $16, %esp559; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill560; X86-NEXT:    movl %edi, %eax561; X86-NEXT:    sarl $31, %eax562; X86-NEXT:    movl %ebx, %ebp563; X86-NEXT:    shll $31, %ebp564; X86-NEXT:    movl %ebx, %ecx565; X86-NEXT:    shrl $31, %ecx566; X86-NEXT:    shldl $31, %ebx, %ecx567; X86-NEXT:    pushl %eax568; X86-NEXT:    movl %eax, %esi569; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill570; X86-NEXT:    pushl %edi571; X86-NEXT:    pushl %ecx572; X86-NEXT:    movl %ecx, %ebx573; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill574; X86-NEXT:    pushl %ebp575; X86-NEXT:    calll __moddi3576; X86-NEXT:    addl $16, %esp577; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill578; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill579; X86-NEXT:    pushl %esi580; X86-NEXT:    pushl %edi581; X86-NEXT:    pushl %ebx582; X86-NEXT:    pushl %ebp583; X86-NEXT:    calll __divdi3584; X86-NEXT:    addl $16, %esp585; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill586; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax587; X86-NEXT:    movl %eax, %ecx588; X86-NEXT:    sarl $31, %ecx589; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx590; X86-NEXT:    movl %edx, %ebx591; X86-NEXT:    shll $31, %ebx592; X86-NEXT:    movl %edx, %edi593; X86-NEXT:    shrl $31, %edi594; X86-NEXT:    shldl $31, %edx, %edi595; X86-NEXT:    pushl %ecx596; X86-NEXT:    movl %ecx, %ebp597; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill598; X86-NEXT:    pushl %eax599; X86-NEXT:    movl %eax, %esi600; X86-NEXT:    pushl %edi601; X86-NEXT:    pushl %ebx602; X86-NEXT:    calll __moddi3603; X86-NEXT:    addl $16, %esp604; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill605; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill606; X86-NEXT:    pushl %ebp607; X86-NEXT:    pushl %esi608; X86-NEXT:    pushl %edi609; X86-NEXT:    pushl %ebx610; X86-NEXT:    calll __divdi3611; X86-NEXT:    addl $16, %esp612; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill613; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax614; X86-NEXT:    movl %eax, %ebx615; X86-NEXT:    sarl $31, %ebx616; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx617; X86-NEXT:    movl %ecx, %esi618; X86-NEXT:    shll $31, %esi619; X86-NEXT:    movl %ecx, %ebp620; X86-NEXT:    shrl $31, %ebp621; X86-NEXT:    shldl $31, %ecx, %ebp622; X86-NEXT:    pushl %ebx623; X86-NEXT:    pushl %eax624; X86-NEXT:    pushl %ebp625; X86-NEXT:    pushl %esi626; X86-NEXT:    calll __moddi3627; X86-NEXT:    addl $16, %esp628; X86-NEXT:    movl %eax, (%esp) # 4-byte Spill629; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill630; X86-NEXT:    pushl %ebx631; X86-NEXT:    pushl {{[0-9]+}}(%esp)632; X86-NEXT:    pushl %ebp633; X86-NEXT:    pushl %esi634; X86-NEXT:    calll __divdi3635; X86-NEXT:    addl $16, %esp636; X86-NEXT:    testl %ebp, %ebp637; X86-NEXT:    sets %cl638; X86-NEXT:    testl %ebx, %ebx639; X86-NEXT:    sets %dl640; X86-NEXT:    xorb %cl, %dl641; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload642; X86-NEXT:    orl (%esp), %ecx # 4-byte Folded Reload643; X86-NEXT:    setne %cl644; X86-NEXT:    testb %dl, %cl645; X86-NEXT:    leal -1(%eax), %ecx646; X86-NEXT:    cmovel %eax, %ecx647; X86-NEXT:    movl %ecx, (%esp) # 4-byte Spill648; X86-NEXT:    testl %edi, %edi649; X86-NEXT:    sets %al650; X86-NEXT:    cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload651; X86-NEXT:    sets %cl652; X86-NEXT:    xorb %al, %cl653; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload654; X86-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload655; X86-NEXT:    setne %al656; X86-NEXT:    testb %cl, %al657; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload658; X86-NEXT:    leal -1(%eax), %ecx659; X86-NEXT:    cmovel %eax, %ecx660; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill661; X86-NEXT:    cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload662; X86-NEXT:    sets %al663; X86-NEXT:    cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload664; X86-NEXT:    sets %cl665; X86-NEXT:    xorb %al, %cl666; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload667; X86-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload668; X86-NEXT:    setne %al669; X86-NEXT:    testb %cl, %al670; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload671; X86-NEXT:    leal -1(%eax), %ebp672; X86-NEXT:    cmovel %eax, %ebp673; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload674; X86-NEXT:    testl %edx, %edx675; X86-NEXT:    sets %al676; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload677; X86-NEXT:    testl %ecx, %ecx678; X86-NEXT:    sets %bl679; X86-NEXT:    xorb %al, %bl680; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload681; X86-NEXT:    leal -1(%edi), %esi682; X86-NEXT:    pushl %ecx683; X86-NEXT:    pushl {{[0-9]+}}(%esp)684; X86-NEXT:    pushl %edx685; X86-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload686; X86-NEXT:    calll __moddi3687; X86-NEXT:    addl $16, %esp688; X86-NEXT:    orl %eax, %edx689; X86-NEXT:    setne %al690; X86-NEXT:    testb %bl, %al691; X86-NEXT:    cmovel %edi, %esi692; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax693; X86-NEXT:    movl %esi, 12(%eax)694; X86-NEXT:    movl %ebp, 8(%eax)695; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload696; X86-NEXT:    movl %ecx, 4(%eax)697; X86-NEXT:    movl (%esp), %ecx # 4-byte Reload698; X86-NEXT:    movl %ecx, (%eax)699; X86-NEXT:    addl $60, %esp700; X86-NEXT:    popl %esi701; X86-NEXT:    popl %edi702; X86-NEXT:    popl %ebx703; X86-NEXT:    popl %ebp704; X86-NEXT:    retl $4705  %tmp = call <4 x i32> @llvm.sdiv.fix.v4i32(<4 x i32> %x, <4 x i32> %y, i32 31)706  ret <4 x i32> %tmp707}708