Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-fpmode.mir
blob14c53902287f32a781cc2a3da600976469feacbd
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2 # RUN: llc -mtriple=aarch64-linux-gnu -run-pass=legalizer %s -o - | FileCheck %s
4 --- |
5   target triple = "aarch64-unknown-linux-gnu"
7   declare i32 @llvm.get.fpmode.i32()
8   declare void @llvm.set.fpmode.i32(i32)
9   declare void @llvm.reset.fpmode()
11   define i32 @func_get_fpmode() #0 {
12   entry:
13     %fpmode = call i32 @llvm.get.fpmode.i32()
14     ret i32 %fpmode
15   }
17   define void @func_set_fpmode(i32 %fpmode) #0 {
18   entry:
19     call void @llvm.set.fpmode.i32(i32 %fpmode)
20     ret void
21   }
23   define void @func_reset() #0 {
24   entry:
25     call void @llvm.reset.fpmode()
26     ret void
27   }
29   attributes #0 = { nounwind "use-soft-float"="true" }
31 ...
32 ---
33 name:            func_get_fpmode
34 tracksRegLiveness: true
35 body:             |
36   bb.1.entry:
37     ; CHECK-LABEL: name: func_get_fpmode
38     ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0
39     ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
40     ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)
41     ; CHECK-NEXT: BL &fegetmode, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0
42     ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
43     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %stack.0)
44     ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
45     ; CHECK-NEXT: RET_ReallyLR implicit $w0
46     %0:_(s32) = G_GET_FPMODE
47     $w0 = COPY %0(s32)
48     RET_ReallyLR implicit $w0
50 ...
51 ---
52 name:            func_set_fpmode
53 tracksRegLiveness: true
54 body:             |
55   bb.1.entry:
56     liveins: $w0
58     ; CHECK-LABEL: name: func_set_fpmode
59     ; CHECK: liveins: $w0
60     ; CHECK-NEXT: {{  $}}
61     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
62     ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0
63     ; CHECK-NEXT: G_STORE [[COPY]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %stack.0)
64     ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
65     ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)
66     ; CHECK-NEXT: BL &fesetmode, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0
67     ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
68     ; CHECK-NEXT: RET_ReallyLR
69     %0:_(s32) = COPY $w0
70     G_SET_FPMODE %0(s32)
71     RET_ReallyLR
73 ...
74 ---
75 name:            func_reset
76 tracksRegLiveness: true
77 body:             |
78   bb.1.entry:
79     ; CHECK-LABEL: name: func_reset
80     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
81     ; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:_(p0) = G_INTTOPTR [[C]](s64)
82     ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
83     ; CHECK-NEXT: $x0 = COPY [[INTTOPTR]](p0)
84     ; CHECK-NEXT: BL &fesetmode, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0
85     ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
86     ; CHECK-NEXT: RET_ReallyLR
87     G_RESET_FPMODE
88     RET_ReallyLR
90 ...