xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-fpenv.ll (revision 7fc7ef14340a3a58cebd0801497b68eb698c2784)
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2; RUN: llc -O0 -mtriple=aarch64-linux-gnu -global-isel -stop-after=irtranslator %s -o - | FileCheck %s
3
4declare i64 @llvm.get.fpenv.i64()
5declare void @llvm.set.fpenv.i64(i64 %fpenv)
6declare void @llvm.reset.fpenv()
7declare i32 @llvm.get.fpmode.i32()
8declare void @llvm.set.fpmode.i32(i32 %fpmode)
9declare void @llvm.reset.fpmode()
10
11define i64 @func_get_fpenv() #0 {
12  ; CHECK-LABEL: name: func_get_fpenv
13  ; CHECK: bb.1.entry:
14  ; CHECK-NEXT:   [[GET_FPENV:%[0-9]+]]:_(s64) = G_GET_FPENV
15  ; CHECK-NEXT:   $x0 = COPY [[GET_FPENV]](s64)
16  ; CHECK-NEXT:   RET_ReallyLR implicit $x0
17entry:
18  %fpenv = call i64 @llvm.get.fpenv.i64()
19  ret i64 %fpenv
20}
21
22define void @func_set_fpenv(i64 %fpenv) #0 {
23  ; CHECK-LABEL: name: func_set_fpenv
24  ; CHECK: bb.1.entry:
25  ; CHECK-NEXT:   liveins: $x0
26  ; CHECK-NEXT: {{  $}}
27  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x0
28  ; CHECK-NEXT:   G_SET_FPENV [[COPY]](s64)
29  ; CHECK-NEXT:   RET_ReallyLR
30entry:
31  call void @llvm.set.fpenv.i64(i64 %fpenv)
32  ret void
33}
34
35define void @func_reset_fpenv() #0 {
36  ; CHECK-LABEL: name: func_reset_fpenv
37  ; CHECK: bb.1.entry:
38  ; CHECK-NEXT:   G_RESET_FPENV
39  ; CHECK-NEXT:   RET_ReallyLR
40entry:
41  call void @llvm.reset.fpenv()
42  ret void
43}
44
45define i32 @func_get_fpmode() #0 {
46  ; CHECK-LABEL: name: func_get_fpmode
47  ; CHECK: bb.1.entry:
48  ; CHECK-NEXT:   [[GET_FPMODE:%[0-9]+]]:_(s32) = G_GET_FPMODE
49  ; CHECK-NEXT:   $w0 = COPY [[GET_FPMODE]](s32)
50  ; CHECK-NEXT:   RET_ReallyLR implicit $w0
51entry:
52  %fpmode = call i32 @llvm.get.fpmode.i32()
53  ret i32 %fpmode
54}
55
56define void @func_set_fpmode(i32 %fpmode) #0 {
57  ; CHECK-LABEL: name: func_set_fpmode
58  ; CHECK: bb.1.entry:
59  ; CHECK-NEXT:   liveins: $w0
60  ; CHECK-NEXT: {{  $}}
61  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
62  ; CHECK-NEXT:   G_SET_FPMODE [[COPY]](s32)
63  ; CHECK-NEXT:   RET_ReallyLR
64entry:
65  call void @llvm.set.fpmode.i32(i32 %fpmode)
66  ret void
67}
68
69
70define void @func_reset() #0 {
71  ; CHECK-LABEL: name: func_reset
72  ; CHECK: bb.1.entry:
73  ; CHECK-NEXT:   G_RESET_FPMODE
74  ; CHECK-NEXT:   RET_ReallyLR
75entry:
76  call void @llvm.reset.fpmode()
77  ret void
78}
79
80attributes #0 = { nounwind "use-soft-float"="true" }
81