brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.6 KiB · 82dfeee Raw
347 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.udiv.fix.i4   (i4,  i4,  i32)6declare  i15 @llvm.udiv.fix.i15  (i15, i15, i32)7declare  i16 @llvm.udiv.fix.i16  (i16, i16, i32)8declare  i18 @llvm.udiv.fix.i18  (i18, i18, i32)9declare  i64 @llvm.udiv.fix.i64  (i64, i64, i32)10declare  <4 x i32> @llvm.udiv.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:    movzwl %si, %ecx16; X64-NEXT:    movzwl %di, %eax17; X64-NEXT:    shll $7, %eax18; X64-NEXT:    xorl %edx, %edx19; X64-NEXT:    divl %ecx20; X64-NEXT:    # kill: def $ax killed $ax killed $eax21; X64-NEXT:    retq22;23; X86-LABEL: func:24; X86:       # %bb.0:25; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx26; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax27; X86-NEXT:    shll $7, %eax28; X86-NEXT:    xorl %edx, %edx29; X86-NEXT:    divl %ecx30; X86-NEXT:    # kill: def $ax killed $ax killed $eax31; X86-NEXT:    retl32  %tmp = call i16 @llvm.udiv.fix.i16(i16 %x, i16 %y, i32 7)33  ret i16 %tmp34}35 36define i16 @func2(i8 %x, i8 %y) nounwind {37; X64-LABEL: func2:38; X64:       # %bb.0:39; X64-NEXT:    movsbl %dil, %eax40; X64-NEXT:    andl $32767, %eax # imm = 0x7FFF41; X64-NEXT:    movsbl %sil, %ecx42; X64-NEXT:    andl $32767, %ecx # imm = 0x7FFF43; X64-NEXT:    shll $14, %eax44; X64-NEXT:    xorl %edx, %edx45; X64-NEXT:    divl %ecx46; X64-NEXT:    addl %eax, %eax47; X64-NEXT:    cwtl48; X64-NEXT:    shrl %eax49; X64-NEXT:    # kill: def $ax killed $ax killed $eax50; X64-NEXT:    retq51;52; X86-LABEL: func2:53; X86:       # %bb.0:54; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %ecx55; X86-NEXT:    andl $32767, %ecx # imm = 0x7FFF56; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax57; X86-NEXT:    andl $32767, %eax # imm = 0x7FFF58; X86-NEXT:    shll $14, %eax59; X86-NEXT:    xorl %edx, %edx60; X86-NEXT:    divl %ecx61; X86-NEXT:    addl %eax, %eax62; X86-NEXT:    cwtl63; X86-NEXT:    shrl %eax64; X86-NEXT:    # kill: def $ax killed $ax killed $eax65; X86-NEXT:    retl66  %x2 = sext i8 %x to i1567  %y2 = sext i8 %y to i1568  %tmp = call i15 @llvm.udiv.fix.i15(i15 %x2, i15 %y2, i32 14)69  %tmp2 = sext i15 %tmp to i1670  ret i16 %tmp271}72 73define i16 @func3(i15 %x, i8 %y) nounwind {74; X64-LABEL: func3:75; X64:       # %bb.0:76; X64-NEXT:    # kill: def $edi killed $edi def $rdi77; X64-NEXT:    leal (%rdi,%rdi), %eax78; X64-NEXT:    movzbl %sil, %ecx79; X64-NEXT:    shll $4, %ecx80; X64-NEXT:    # kill: def $ax killed $ax killed $eax81; X64-NEXT:    xorl %edx, %edx82; X64-NEXT:    divw %cx83; X64-NEXT:    # kill: def $ax killed $ax def $eax84; X64-NEXT:    addl %eax, %eax85; X64-NEXT:    cwtl86; X64-NEXT:    shrl %eax87; X64-NEXT:    # kill: def $ax killed $ax killed $eax88; X64-NEXT:    retq89;90; X86-LABEL: func3:91; X86:       # %bb.0:92; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax93; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx94; X86-NEXT:    addl %eax, %eax95; X86-NEXT:    movzbl %cl, %ecx96; X86-NEXT:    shll $4, %ecx97; X86-NEXT:    # kill: def $ax killed $ax killed $eax98; X86-NEXT:    xorl %edx, %edx99; X86-NEXT:    divw %cx100; X86-NEXT:    # kill: def $ax killed $ax def $eax101; X86-NEXT:    addl %eax, %eax102; X86-NEXT:    cwtl103; X86-NEXT:    shrl %eax104; X86-NEXT:    # kill: def $ax killed $ax killed $eax105; X86-NEXT:    retl106  %y2 = sext i8 %y to i15107  %y3 = shl i15 %y2, 7108  %tmp = call i15 @llvm.udiv.fix.i15(i15 %x, i15 %y3, i32 4)109  %tmp2 = sext i15 %tmp to i16110  ret i16 %tmp2111}112 113define i4 @func4(i4 %x, i4 %y) nounwind {114; X64-LABEL: func4:115; X64:       # %bb.0:116; X64-NEXT:    andb $15, %sil117; X64-NEXT:    andb $15, %dil118; X64-NEXT:    shlb $2, %dil119; X64-NEXT:    movzbl %dil, %eax120; X64-NEXT:    divb %sil121; X64-NEXT:    retq122;123; X86-LABEL: func4:124; X86:       # %bb.0:125; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx126; X86-NEXT:    andb $15, %cl127; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax128; X86-NEXT:    andb $15, %al129; X86-NEXT:    shlb $2, %al130; X86-NEXT:    movzbl %al, %eax131; X86-NEXT:    divb %cl132; X86-NEXT:    retl133  %tmp = call i4 @llvm.udiv.fix.i4(i4 %x, i4 %y, i32 2)134  ret i4 %tmp135}136 137define i64 @func5(i64 %x, i64 %y) nounwind {138; X64-LABEL: func5:139; X64:       # %bb.0:140; X64-NEXT:    pushq %rax141; X64-NEXT:    movq %rsi, %rdx142; X64-NEXT:    movq %rdi, %rsi143; X64-NEXT:    shlq $31, %rdi144; X64-NEXT:    shrq $33, %rsi145; X64-NEXT:    xorl %ecx, %ecx146; X64-NEXT:    callq __udivti3@PLT147; X64-NEXT:    popq %rcx148; X64-NEXT:    retq149;150; X86-LABEL: func5:151; X86:       # %bb.0:152; X86-NEXT:    pushl %ebp153; X86-NEXT:    movl %esp, %ebp154; X86-NEXT:    pushl %esi155; X86-NEXT:    andl $-16, %esp156; X86-NEXT:    subl $80, %esp157; X86-NEXT:    movl 8(%ebp), %eax158; X86-NEXT:    movl 12(%ebp), %ecx159; X86-NEXT:    movl 16(%ebp), %edx160; X86-NEXT:    movl 20(%ebp), %esi161; X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)162; X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)163; X86-NEXT:    movl %ecx, %edx164; X86-NEXT:    shrl %edx165; X86-NEXT:    movl %edx, {{[0-9]+}}(%esp)166; X86-NEXT:    shldl $31, %eax, %ecx167; X86-NEXT:    movl %ecx, {{[0-9]+}}(%esp)168; X86-NEXT:    shll $31, %eax169; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)170; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax171; X86-NEXT:    movl %eax, (%esp)172; X86-NEXT:    movl $0, {{[0-9]+}}(%esp)173; X86-NEXT:    movl $0, {{[0-9]+}}(%esp)174; X86-NEXT:    movl $0, {{[0-9]+}}(%esp)175; X86-NEXT:    calll __udivti3176; X86-NEXT:    subl $4, %esp177; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax178; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx179; X86-NEXT:    leal -4(%ebp), %esp180; X86-NEXT:    popl %esi181; X86-NEXT:    popl %ebp182; X86-NEXT:    retl183  %tmp = call i64 @llvm.udiv.fix.i64(i64 %x, i64 %y, i32 31)184  ret i64 %tmp185}186 187define i18 @func6(i16 %x, i16 %y) nounwind {188; X64-LABEL: func6:189; X64:       # %bb.0:190; X64-NEXT:    movswl %di, %eax191; X64-NEXT:    andl $262143, %eax # imm = 0x3FFFF192; X64-NEXT:    movswl %si, %ecx193; X64-NEXT:    andl $262143, %ecx # imm = 0x3FFFF194; X64-NEXT:    shll $7, %eax195; X64-NEXT:    xorl %edx, %edx196; X64-NEXT:    divl %ecx197; X64-NEXT:    retq198;199; X86-LABEL: func6:200; X86:       # %bb.0:201; X86-NEXT:    movswl {{[0-9]+}}(%esp), %ecx202; X86-NEXT:    andl $262143, %ecx # imm = 0x3FFFF203; X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax204; X86-NEXT:    andl $262143, %eax # imm = 0x3FFFF205; X86-NEXT:    shll $7, %eax206; X86-NEXT:    xorl %edx, %edx207; X86-NEXT:    divl %ecx208; X86-NEXT:    retl209  %x2 = sext i16 %x to i18210  %y2 = sext i16 %y to i18211  %tmp = call i18 @llvm.udiv.fix.i18(i18 %x2, i18 %y2, i32 7)212  ret i18 %tmp213}214 215define i16 @func7(i16 %x, i16 %y) nounwind {216; X64-LABEL: func7:217; X64:       # %bb.0:218; X64-NEXT:    movl %edi, %eax219; X64-NEXT:    shll $16, %eax220; X64-NEXT:    movzwl %si, %ecx221; X64-NEXT:    xorl %edx, %edx222; X64-NEXT:    divl %ecx223; X64-NEXT:    # kill: def $ax killed $ax killed $eax224; X64-NEXT:    retq225;226; X86-LABEL: func7:227; X86:       # %bb.0:228; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx229; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax230; X86-NEXT:    shll $16, %eax231; X86-NEXT:    xorl %edx, %edx232; X86-NEXT:    divl %ecx233; X86-NEXT:    # kill: def $ax killed $ax killed $eax234; X86-NEXT:    retl235  %tmp = call i16 @llvm.udiv.fix.i16(i16 %x, i16 %y, i32 16)236  ret i16 %tmp237}238 239define <4 x i32> @vec(<4 x i32> %x, <4 x i32> %y) nounwind {240; X64-LABEL: vec:241; X64:       # %bb.0:242; X64-NEXT:    pxor %xmm2, %xmm2243; X64-NEXT:    movdqa %xmm1, %xmm3244; X64-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm2[2],xmm3[3],xmm2[3]245; X64-NEXT:    movq %xmm3, %rcx246; X64-NEXT:    movdqa %xmm0, %xmm4247; X64-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm2[2],xmm4[3],xmm2[3]248; X64-NEXT:    psllq $31, %xmm4249; X64-NEXT:    movq %xmm4, %rax250; X64-NEXT:    xorl %edx, %edx251; X64-NEXT:    divq %rcx252; X64-NEXT:    movq %rax, %xmm3253; X64-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]254; X64-NEXT:    movq %xmm4, %rax255; X64-NEXT:    movdqa %xmm1, %xmm4256; X64-NEXT:    psrldq {{.*#+}} xmm4 = xmm4[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero257; X64-NEXT:    movq %xmm4, %rcx258; X64-NEXT:    xorl %edx, %edx259; X64-NEXT:    divq %rcx260; X64-NEXT:    movq %rax, %xmm4261; X64-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]262; X64-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]263; X64-NEXT:    psllq $31, %xmm0264; X64-NEXT:    movq %xmm0, %rax265; X64-NEXT:    movd %xmm1, %ecx266; X64-NEXT:    xorl %edx, %edx267; X64-NEXT:    divq %rcx268; X64-NEXT:    movq %rax, %xmm2269; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]270; X64-NEXT:    movq %xmm0, %rax271; X64-NEXT:    psrlq $32, %xmm1272; X64-NEXT:    movq %xmm1, %rcx273; X64-NEXT:    xorl %edx, %edx274; X64-NEXT:    divq %rcx275; X64-NEXT:    movq %rax, %xmm0276; X64-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]277; X64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]278; X64-NEXT:    movaps %xmm2, %xmm0279; X64-NEXT:    retq280;281; X86-LABEL: vec:282; X86:       # %bb.0:283; X86-NEXT:    pushl %ebp284; X86-NEXT:    pushl %ebx285; X86-NEXT:    pushl %edi286; X86-NEXT:    pushl %esi287; X86-NEXT:    pushl %eax288; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi289; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi290; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp291; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx292; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax293; X86-NEXT:    movl %eax, %ecx294; X86-NEXT:    shrl %ecx295; X86-NEXT:    shll $31, %eax296; X86-NEXT:    pushl $0297; X86-NEXT:    pushl {{[0-9]+}}(%esp)298; X86-NEXT:    pushl %ecx299; X86-NEXT:    pushl %eax300; X86-NEXT:    calll __udivdi3301; X86-NEXT:    addl $16, %esp302; X86-NEXT:    movl %eax, (%esp) # 4-byte Spill303; X86-NEXT:    movl %ebx, %eax304; X86-NEXT:    shrl %eax305; X86-NEXT:    shll $31, %ebx306; X86-NEXT:    pushl $0307; X86-NEXT:    pushl {{[0-9]+}}(%esp)308; X86-NEXT:    pushl %eax309; X86-NEXT:    pushl %ebx310; X86-NEXT:    calll __udivdi3311; X86-NEXT:    addl $16, %esp312; X86-NEXT:    movl %eax, %ebx313; X86-NEXT:    movl %ebp, %eax314; X86-NEXT:    shrl %eax315; X86-NEXT:    shll $31, %ebp316; X86-NEXT:    pushl $0317; X86-NEXT:    pushl {{[0-9]+}}(%esp)318; X86-NEXT:    pushl %eax319; X86-NEXT:    pushl %ebp320; X86-NEXT:    calll __udivdi3321; X86-NEXT:    addl $16, %esp322; X86-NEXT:    movl %eax, %ebp323; X86-NEXT:    movl %edi, %eax324; X86-NEXT:    shrl %eax325; X86-NEXT:    shll $31, %edi326; X86-NEXT:    pushl $0327; X86-NEXT:    pushl {{[0-9]+}}(%esp)328; X86-NEXT:    pushl %eax329; X86-NEXT:    pushl %edi330; X86-NEXT:    calll __udivdi3331; X86-NEXT:    addl $16, %esp332; X86-NEXT:    movl %eax, 12(%esi)333; X86-NEXT:    movl %ebp, 8(%esi)334; X86-NEXT:    movl %ebx, 4(%esi)335; X86-NEXT:    movl (%esp), %eax # 4-byte Reload336; X86-NEXT:    movl %eax, (%esi)337; X86-NEXT:    movl %esi, %eax338; X86-NEXT:    addl $4, %esp339; X86-NEXT:    popl %esi340; X86-NEXT:    popl %edi341; X86-NEXT:    popl %ebx342; X86-NEXT:    popl %ebp343; X86-NEXT:    retl $4344  %tmp = call <4 x i32> @llvm.udiv.fix.v4i32(<4 x i32> %x, <4 x i32> %y, i32 31)345  ret <4 x i32> %tmp346}347