[lldb] Make sure Blocks always have a parent (#117683)
[llvm-project.git] / llvm / test / CodeGen / SystemZ / foldmemop-vec-fusedfp.mir
blob9d165a56193baf3473114a33ef2332a60ce34601
1 # RUN: llc -mtriple=s390x-linux-gnu -mcpu=z14 -start-before=greedy %s -o - \
2 # RUN:   | FileCheck %s
4 # Test folding of a memory operand into an fp memory instruction.
6 --- |
7   define void @fun0(double %arg0, double %arg1, ptr %Dst) { ret void }
8   define void @fun1(double %arg0, double %arg1, ptr %Dst) { ret void }
9   define void @fun2(double %arg0, double %arg1, ptr %Dst) { ret void }
10   define void @fun3(double %arg0, double %arg1, ptr %Dst) { ret void }
11   define void @fun4(float %arg0, float %arg1, ptr %Dst) { ret void }
12   define void @fun5(float %arg0, float %arg1, ptr %Dst) { ret void }
13   define void @fun6(float %arg0, float %arg1, ptr %Dst) { ret void }
14   define void @fun7(float %arg0, float %arg1, ptr %Dst) { ret void }
15   define void @fun8(double %arg0, double %arg1, ptr %Dst) { ret void }
16   define void @fun9(double %arg0, double %arg1, ptr %Dst) { ret void }
17   define void @fun10(double %arg0, double %arg1, ptr %Dst) { ret void }
18   define void @fun11(double %arg0, double %arg1, ptr %Dst) { ret void }
19   define void @fun12(float %arg0, float %arg1, ptr %Dst) { ret void }
20   define void @fun13(float %arg0, float %arg1, ptr %Dst) { ret void }
21   define void @fun14(float %arg0, float %arg1, ptr %Dst) { ret void }
22   define void @fun15(float %arg0, float %arg1, ptr %Dst) { ret void }
24 ...
26 # CHECK-LABEL: fun0:
27 # CHECK: madb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload
28 ---
29 name:            fun0
30 alignment:       16
31 tracksRegLiveness: true
32 registers:
33   - { id: 0, class: fp64bit }
34   - { id: 1, class: fp64bit }
35   - { id: 2, class: addr64bit }
36   - { id: 3, class: vr64bit }
37   - { id: 4, class: fp64bit }
38 liveins:
39   - { reg: '$f0d', virtual-reg: '%0' }
40   - { reg: '$f2d', virtual-reg: '%1' }
41   - { reg: '$r2d', virtual-reg: '%2' }
42 frameInfo:
43   maxAlignment:    1
44 machineFunctionInfo: {}
45 body:             |
46   bb.0:
47     liveins: $f0d, $f2d, $r2d
48   
49     %2:addr64bit = COPY $r2d
50     %1:fp64bit = COPY $f2d
51     %0:fp64bit = COPY $f0d
52     %4:fp64bit = COPY $f2d
53     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
54     %3:vr64bit = nofpexcept WFMADB %0, %1, %4, implicit $fpc
55     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
56     Return
58 ...
61 # CHECK-LABEL: fun1:
62 # CHECK: madb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload
63 ---
64 name:            fun1
65 alignment:       16
66 tracksRegLiveness: true
67 registers:
68   - { id: 0, class: fp64bit }
69   - { id: 1, class: fp64bit }
70   - { id: 2, class: addr64bit }
71   - { id: 3, class: vr64bit }
72   - { id: 4, class: fp64bit }
73 liveins:
74   - { reg: '$f0d', virtual-reg: '%0' }
75   - { reg: '$f2d', virtual-reg: '%1' }
76   - { reg: '$r2d', virtual-reg: '%2' }
77 frameInfo:
78   maxAlignment:    1
79 machineFunctionInfo: {}
80 body:             |
81   bb.0:
82     liveins: $f0d, $f2d, $r2d
83   
84     %2:addr64bit = COPY $r2d
85     %1:fp64bit = COPY $f2d
86     %0:fp64bit = COPY $f0d
87     %4:fp64bit = COPY $f2d
88     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
89     %3:vr64bit = nofpexcept WFMADB %1, %0, %4, implicit $fpc
90     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
91     Return
93 ...
95 # MADB can't be used if one operand is a VR64 (and not FP64).
96 # CHECK-LABEL: fun2:
97 # CHECK: wfmadb  %f0, %v16, %f1, %f0
98 ---
99 name:            fun2
100 alignment:       16
101 tracksRegLiveness: true
102 registers:
103   - { id: 0, class: fp64bit }
104   - { id: 1, class: vr64bit }
105   - { id: 2, class: addr64bit }
106   - { id: 3, class: vr64bit }
107   - { id: 4, class: fp64bit }
108 liveins:
109   - { reg: '$f0d', virtual-reg: '%0' }
110   - { reg: '$f2d', virtual-reg: '%1' }
111   - { reg: '$r2d', virtual-reg: '%2' }
112 frameInfo:
113   maxAlignment:    1
114 machineFunctionInfo: {}
115 body:             |
116   bb.0:
117     liveins: $f0d, $f2d, $r2d
118   
119     %2:addr64bit = COPY $r2d
120     %1:vr64bit = COPY $f2d
121     %0:fp64bit = COPY $f0d
122     %4:fp64bit = COPY $f2d
123     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
124     %3:vr64bit = nofpexcept WFMADB %1, %0, %4, implicit $fpc
125     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
126     Return
131 # MADB can't be used unless accumulator and result registers are the same.
132 # CHECK-LABEL: fun3:
133 # CHECK: wfmadb  %f0, %f0, %f1, %f2
135 name:            fun3
136 alignment:       16
137 tracksRegLiveness: true
138 registers:
139   - { id: 0, class: fp64bit }
140   - { id: 1, class: fp64bit }
141   - { id: 2, class: addr64bit }
142   - { id: 3, class: vr64bit }
143   - { id: 4, class: fp64bit }
144 liveins:
145   - { reg: '$f0d', virtual-reg: '%0' }
146   - { reg: '$f2d', virtual-reg: '%1' }
147   - { reg: '$r2d', virtual-reg: '%2' }
148 frameInfo:
149   maxAlignment:    1
150 machineFunctionInfo: {}
151 body:             |
152   bb.0:
153     liveins: $f0d, $f2d, $r2d
154   
155     %2:addr64bit = COPY $r2d
156     %1:fp64bit = COPY $f2d
157     %0:fp64bit = COPY $f0d
158     %4:fp64bit = COPY $f2d
159     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
160     %3:vr64bit = nofpexcept WFMADB %4, %1, %0, implicit $fpc
161     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
162     Return
167 # CHECK-LABEL: fun4:
168 # CHECK: maeb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload
170 name:            fun4
171 alignment:       16
172 tracksRegLiveness: true
173 registers:
174   - { id: 0, class: fp32bit }
175   - { id: 1, class: fp32bit }
176   - { id: 2, class: addr64bit }
177   - { id: 3, class: vr32bit }
178   - { id: 4, class: fp32bit }
179 liveins:
180   - { reg: '$f0s', virtual-reg: '%0' }
181   - { reg: '$f2s', virtual-reg: '%1' }
182   - { reg: '$r2d', virtual-reg: '%2' }
183 frameInfo:
184   maxAlignment:    1
185 machineFunctionInfo: {}
186 body:             |
187   bb.0:
188     liveins: $f0d, $f2d, $r2d
189   
190     %2:addr64bit = COPY $r2d
191     %1:fp32bit = COPY $f2s
192     %0:fp32bit = COPY $f0s
193     %4:fp32bit = COPY $f2s
194     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
195     %3:vr32bit = nofpexcept WFMASB %0, %1, %4, implicit $fpc
196     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
197     Return
202 # CHECK-LABEL: fun5:
203 # CHECK: maeb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload
205 name:            fun5
206 alignment:       16
207 tracksRegLiveness: true
208 registers:
209   - { id: 0, class: fp32bit }
210   - { id: 1, class: fp32bit }
211   - { id: 2, class: addr64bit }
212   - { id: 3, class: vr32bit }
213   - { id: 4, class: fp32bit }
214 liveins:
215   - { reg: '$f0s', virtual-reg: '%0' }
216   - { reg: '$f2s', virtual-reg: '%1' }
217   - { reg: '$r2d', virtual-reg: '%2' }
218 frameInfo:
219   maxAlignment:    1
220 machineFunctionInfo: {}
221 body:             |
222   bb.0:
223     liveins: $f0d, $f2d, $r2d
224   
225     %2:addr64bit = COPY $r2d
226     %1:fp32bit = COPY $f2s
227     %0:fp32bit = COPY $f0s
228     %4:fp32bit = COPY $f2s
229     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
230     %3:vr32bit = nofpexcept WFMASB %1, %0, %4, implicit $fpc
231     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
232     Return
237 # MAEB can't be used if one operand is a VR32 (and not FP32).
238 # CHECK-LABEL: fun6:
239 # CHECK: wfmasb  %f0, %v16, %f1, %f0
241 name:            fun6
242 alignment:       16
243 tracksRegLiveness: true
244 registers:
245   - { id: 0, class: fp32bit }
246   - { id: 1, class: vr32bit }
247   - { id: 2, class: addr64bit }
248   - { id: 3, class: vr32bit }
249   - { id: 4, class: fp32bit }
250 liveins:
251   - { reg: '$f0s', virtual-reg: '%0' }
252   - { reg: '$f2s', virtual-reg: '%1' }
253   - { reg: '$r2d', virtual-reg: '%2' }
254 frameInfo:
255   maxAlignment:    1
256 machineFunctionInfo: {}
257 body:             |
258   bb.0:
259     liveins: $f0d, $f2d, $r2d
260   
261     %2:addr64bit = COPY $r2d
262     %1:vr32bit = COPY $f2s
263     %0:fp32bit = COPY $f0s
264     %4:fp32bit = COPY $f2s
265     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
266     %3:vr32bit = nofpexcept WFMASB %1, %0, %4, implicit $fpc
267     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
268     Return
273 # MAEB can't be used unless accumulator and result registers are the same.
274 # CHECK-LABEL: fun7:
275 # CHECK: wfmasb  %f0, %f0, %f1, %f2
277 name:            fun7
278 alignment:       16
279 tracksRegLiveness: true
280 registers:
281   - { id: 0, class: fp32bit }
282   - { id: 1, class: fp32bit }
283   - { id: 2, class: addr64bit }
284   - { id: 3, class: vr32bit }
285   - { id: 4, class: fp32bit }
286 liveins:
287   - { reg: '$f0s', virtual-reg: '%0' }
288   - { reg: '$f2s', virtual-reg: '%1' }
289   - { reg: '$r2d', virtual-reg: '%2' }
290 frameInfo:
291   maxAlignment:    1
292 machineFunctionInfo: {}
293 body:             |
294   bb.0:
295     liveins: $f0d, $f2d, $r2d
296   
297     %2:addr64bit = COPY $r2d
298     %1:fp32bit = COPY $f2s
299     %0:fp32bit = COPY $f0s
300     %4:fp32bit = COPY $f2s
301     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
302     %3:vr32bit = nofpexcept WFMASB %4, %1, %0, implicit $fpc
303     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
304     Return
309 # CHECK-LABEL: fun8:
310 # CHECK: msdb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload
312 name:            fun8
313 alignment:       16
314 tracksRegLiveness: true
315 registers:
316   - { id: 0, class: fp64bit }
317   - { id: 1, class: fp64bit }
318   - { id: 2, class: addr64bit }
319   - { id: 3, class: vr64bit }
320   - { id: 4, class: fp64bit }
321 liveins:
322   - { reg: '$f0d', virtual-reg: '%0' }
323   - { reg: '$f2d', virtual-reg: '%1' }
324   - { reg: '$r2d', virtual-reg: '%2' }
325 frameInfo:
326   maxAlignment:    1
327 machineFunctionInfo: {}
328 body:             |
329   bb.0:
330     liveins: $f0d, $f2d, $r2d
331   
332     %2:addr64bit = COPY $r2d
333     %1:fp64bit = COPY $f2d
334     %0:fp64bit = COPY $f0d
335     %4:fp64bit = COPY $f2d
336     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
337     %3:vr64bit = nofpexcept WFMSDB %0, %1, %4, implicit $fpc
338     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
339     Return
344 # CHECK-LABEL: fun9:
345 # CHECK: msdb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload
347 name:            fun9
348 alignment:       16
349 tracksRegLiveness: true
350 registers:
351   - { id: 0, class: fp64bit }
352   - { id: 1, class: fp64bit }
353   - { id: 2, class: addr64bit }
354   - { id: 3, class: vr64bit }
355   - { id: 4, class: fp64bit }
356 liveins:
357   - { reg: '$f0d', virtual-reg: '%0' }
358   - { reg: '$f2d', virtual-reg: '%1' }
359   - { reg: '$r2d', virtual-reg: '%2' }
360 frameInfo:
361   maxAlignment:    1
362 machineFunctionInfo: {}
363 body:             |
364   bb.0:
365     liveins: $f0d, $f2d, $r2d
366   
367     %2:addr64bit = COPY $r2d
368     %1:fp64bit = COPY $f2d
369     %0:fp64bit = COPY $f0d
370     %4:fp64bit = COPY $f2d
371     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
372     %3:vr64bit = nofpexcept WFMSDB %1, %0, %4, implicit $fpc
373     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
374     Return
378 # MSDB can't be used if one operand is a VR64 (and not FP64).
379 # CHECK-LABEL: fun10:
380 # CHECK: wfmsdb  %f0, %v16, %f1, %f0
382 name:            fun10
383 alignment:       16
384 tracksRegLiveness: true
385 registers:
386   - { id: 0, class: fp64bit }
387   - { id: 1, class: vr64bit }
388   - { id: 2, class: addr64bit }
389   - { id: 3, class: vr64bit }
390   - { id: 4, class: fp64bit }
391 liveins:
392   - { reg: '$f0d', virtual-reg: '%0' }
393   - { reg: '$f2d', virtual-reg: '%1' }
394   - { reg: '$r2d', virtual-reg: '%2' }
395 frameInfo:
396   maxAlignment:    1
397 machineFunctionInfo: {}
398 body:             |
399   bb.0:
400     liveins: $f0d, $f2d, $r2d
401   
402     %2:addr64bit = COPY $r2d
403     %1:vr64bit = COPY $f2d
404     %0:fp64bit = COPY $f0d
405     %4:fp64bit = COPY $f2d
406     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
407     %3:vr64bit = nofpexcept WFMSDB %1, %0, %4, implicit $fpc
408     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
409     Return
414 # MSDB can't be used unless accumulator and result registers are the same.
415 # CHECK-LABEL: fun11:
416 # CHECK: wfmsdb  %f0, %f0, %f1, %f2
418 name:            fun11
419 alignment:       16
420 tracksRegLiveness: true
421 registers:
422   - { id: 0, class: fp64bit }
423   - { id: 1, class: fp64bit }
424   - { id: 2, class: addr64bit }
425   - { id: 3, class: vr64bit }
426   - { id: 4, class: fp64bit }
427 liveins:
428   - { reg: '$f0d', virtual-reg: '%0' }
429   - { reg: '$f2d', virtual-reg: '%1' }
430   - { reg: '$r2d', virtual-reg: '%2' }
431 frameInfo:
432   maxAlignment:    1
433 machineFunctionInfo: {}
434 body:             |
435   bb.0:
436     liveins: $f0d, $f2d, $r2d
437   
438     %2:addr64bit = COPY $r2d
439     %1:fp64bit = COPY $f2d
440     %0:fp64bit = COPY $f0d
441     %4:fp64bit = COPY $f2d
442     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
443     %3:vr64bit = nofpexcept WFMSDB %4, %1, %0, implicit $fpc
444     VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
445     Return
450 # CHECK-LABEL: fun12:
451 # CHECK: mseb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload
453 name:            fun12
454 alignment:       16
455 tracksRegLiveness: true
456 registers:
457   - { id: 0, class: fp32bit }
458   - { id: 1, class: fp32bit }
459   - { id: 2, class: addr64bit }
460   - { id: 3, class: vr32bit }
461   - { id: 4, class: fp32bit }
462 liveins:
463   - { reg: '$f0s', virtual-reg: '%0' }
464   - { reg: '$f2s', virtual-reg: '%1' }
465   - { reg: '$r2d', virtual-reg: '%2' }
466 frameInfo:
467   maxAlignment:    1
468 machineFunctionInfo: {}
469 body:             |
470   bb.0:
471     liveins: $f0d, $f2d, $r2d
472   
473     %2:addr64bit = COPY $r2d
474     %1:fp32bit = COPY $f2s
475     %0:fp32bit = COPY $f0s
476     %4:fp32bit = COPY $f2s
477     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
478     %3:vr32bit = nofpexcept WFMSSB %0, %1, %4, implicit $fpc
479     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
480     Return
485 # CHECK-LABEL: fun13:
486 # CHECK: mseb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload
488 name:            fun13
489 alignment:       16
490 tracksRegLiveness: true
491 registers:
492   - { id: 0, class: fp32bit }
493   - { id: 1, class: fp32bit }
494   - { id: 2, class: addr64bit }
495   - { id: 3, class: vr32bit }
496   - { id: 4, class: fp32bit }
497 liveins:
498   - { reg: '$f0s', virtual-reg: '%0' }
499   - { reg: '$f2s', virtual-reg: '%1' }
500   - { reg: '$r2d', virtual-reg: '%2' }
501 frameInfo:
502   maxAlignment:    1
503 machineFunctionInfo: {}
504 body:             |
505   bb.0:
506     liveins: $f0d, $f2d, $r2d
507   
508     %2:addr64bit = COPY $r2d
509     %1:fp32bit = COPY $f2s
510     %0:fp32bit = COPY $f0s
511     %4:fp32bit = COPY $f2s
512     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
513     %3:vr32bit = nofpexcept WFMSSB %1, %0, %4, implicit $fpc
514     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
515     Return
520 # MSEB can't be used if one operand is a VR32 (and not FP32).
521 # CHECK-LABEL: fun14:
522 # CHECK: wfmssb  %f0, %v16, %f1, %f0
524 name:            fun14
525 alignment:       16
526 tracksRegLiveness: true
527 registers:
528   - { id: 0, class: fp32bit }
529   - { id: 1, class: vr32bit }
530   - { id: 2, class: addr64bit }
531   - { id: 3, class: vr32bit }
532   - { id: 4, class: fp32bit }
533 liveins:
534   - { reg: '$f0s', virtual-reg: '%0' }
535   - { reg: '$f2s', virtual-reg: '%1' }
536   - { reg: '$r2d', virtual-reg: '%2' }
537 frameInfo:
538   maxAlignment:    1
539 machineFunctionInfo: {}
540 body:             |
541   bb.0:
542     liveins: $f0d, $f2d, $r2d
543   
544     %2:addr64bit = COPY $r2d
545     %1:vr32bit = COPY $f2s
546     %0:fp32bit = COPY $f0s
547     %4:fp32bit = COPY $f2s
548     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
549     %3:vr32bit = nofpexcept WFMSSB %1, %0, %4, implicit $fpc
550     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
551     Return
556 # MSEB can't be used unless accumulator and result registers are the same.
557 # CHECK-LABEL: fun15:
558 # CHECK: wfmssb  %f0, %f0, %f1, %f2
560 name:            fun15
561 alignment:       16
562 tracksRegLiveness: true
563 registers:
564   - { id: 0, class: fp32bit }
565   - { id: 1, class: fp32bit }
566   - { id: 2, class: addr64bit }
567   - { id: 3, class: vr32bit }
568   - { id: 4, class: fp32bit }
569 liveins:
570   - { reg: '$f0s', virtual-reg: '%0' }
571   - { reg: '$f2s', virtual-reg: '%1' }
572   - { reg: '$r2d', virtual-reg: '%2' }
573 frameInfo:
574   maxAlignment:    1
575 machineFunctionInfo: {}
576 body:             |
577   bb.0:
578     liveins: $f0d, $f2d, $r2d
579   
580     %2:addr64bit = COPY $r2d
581     %1:fp32bit = COPY $f2s
582     %0:fp32bit = COPY $f0s
583     %4:fp32bit = COPY $f2s
584     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def dead early-clobber $f1d, 12, implicit-def dead early-clobber $f2d, 12, implicit-def dead early-clobber $f3d, 12, implicit-def dead early-clobber $f4d, 12, implicit-def dead early-clobber $f5d, 12, implicit-def dead early-clobber $f6d, 12, implicit-def dead early-clobber $f7d, 12, implicit-def dead early-clobber $f8d, 12, implicit-def dead early-clobber $f9d, 12, implicit-def dead early-clobber $f10d, 12, implicit-def dead early-clobber $f11d, 12, implicit-def dead early-clobber $f12d, 12, implicit-def dead early-clobber $f13d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f14d, 12, implicit-def dead early-clobber $f15d
585     %3:vr32bit = nofpexcept WFMSSB %4, %1, %0, implicit $fpc
586     VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)
587     Return