[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / llround-conv.ll
blob459ae4abb2cd10c8e4917b87f9ae85a5a1c6e714
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s
4 define i32 @testmsws(float %x) {
5 ; CHECK-LABEL: testmsws:
6 ; CHECK:       # %bb.0: # %entry
7 ; CHECK-NEXT:    pushq %rax
8 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
9 ; CHECK-NEXT:    callq llroundf
10 ; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax
11 ; CHECK-NEXT:    popq %rcx
12 ; CHECK-NEXT:    .cfi_def_cfa_offset 8
13 ; CHECK-NEXT:    retq
14 entry:
15   %0 = tail call i64 @llvm.llround.f32(float %x)
16   %conv = trunc i64 %0 to i32
17   ret i32 %conv
20 define i64 @testmsxs(float %x) {
21 ; CHECK-LABEL: testmsxs:
22 ; CHECK:       # %bb.0: # %entry
23 ; CHECK-NEXT:    jmp llroundf # TAILCALL
24 entry:
25   %0 = tail call i64 @llvm.llround.f32(float %x)
26   ret i64 %0
29 define i32 @testmswd(double %x) {
30 ; CHECK-LABEL: testmswd:
31 ; CHECK:       # %bb.0: # %entry
32 ; CHECK-NEXT:    pushq %rax
33 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
34 ; CHECK-NEXT:    callq llround
35 ; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax
36 ; CHECK-NEXT:    popq %rcx
37 ; CHECK-NEXT:    .cfi_def_cfa_offset 8
38 ; CHECK-NEXT:    retq
39 entry:
40   %0 = tail call i64 @llvm.llround.f64(double %x)
41   %conv = trunc i64 %0 to i32
42   ret i32 %conv
45 define i64 @testmsxd(double %x) {
46 ; CHECK-LABEL: testmsxd:
47 ; CHECK:       # %bb.0: # %entry
48 ; CHECK-NEXT:    jmp llround # TAILCALL
49 entry:
50   %0 = tail call i64 @llvm.llround.f64(double %x)
51   ret i64 %0
54 define i32 @testmswl(x86_fp80 %x) {
55 ; CHECK-LABEL: testmswl:
56 ; CHECK:       # %bb.0: # %entry
57 ; CHECK-NEXT:    subq $24, %rsp
58 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
59 ; CHECK-NEXT:    fldt {{[0-9]+}}(%rsp)
60 ; CHECK-NEXT:    fstpt (%rsp)
61 ; CHECK-NEXT:    callq llroundl
62 ; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax
63 ; CHECK-NEXT:    addq $24, %rsp
64 ; CHECK-NEXT:    .cfi_def_cfa_offset 8
65 ; CHECK-NEXT:    retq
66 entry:
67   %0 = tail call i64 @llvm.llround.f80(x86_fp80 %x)
68   %conv = trunc i64 %0 to i32
69   ret i32 %conv
72 define i64 @testmsll(x86_fp80 %x) {
73 ; CHECK-LABEL: testmsll:
74 ; CHECK:       # %bb.0: # %entry
75 ; CHECK-NEXT:    jmp llroundl # TAILCALL
76 entry:
77   %0 = tail call i64 @llvm.llround.f80(x86_fp80 %x)
78   ret i64 %0
81 declare i64 @llvm.llround.f32(float) nounwind readnone
82 declare i64 @llvm.llround.f64(double) nounwind readnone
83 declare i64 @llvm.llround.f80(x86_fp80) nounwind readnone