[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / X86 / x87-reg-usage.mir
blob23497945793b5a9f3c08e3abe686346f82c58aa0
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-- -mattr=+x87 -mattr=-sse -run-pass none -o - %s | FileCheck %s
3 # This test ensures that the MIR parser parses the x87 fpsw and fpcw regs
5 --- |
6   declare float @llvm.sqrt.f32(float)
8   define void @f1(ptr %a, ptr %b) {
9     %1 = load float, ptr %a, align 4
10     %2 = load float, ptr %b, align 4
11     %sub = fsub float %1, %2
12     store float %sub, ptr %a, align 4
13     ret void
14   }
16   define void @f2(ptr %a, ptr %b) {
17     %1 = load double, ptr %a, align 8
18     %2 = load double, ptr %b, align 8
19     %add = fadd double %1, %2
20     store double %add, ptr %a, align 8
21     ret void
22   }
24   define void @f3(ptr %a, ptr %b) {
25     %1 = load x86_fp80, ptr %a, align 16
26     %2 = load x86_fp80, ptr %b, align 16
27     %mul = fmul x86_fp80 %1, %2
28     store x86_fp80 %mul, ptr %a, align 16
29     ret void
30   }
32   define void @f4(ptr %a, ptr %b) {
33     %1 = load float, ptr %a, align 4
34     %2 = load float, ptr %b, align 4
35     %div = fdiv float %1, %2
36     store float %div, ptr %a, align 4
37     ret void
38   }
40   define void @f5(ptr %val, ptr %ret) {
41     %1 = load float, ptr %val, align 4
42     %res = fpext float %1 to double
43     store double %res, ptr %ret, align 8
44     ret void
45   }
47   define void @f6(ptr %val, ptr %ret) {
48     %1 = load double, ptr %val, align 8
49     %res = fptrunc double %1 to float
50     store float %res, ptr %ret, align 4
51     ret void
52   }
54   define void @f7(ptr %a) {
55     %1 = load float, ptr %a, align 4
56     %res = call float @llvm.sqrt.f32(float %1)
57     store float %res, ptr %a, align 4
58     ret void
59   }
63 ...
64 ---
65 name:            f1
66 alignment:       16
67 tracksRegLiveness: true
68 liveins:
69   - { reg: '$rdi' }
70   - { reg: '$rsi' }
71 frameInfo:
72   maxAlignment:    1
73 machineFunctionInfo: {}
74 body:             |
75   bb.0 (%ir-block.0):
76     liveins: $rdi, $rsi
78     ; CHECK-LABEL: name: f1
79     ; CHECK: liveins: $rdi, $rsi
80     ; CHECK: renamable $fp0 = LD_Fp32m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.a)
81     ; CHECK: renamable $fp0 = SUB_Fp32m killed renamable $fp0, killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.b)
82     ; CHECK: ST_Fp32m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.a)
83     ; CHECK: RET 0
84     renamable $fp0 = LD_Fp32m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.a)
85     renamable $fp0 = SUB_Fp32m killed renamable $fp0, killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.b)
86     ST_Fp32m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.a)
87     RET 0
89 ...
90 ---
91 name:            f2
92 alignment:       16
93 tracksRegLiveness: true
94 liveins:
95   - { reg: '$rdi' }
96   - { reg: '$rsi' }
97 frameInfo:
98   maxAlignment:    1
99 machineFunctionInfo: {}
100 body:             |
101   bb.0 (%ir-block.0):
102     liveins: $rdi, $rsi
104     ; CHECK-LABEL: name: f2
105     ; CHECK: liveins: $rdi, $rsi
106     ; CHECK: renamable $fp0 = LD_Fp64m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s64) from %ir.a)
107     ; CHECK: renamable $fp0 = ADD_Fp64m killed renamable $fp0, killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s64) from %ir.b)
108     ; CHECK: ST_Fp64m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s64) into %ir.a)
109     ; CHECK: RET 0
110     renamable $fp0 = LD_Fp64m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s64) from %ir.a)
111     renamable $fp0 = ADD_Fp64m killed renamable $fp0, killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s64) from %ir.b)
112     ST_Fp64m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s64) into %ir.a)
113     RET 0
117 name:            f3
118 alignment:       16
119 tracksRegLiveness: true
120 liveins:
121   - { reg: '$rdi' }
122   - { reg: '$rsi' }
123 frameInfo:
124   maxAlignment:    1
125 machineFunctionInfo: {}
126 body:             |
127   bb.0 (%ir-block.0):
128     liveins: $rdi, $rsi
130     ; CHECK-LABEL: name: f3
131     ; CHECK: liveins: $rdi, $rsi
132     ; CHECK: renamable $fp0 = LD_Fp80m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s80) from %ir.a, align 16)
133     ; CHECK: renamable $fp1 = LD_Fp80m killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s80) from %ir.b, align 16)
134     ; CHECK: renamable $fp0 = MUL_Fp80 killed renamable $fp0, killed renamable $fp1, implicit-def dead $fpsw, implicit $fpcw
135     ; CHECK: ST_FpP80m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s80) into %ir.a, align 16)
136     ; CHECK: RET 0
137     renamable $fp0 = LD_Fp80m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s80) from %ir.a, align 16)
138     renamable $fp1 = LD_Fp80m killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s80) from %ir.b, align 16)
139     renamable $fp0 = MUL_Fp80 killed renamable $fp0, killed renamable $fp1, implicit-def dead $fpsw, implicit $fpcw
140     ST_FpP80m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s80) into %ir.a, align 16)
141     RET 0
145 name:            f4
146 alignment:       16
147 tracksRegLiveness: true
148 liveins:
149   - { reg: '$rdi' }
150   - { reg: '$rsi' }
151 frameInfo:
152   maxAlignment:    1
153 machineFunctionInfo: {}
154 body:             |
155   bb.0 (%ir-block.0):
156     liveins: $rdi, $rsi
158     ; CHECK-LABEL: name: f4
159     ; CHECK: liveins: $rdi, $rsi
160     ; CHECK: renamable $fp0 = LD_Fp32m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.a)
161     ; CHECK: renamable $fp0 = DIV_Fp32m killed renamable $fp0, killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.b)
162     ; CHECK: ST_Fp32m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.a)
163     ; CHECK: RET 0
164     renamable $fp0 = LD_Fp32m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.a)
165     renamable $fp0 = DIV_Fp32m killed renamable $fp0, killed renamable $rsi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.b)
166     ST_Fp32m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.a)
167     RET 0
171 name:            f5
172 alignment:       16
173 tracksRegLiveness: true
174 liveins:
175   - { reg: '$rdi' }
176   - { reg: '$rsi' }
177 frameInfo:
178   maxAlignment:    1
179 machineFunctionInfo: {}
180 body:             |
181   bb.0 (%ir-block.0):
182     liveins: $rdi, $rsi
184     ; CHECK-LABEL: name: f5
185     ; CHECK: liveins: $rdi, $rsi
186     ; CHECK: renamable $fp0 = LD_Fp32m64 killed renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.val)
187     ; CHECK: ST_Fp64m killed renamable $rsi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s64) into %ir.ret)
188     ; CHECK: RET 0
189     renamable $fp0 = LD_Fp32m64 killed renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.val)
190     ST_Fp64m killed renamable $rsi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s64) into %ir.ret)
191     RET 0
195 name:            f6
196 alignment:       16
197 tracksRegLiveness: true
198 liveins:
199   - { reg: '$rdi' }
200   - { reg: '$rsi' }
201 frameInfo:
202   maxAlignment:    4
203 stack:
204   - { id: 0, size: 4, alignment: 4 }
205 machineFunctionInfo: {}
206 body:             |
207   bb.0 (%ir-block.0):
208     liveins: $rdi, $rsi
210     ; CHECK-LABEL: name: f6
211     ; CHECK: liveins: $rdi, $rsi
212     ; CHECK: renamable $fp0 = LD_Fp64m killed renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s64) from %ir.val)
213     ; CHECK: ST_Fp64m32 %stack.0, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %stack.0)
214     ; CHECK: renamable $fp0 = LD_Fp32m %stack.0, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %stack.0)
215     ; CHECK: ST_Fp32m killed renamable $rsi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.ret)
216     ; CHECK: RET 0
217     renamable $fp0 = LD_Fp64m killed renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s64) from %ir.val)
218     ST_Fp64m32 %stack.0, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %stack.0)
219     renamable $fp0 = LD_Fp32m %stack.0, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %stack.0)
220     ST_Fp32m killed renamable $rsi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.ret)
221     RET 0
225 name:            f7
226 alignment:       16
227 tracksRegLiveness: true
228 liveins:
229   - { reg: '$rdi' }
230 frameInfo:
231   maxAlignment:    1
232 machineFunctionInfo: {}
233 body:             |
234   bb.0 (%ir-block.0):
235     liveins: $rdi
237     ; CHECK-LABEL: name: f7
238     ; CHECK: liveins: $rdi
239     ; CHECK: renamable $fp0 = LD_Fp32m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.a)
240     ; CHECK: renamable $fp0 = SQRT_Fp32 killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw
241     ; CHECK: ST_Fp32m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.a)
242     ; CHECK: RET 0
243     renamable $fp0 = LD_Fp32m renamable $rdi, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (load (s32) from %ir.a)
244     renamable $fp0 = SQRT_Fp32 killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw
245     ST_Fp32m killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $fp0, implicit-def dead $fpsw, implicit $fpcw :: (store (s32) into %ir.a)
246     RET 0