[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / lrint-conv.ll
blob80f1e8b8fc18e27260d763e0c50b42b5ebe39530
1 ; RUN: llc < %s -mtriple=aarch64 -mattr=+neon | FileCheck %s
2 ; RUN: llc < %s -global-isel -global-isel-abort=2 -pass-remarks-missed=gisel* -mtriple=aarch64 | FileCheck %s --check-prefixes=FALLBACK,CHECK
4 ; CHECK-LABEL: testmsws:
5 ; CHECK:       frintx  [[REG:s[0-9]]], s0
6 ; CHECK-NEXT:  fcvtzs  x0, [[REG]]
7 ; CHECK:       ret
8 ; FALLBACK-NOT: remark{{.*}}testmsws
9 define i32 @testmsws(float %x) {
10 entry:
11   %0 = tail call i64 @llvm.lrint.i64.f32(float %x)
12   %conv = trunc i64 %0 to i32
13   ret i32 %conv
16 ; CHECK-LABEL: testmsxs:
17 ; CHECK:       frintx  [[REG:s[0-9]]], s0
18 ; CHECK-NEXT:  fcvtzs  x0, [[REG]]
19 ; CHECK-NEXT:  ret
20 ; FALLBACK-NOT: remark{{.*}}testmsxs
21 define i64 @testmsxs(float %x) {
22 entry:
23   %0 = tail call i64 @llvm.lrint.i64.f32(float %x)
24   ret i64 %0
27 ; CHECK-LABEL: testmswd:
28 ; CHECK:       frintx  [[REG:d[0-9]]], d0
29 ; CHECK-NEXT:  fcvtzs  x0, [[REG]]
30 ; CHECK:       ret
31 ; FALLBACK-NOT: remark{{.*}}testmswd
32 define i32 @testmswd(double %x) {
33 entry:
34   %0 = tail call i64 @llvm.lrint.i64.f64(double %x)
35   %conv = trunc i64 %0 to i32
36   ret i32 %conv
39 ; CHECK-LABEL: testmsxd:
40 ; CHECK:       frintx  [[REG:d[0-9]]], d0
41 ; CHECK-NEXT:  fcvtzs  x0, [[REG]]
42 ; CHECK-NEXT:  ret
43 ; FALLBACK-NOT: remark{{.*}}testmsxd
44 define i64 @testmsxd(double %x) {
45 entry:
46   %0 = tail call i64 @llvm.lrint.i64.f64(double %x)
47   ret i64 %0
50 ; CHECK-LABEL: testmswl:
51 ; CHECK:       bl      lrintl
52 define dso_local i32 @testmswl(fp128 %x) {
53 entry:
54   %0 = tail call i64 @llvm.lrint.i64.f128(fp128 %x)
55   %conv = trunc i64 %0 to i32
56   ret i32 %conv
59 ; CHECK-LABEL: testmsll:
60 ; CHECK:       b       lrintl
61 define dso_local i64 @testmsll(fp128 %x) {
62 entry:
63   %0 = tail call i64 @llvm.lrint.i64.f128(fp128 %x)
64   ret i64 %0
67 declare i64 @llvm.lrint.i64.f32(float) nounwind readnone
68 declare i64 @llvm.lrint.i64.f64(double) nounwind readnone
69 declare i64 @llvm.lrint.i64.f128(fp128) nounwind readnone