[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / h-registers-3.ll
blob564b1e8e15b23f11b9503194daaf8a0e91174bc4
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu   | FileCheck %s -check-prefix=X86
3 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s -check-prefix=X64
4 ; RUN: llc < %s -mtriple=x86_64-linux-gnux32      | FileCheck %s -check-prefix=X32
6 define zeroext i8 @foo() nounwind ssp {
7 ; X86-LABEL: foo:
8 ; X86:       # %bb.0: # %entry
9 ; X86-NEXT:    subl $12, %esp
10 ; X86-NEXT:    calll bar
11 ; X86-NEXT:    movb %ah, %al
12 ; X86-NEXT:    addl $12, %esp
13 ; X86-NEXT:    retl
15 ; X64-LABEL: foo:
16 ; X64:       # %bb.0: # %entry
17 ; X64-NEXT:    pushq %rax
18 ; X64-NEXT:    xorl %eax, %eax
19 ; X64-NEXT:    callq bar
20 ; X64-NEXT:    # kill: def $ax killed $ax def $eax
21 ; X64-NEXT:    shrl $8, %eax
22 ; X64-NEXT:    # kill: def $al killed $al killed $eax
23 ; X64-NEXT:    popq %rcx
24 ; X64-NEXT:    retq
26 ; X32-LABEL: foo:
27 ; X32:       # %bb.0: # %entry
28 ; X32-NEXT:    pushq %rax
29 ; X32-NEXT:    xorl %eax, %eax
30 ; X32-NEXT:    callq bar
31 ; X32-NEXT:    # kill: def $ax killed $ax def $eax
32 ; X32-NEXT:    shrl $8, %eax
33 ; X32-NEXT:    # kill: def $al killed $al killed $eax
34 ; X32-NEXT:    popq %rcx
35 ; X32-NEXT:    retq
36 entry:
37   %0 = tail call zeroext i16 (...) @bar() nounwind
38   %1 = lshr i16 %0, 8
39   %2 = trunc i16 %1 to i8
40   ret i8 %2
46 declare zeroext i16 @bar(...)