1 # RUN: llc -mtriple=s390x-linux-gnu -mcpu=z14 -start-before=greedy %s -o - \
4 # Test folding of a memory operand into an fp memory instruction.
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 }
27 # CHECK: madb %f0, %f1, 160(%r15) # 8-byte Folded Reload
31 tracksRegLiveness: true
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 }
39 - { reg: '$f0d', virtual-reg: '%0' }
40 - { reg: '$f2d', virtual-reg: '%1' }
41 - { reg: '$r2d', virtual-reg: '%2' }
44 machineFunctionInfo: {}
47 liveins: $f0d, $f2d, $r2d
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)
62 # CHECK: madb %f0, %f1, 160(%r15) # 8-byte Folded Reload
66 tracksRegLiveness: true
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 }
74 - { reg: '$f0d', virtual-reg: '%0' }
75 - { reg: '$f2d', virtual-reg: '%1' }
76 - { reg: '$r2d', virtual-reg: '%2' }
79 machineFunctionInfo: {}
82 liveins: $f0d, $f2d, $r2d
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)
95 # MADB can't be used if one operand is a VR64 (and not FP64).
97 # CHECK: wfmadb %f0, %v16, %f1, %f0
101 tracksRegLiveness: true
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 }
109 - { reg: '$f0d', virtual-reg: '%0' }
110 - { reg: '$f2d', virtual-reg: '%1' }
111 - { reg: '$r2d', virtual-reg: '%2' }
114 machineFunctionInfo: {}
117 liveins: $f0d, $f2d, $r2d
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)
131 # MADB can't be used unless accumulator and result registers are the same.
133 # CHECK: wfmadb %f0, %f0, %f1, %f2
137 tracksRegLiveness: true
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 }
145 - { reg: '$f0d', virtual-reg: '%0' }
146 - { reg: '$f2d', virtual-reg: '%1' }
147 - { reg: '$r2d', virtual-reg: '%2' }
150 machineFunctionInfo: {}
153 liveins: $f0d, $f2d, $r2d
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)
168 # CHECK: maeb %f0, %f1, 160(%r15) # 4-byte Folded Reload
172 tracksRegLiveness: true
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 }
180 - { reg: '$f0s', virtual-reg: '%0' }
181 - { reg: '$f2s', virtual-reg: '%1' }
182 - { reg: '$r2d', virtual-reg: '%2' }
185 machineFunctionInfo: {}
188 liveins: $f0d, $f2d, $r2d
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)
203 # CHECK: maeb %f0, %f1, 160(%r15) # 4-byte Folded Reload
207 tracksRegLiveness: true
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 }
215 - { reg: '$f0s', virtual-reg: '%0' }
216 - { reg: '$f2s', virtual-reg: '%1' }
217 - { reg: '$r2d', virtual-reg: '%2' }
220 machineFunctionInfo: {}
223 liveins: $f0d, $f2d, $r2d
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)
237 # MAEB can't be used if one operand is a VR32 (and not FP32).
239 # CHECK: wfmasb %f0, %v16, %f1, %f0
243 tracksRegLiveness: true
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 }
251 - { reg: '$f0s', virtual-reg: '%0' }
252 - { reg: '$f2s', virtual-reg: '%1' }
253 - { reg: '$r2d', virtual-reg: '%2' }
256 machineFunctionInfo: {}
259 liveins: $f0d, $f2d, $r2d
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)
273 # MAEB can't be used unless accumulator and result registers are the same.
275 # CHECK: wfmasb %f0, %f0, %f1, %f2
279 tracksRegLiveness: true
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 }
287 - { reg: '$f0s', virtual-reg: '%0' }
288 - { reg: '$f2s', virtual-reg: '%1' }
289 - { reg: '$r2d', virtual-reg: '%2' }
292 machineFunctionInfo: {}
295 liveins: $f0d, $f2d, $r2d
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)
310 # CHECK: msdb %f0, %f1, 160(%r15) # 8-byte Folded Reload
314 tracksRegLiveness: true
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 }
322 - { reg: '$f0d', virtual-reg: '%0' }
323 - { reg: '$f2d', virtual-reg: '%1' }
324 - { reg: '$r2d', virtual-reg: '%2' }
327 machineFunctionInfo: {}
330 liveins: $f0d, $f2d, $r2d
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)
345 # CHECK: msdb %f0, %f1, 160(%r15) # 8-byte Folded Reload
349 tracksRegLiveness: true
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 }
357 - { reg: '$f0d', virtual-reg: '%0' }
358 - { reg: '$f2d', virtual-reg: '%1' }
359 - { reg: '$r2d', virtual-reg: '%2' }
362 machineFunctionInfo: {}
365 liveins: $f0d, $f2d, $r2d
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)
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
384 tracksRegLiveness: true
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 }
392 - { reg: '$f0d', virtual-reg: '%0' }
393 - { reg: '$f2d', virtual-reg: '%1' }
394 - { reg: '$r2d', virtual-reg: '%2' }
397 machineFunctionInfo: {}
400 liveins: $f0d, $f2d, $r2d
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)
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
420 tracksRegLiveness: true
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 }
428 - { reg: '$f0d', virtual-reg: '%0' }
429 - { reg: '$f2d', virtual-reg: '%1' }
430 - { reg: '$r2d', virtual-reg: '%2' }
433 machineFunctionInfo: {}
436 liveins: $f0d, $f2d, $r2d
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)
450 # CHECK-LABEL: fun12:
451 # CHECK: mseb %f0, %f1, 160(%r15) # 4-byte Folded Reload
455 tracksRegLiveness: true
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 }
463 - { reg: '$f0s', virtual-reg: '%0' }
464 - { reg: '$f2s', virtual-reg: '%1' }
465 - { reg: '$r2d', virtual-reg: '%2' }
468 machineFunctionInfo: {}
471 liveins: $f0d, $f2d, $r2d
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)
485 # CHECK-LABEL: fun13:
486 # CHECK: mseb %f0, %f1, 160(%r15) # 4-byte Folded Reload
490 tracksRegLiveness: true
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 }
498 - { reg: '$f0s', virtual-reg: '%0' }
499 - { reg: '$f2s', virtual-reg: '%1' }
500 - { reg: '$r2d', virtual-reg: '%2' }
503 machineFunctionInfo: {}
506 liveins: $f0d, $f2d, $r2d
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)
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
526 tracksRegLiveness: true
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 }
534 - { reg: '$f0s', virtual-reg: '%0' }
535 - { reg: '$f2s', virtual-reg: '%1' }
536 - { reg: '$r2d', virtual-reg: '%2' }
539 machineFunctionInfo: {}
542 liveins: $f0d, $f2d, $r2d
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)
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
562 tracksRegLiveness: true
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 }
570 - { reg: '$f0s', virtual-reg: '%0' }
571 - { reg: '$f2s', virtual-reg: '%1' }
572 - { reg: '$r2d', virtual-reg: '%2' }
575 machineFunctionInfo: {}
578 liveins: $f0d, $f2d, $r2d
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)