brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 5baf7a1 Raw
180 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686 -mattr=cmov | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X644 5declare i4 @llvm.ssub.sat.i4(i4, i4)6declare i8 @llvm.ssub.sat.i8(i8, i8)7declare i16 @llvm.ssub.sat.i16(i16, i16)8declare i32 @llvm.ssub.sat.i32(i32, i32)9declare i64 @llvm.ssub.sat.i64(i64, i64)10 11define i32 @func32(i32 %x, i32 %y, i32 %z) nounwind {12; X86-LABEL: func32:13; X86:       # %bb.0:14; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax15; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx16; X86-NEXT:    imull {{[0-9]+}}(%esp), %edx17; X86-NEXT:    xorl %ecx, %ecx18; X86-NEXT:    cmpl %edx, %eax19; X86-NEXT:    setns %cl20; X86-NEXT:    addl $2147483647, %ecx # imm = 0x7FFFFFFF21; X86-NEXT:    subl %edx, %eax22; X86-NEXT:    cmovol %ecx, %eax23; X86-NEXT:    retl24;25; X64-LABEL: func32:26; X64:       # %bb.0:27; X64-NEXT:    imull %edx, %esi28; X64-NEXT:    xorl %eax, %eax29; X64-NEXT:    cmpl %esi, %edi30; X64-NEXT:    setns %al31; X64-NEXT:    addl $2147483647, %eax # imm = 0x7FFFFFFF32; X64-NEXT:    subl %esi, %edi33; X64-NEXT:    cmovnol %edi, %eax34; X64-NEXT:    retq35  %a = mul i32 %y, %z36  %tmp = call i32 @llvm.ssub.sat.i32(i32 %x, i32 %a)37  ret i32 %tmp38}39 40define i64 @func64(i64 %x, i64 %y, i64 %z) nounwind {41; X86-LABEL: func64:42; X86:       # %bb.0:43; X86-NEXT:    pushl %ebx44; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax45; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx46; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax47; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx48; X86-NEXT:    seto %bl49; X86-NEXT:    movl %ecx, %edx50; X86-NEXT:    sarl $31, %edx51; X86-NEXT:    testb %bl, %bl52; X86-NEXT:    cmovnel %edx, %eax53; X86-NEXT:    addl $-2147483648, %edx # imm = 0x8000000054; X86-NEXT:    testb %bl, %bl55; X86-NEXT:    cmovel %ecx, %edx56; X86-NEXT:    popl %ebx57; X86-NEXT:    retl58;59; X64-LABEL: func64:60; X64:       # %bb.0:61; X64-NEXT:    xorl %ecx, %ecx62; X64-NEXT:    cmpq %rdx, %rdi63; X64-NEXT:    setns %cl64; X64-NEXT:    movabsq $9223372036854775807, %rax # imm = 0x7FFFFFFFFFFFFFFF65; X64-NEXT:    addq %rcx, %rax66; X64-NEXT:    subq %rdx, %rdi67; X64-NEXT:    cmovnoq %rdi, %rax68; X64-NEXT:    retq69  %a = mul i64 %y, %z70  %tmp = call i64 @llvm.ssub.sat.i64(i64 %x, i64 %z)71  ret i64 %tmp72}73 74define signext i16 @func16(i16 signext %x, i16 signext %y, i16 signext %z) nounwind {75; X86-LABEL: func16:76; X86:       # %bb.0:77; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax78; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %edx79; X86-NEXT:    imulw {{[0-9]+}}(%esp), %dx80; X86-NEXT:    xorl %ecx, %ecx81; X86-NEXT:    cmpw %dx, %ax82; X86-NEXT:    setns %cl83; X86-NEXT:    addl $32767, %ecx # imm = 0x7FFF84; X86-NEXT:    subw %dx, %ax85; X86-NEXT:    cmovol %ecx, %eax86; X86-NEXT:    # kill: def $ax killed $ax killed $eax87; X86-NEXT:    retl88;89; X64-LABEL: func16:90; X64:       # %bb.0:91; X64-NEXT:    imull %edx, %esi92; X64-NEXT:    xorl %eax, %eax93; X64-NEXT:    cmpw %si, %di94; X64-NEXT:    setns %al95; X64-NEXT:    addl $32767, %eax # imm = 0x7FFF96; X64-NEXT:    subw %si, %di97; X64-NEXT:    cmovnol %edi, %eax98; X64-NEXT:    # kill: def $ax killed $ax killed $eax99; X64-NEXT:    retq100  %a = mul i16 %y, %z101  %tmp = call i16 @llvm.ssub.sat.i16(i16 %x, i16 %a)102  ret i16 %tmp103}104 105define signext i8 @func8(i8 signext %x, i8 signext %y, i8 signext %z) nounwind {106; X86-LABEL: func8:107; X86:       # %bb.0:108; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %edx109; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax110; X86-NEXT:    mulb {{[0-9]+}}(%esp)111; X86-NEXT:    xorl %ecx, %ecx112; X86-NEXT:    cmpb %al, %dl113; X86-NEXT:    setns %cl114; X86-NEXT:    addl $127, %ecx115; X86-NEXT:    subb %al, %dl116; X86-NEXT:    movzbl %dl, %eax117; X86-NEXT:    cmovol %ecx, %eax118; X86-NEXT:    # kill: def $al killed $al killed $eax119; X86-NEXT:    retl120;121; X64-LABEL: func8:122; X64:       # %bb.0:123; X64-NEXT:    movl %esi, %eax124; X64-NEXT:    # kill: def $al killed $al killed $eax125; X64-NEXT:    mulb %dl126; X64-NEXT:    xorl %ecx, %ecx127; X64-NEXT:    cmpb %al, %dil128; X64-NEXT:    setns %cl129; X64-NEXT:    addl $127, %ecx130; X64-NEXT:    subb %al, %dil131; X64-NEXT:    movzbl %dil, %eax132; X64-NEXT:    cmovol %ecx, %eax133; X64-NEXT:    # kill: def $al killed $al killed $eax134; X64-NEXT:    retq135  %a = mul i8 %y, %z136  %tmp = call i8 @llvm.ssub.sat.i8(i8 %x, i8 %a)137  ret i8 %tmp138}139 140define signext i4 @func4(i4 signext %x, i4 signext %y, i4 signext %z) nounwind {141; X86-LABEL: func4:142; X86:       # %bb.0:143; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx144; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax145; X86-NEXT:    mulb {{[0-9]+}}(%esp)146; X86-NEXT:    shlb $4, %al147; X86-NEXT:    sarb $4, %al148; X86-NEXT:    subb %al, %cl149; X86-NEXT:    movzbl %cl, %eax150; X86-NEXT:    cmpb $7, %cl151; X86-NEXT:    movl $7, %ecx152; X86-NEXT:    cmovll %eax, %ecx153; X86-NEXT:    cmpb $-7, %cl154; X86-NEXT:    movl $248, %eax155; X86-NEXT:    cmovgel %ecx, %eax156; X86-NEXT:    movsbl %al, %eax157; X86-NEXT:    retl158;159; X64-LABEL: func4:160; X64:       # %bb.0:161; X64-NEXT:    movl %esi, %eax162; X64-NEXT:    # kill: def $al killed $al killed $eax163; X64-NEXT:    mulb %dl164; X64-NEXT:    shlb $4, %al165; X64-NEXT:    sarb $4, %al166; X64-NEXT:    subb %al, %dil167; X64-NEXT:    movzbl %dil, %eax168; X64-NEXT:    cmpb $7, %al169; X64-NEXT:    movl $7, %ecx170; X64-NEXT:    cmovll %eax, %ecx171; X64-NEXT:    cmpb $-7, %cl172; X64-NEXT:    movl $248, %eax173; X64-NEXT:    cmovgel %ecx, %eax174; X64-NEXT:    movsbl %al, %eax175; X64-NEXT:    retq176  %a = mul i4 %y, %z177  %tmp = call i4 @llvm.ssub.sat.i4(i4 %x, i4 %a)178  ret i4 %tmp179}180