[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / llround-conv.ll
blob797136037f0e942c9757e6ed35518a24ef12b768
1 ; RUN: llc < %s -mtriple=aarch64 -mattr=+neon | FileCheck %s
3 ; CHECK-LABEL: testmsws:
4 ; CHECK:       fcvtas  x0, s0
5 ; CHECK:       ret
6 define i32 @testmsws(float %x) {
7 entry:
8   %0 = tail call i64 @llvm.llround.f32(float %x)
9   %conv = trunc i64 %0 to i32
10   ret i32 %conv
13 ; CHECK-LABEL: testmsxs:
14 ; CHECK:       fcvtas  x0, s0
15 ; CHECK-NEXT:  ret
16 define i64 @testmsxs(float %x) {
17 entry:
18   %0 = tail call i64 @llvm.llround.f32(float %x)
19   ret i64 %0
22 ; CHECK-LABEL: testmswd:
23 ; CHECK:       fcvtas  x0, d0
24 ; CHECK:       ret
25 define i32 @testmswd(double %x) {
26 entry:
27   %0 = tail call i64 @llvm.llround.f64(double %x)
28   %conv = trunc i64 %0 to i32
29   ret i32 %conv
32 ; CHECK-LABEL: testmsxd:
33 ; CHECK:       fcvtas  x0, d0
34 ; CHECK-NEXT:  ret
35 define i64 @testmsxd(double %x) {
36 entry:
37   %0 = tail call i64 @llvm.llround.f64(double %x)
38   ret i64 %0
41 ; CHECK-LABEL: testmswl:
42 ; CHECK:       bl      llroundl
43 define i32 @testmswl(fp128 %x) {
44 entry:
45   %0 = tail call i64 @llvm.llround.f128(fp128 %x)
46   %conv = trunc i64 %0 to i32
47   ret i32 %conv
50 ; CHECK-LABEL: testmsll:
51 ; CHECK:       b       llroundl
52 define i64 @testmsll(fp128 %x) {
53 entry:
54   %0 = tail call i64 @llvm.llround.f128(fp128 %x)
55   ret i64 %0
58 declare i64 @llvm.llround.f32(float) nounwind readnone
59 declare i64 @llvm.llround.f64(double) nounwind readnone
60 declare i64 @llvm.llround.f128(fp128) nounwind readnone