brintos

brintos / llvm-project-archived public Read only

0
0
Text · 35.2 KiB · 9d165a5 Raw
590 lines · plain
1# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z14 -start-before=greedy %s -o - \2# RUN:   | FileCheck %s3#4# Test folding of a memory operand into an fp memory instruction.5 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 }23 24...25 26# CHECK-LABEL: fun0:27# CHECK: madb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload28---29name:            fun030alignment:       1631tracksRegLiveness: true32registers: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 }38liveins:39  - { reg: '$f0d', virtual-reg: '%0' }40  - { reg: '$f2d', virtual-reg: '%1' }41  - { reg: '$r2d', virtual-reg: '%2' }42frameInfo:43  maxAlignment:    144machineFunctionInfo: {}45body:             |46  bb.0:47    liveins: $f0d, $f2d, $r2d48  49    %2:addr64bit = COPY $r2d50    %1:fp64bit = COPY $f2d51    %0:fp64bit = COPY $f0d52    %4:fp64bit = COPY $f2d53    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 $f15d54    %3:vr64bit = nofpexcept WFMADB %0, %1, %4, implicit $fpc55    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)56    Return57 58...59 60 61# CHECK-LABEL: fun1:62# CHECK: madb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload63---64name:            fun165alignment:       1666tracksRegLiveness: true67registers: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 }73liveins:74  - { reg: '$f0d', virtual-reg: '%0' }75  - { reg: '$f2d', virtual-reg: '%1' }76  - { reg: '$r2d', virtual-reg: '%2' }77frameInfo:78  maxAlignment:    179machineFunctionInfo: {}80body:             |81  bb.0:82    liveins: $f0d, $f2d, $r2d83  84    %2:addr64bit = COPY $r2d85    %1:fp64bit = COPY $f2d86    %0:fp64bit = COPY $f0d87    %4:fp64bit = COPY $f2d88    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 $f15d89    %3:vr64bit = nofpexcept WFMADB %1, %0, %4, implicit $fpc90    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)91    Return92 93...94 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, %f098---99name:            fun2100alignment:       16101tracksRegLiveness: true102registers: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 }108liveins:109  - { reg: '$f0d', virtual-reg: '%0' }110  - { reg: '$f2d', virtual-reg: '%1' }111  - { reg: '$r2d', virtual-reg: '%2' }112frameInfo:113  maxAlignment:    1114machineFunctionInfo: {}115body:             |116  bb.0:117    liveins: $f0d, $f2d, $r2d118  119    %2:addr64bit = COPY $r2d120    %1:vr64bit = COPY $f2d121    %0:fp64bit = COPY $f0d122    %4:fp64bit = COPY $f2d123    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 $f15d124    %3:vr64bit = nofpexcept WFMADB %1, %0, %4, implicit $fpc125    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)126    Return127 128...129 130 131# MADB can't be used unless accumulator and result registers are the same.132# CHECK-LABEL: fun3:133# CHECK: wfmadb  %f0, %f0, %f1, %f2134---135name:            fun3136alignment:       16137tracksRegLiveness: true138registers: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 }144liveins:145  - { reg: '$f0d', virtual-reg: '%0' }146  - { reg: '$f2d', virtual-reg: '%1' }147  - { reg: '$r2d', virtual-reg: '%2' }148frameInfo:149  maxAlignment:    1150machineFunctionInfo: {}151body:             |152  bb.0:153    liveins: $f0d, $f2d, $r2d154  155    %2:addr64bit = COPY $r2d156    %1:fp64bit = COPY $f2d157    %0:fp64bit = COPY $f0d158    %4:fp64bit = COPY $f2d159    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 $f15d160    %3:vr64bit = nofpexcept WFMADB %4, %1, %0, implicit $fpc161    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)162    Return163 164...165 166 167# CHECK-LABEL: fun4:168# CHECK: maeb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload169---170name:            fun4171alignment:       16172tracksRegLiveness: true173registers: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 }179liveins:180  - { reg: '$f0s', virtual-reg: '%0' }181  - { reg: '$f2s', virtual-reg: '%1' }182  - { reg: '$r2d', virtual-reg: '%2' }183frameInfo:184  maxAlignment:    1185machineFunctionInfo: {}186body:             |187  bb.0:188    liveins: $f0d, $f2d, $r2d189  190    %2:addr64bit = COPY $r2d191    %1:fp32bit = COPY $f2s192    %0:fp32bit = COPY $f0s193    %4:fp32bit = COPY $f2s194    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 $f15d195    %3:vr32bit = nofpexcept WFMASB %0, %1, %4, implicit $fpc196    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)197    Return198 199...200 201 202# CHECK-LABEL: fun5:203# CHECK: maeb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload204---205name:            fun5206alignment:       16207tracksRegLiveness: true208registers: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 }214liveins:215  - { reg: '$f0s', virtual-reg: '%0' }216  - { reg: '$f2s', virtual-reg: '%1' }217  - { reg: '$r2d', virtual-reg: '%2' }218frameInfo:219  maxAlignment:    1220machineFunctionInfo: {}221body:             |222  bb.0:223    liveins: $f0d, $f2d, $r2d224  225    %2:addr64bit = COPY $r2d226    %1:fp32bit = COPY $f2s227    %0:fp32bit = COPY $f0s228    %4:fp32bit = COPY $f2s229    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 $f15d230    %3:vr32bit = nofpexcept WFMASB %1, %0, %4, implicit $fpc231    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)232    Return233 234...235 236 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, %f0240---241name:            fun6242alignment:       16243tracksRegLiveness: true244registers: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 }250liveins:251  - { reg: '$f0s', virtual-reg: '%0' }252  - { reg: '$f2s', virtual-reg: '%1' }253  - { reg: '$r2d', virtual-reg: '%2' }254frameInfo:255  maxAlignment:    1256machineFunctionInfo: {}257body:             |258  bb.0:259    liveins: $f0d, $f2d, $r2d260  261    %2:addr64bit = COPY $r2d262    %1:vr32bit = COPY $f2s263    %0:fp32bit = COPY $f0s264    %4:fp32bit = COPY $f2s265    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 $f15d266    %3:vr32bit = nofpexcept WFMASB %1, %0, %4, implicit $fpc267    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)268    Return269 270...271 272 273# MAEB can't be used unless accumulator and result registers are the same.274# CHECK-LABEL: fun7:275# CHECK: wfmasb  %f0, %f0, %f1, %f2276---277name:            fun7278alignment:       16279tracksRegLiveness: true280registers: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 }286liveins:287  - { reg: '$f0s', virtual-reg: '%0' }288  - { reg: '$f2s', virtual-reg: '%1' }289  - { reg: '$r2d', virtual-reg: '%2' }290frameInfo:291  maxAlignment:    1292machineFunctionInfo: {}293body:             |294  bb.0:295    liveins: $f0d, $f2d, $r2d296  297    %2:addr64bit = COPY $r2d298    %1:fp32bit = COPY $f2s299    %0:fp32bit = COPY $f0s300    %4:fp32bit = COPY $f2s301    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 $f15d302    %3:vr32bit = nofpexcept WFMASB %4, %1, %0, implicit $fpc303    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)304    Return305 306...307 308 309# CHECK-LABEL: fun8:310# CHECK: msdb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload311---312name:            fun8313alignment:       16314tracksRegLiveness: true315registers: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 }321liveins:322  - { reg: '$f0d', virtual-reg: '%0' }323  - { reg: '$f2d', virtual-reg: '%1' }324  - { reg: '$r2d', virtual-reg: '%2' }325frameInfo:326  maxAlignment:    1327machineFunctionInfo: {}328body:             |329  bb.0:330    liveins: $f0d, $f2d, $r2d331  332    %2:addr64bit = COPY $r2d333    %1:fp64bit = COPY $f2d334    %0:fp64bit = COPY $f0d335    %4:fp64bit = COPY $f2d336    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 $f15d337    %3:vr64bit = nofpexcept WFMSDB %0, %1, %4, implicit $fpc338    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)339    Return340 341...342 343 344# CHECK-LABEL: fun9:345# CHECK: msdb    %f0, %f1, 160(%r15)             # 8-byte Folded Reload346---347name:            fun9348alignment:       16349tracksRegLiveness: true350registers: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 }356liveins:357  - { reg: '$f0d', virtual-reg: '%0' }358  - { reg: '$f2d', virtual-reg: '%1' }359  - { reg: '$r2d', virtual-reg: '%2' }360frameInfo:361  maxAlignment:    1362machineFunctionInfo: {}363body:             |364  bb.0:365    liveins: $f0d, $f2d, $r2d366  367    %2:addr64bit = COPY $r2d368    %1:fp64bit = COPY $f2d369    %0:fp64bit = COPY $f0d370    %4:fp64bit = COPY $f2d371    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 $f15d372    %3:vr64bit = nofpexcept WFMSDB %1, %0, %4, implicit $fpc373    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)374    Return375 376...377 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, %f0381---382name:            fun10383alignment:       16384tracksRegLiveness: true385registers: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 }391liveins:392  - { reg: '$f0d', virtual-reg: '%0' }393  - { reg: '$f2d', virtual-reg: '%1' }394  - { reg: '$r2d', virtual-reg: '%2' }395frameInfo:396  maxAlignment:    1397machineFunctionInfo: {}398body:             |399  bb.0:400    liveins: $f0d, $f2d, $r2d401  402    %2:addr64bit = COPY $r2d403    %1:vr64bit = COPY $f2d404    %0:fp64bit = COPY $f0d405    %4:fp64bit = COPY $f2d406    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 $f15d407    %3:vr64bit = nofpexcept WFMSDB %1, %0, %4, implicit $fpc408    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)409    Return410 411...412 413 414# MSDB can't be used unless accumulator and result registers are the same.415# CHECK-LABEL: fun11:416# CHECK: wfmsdb  %f0, %f0, %f1, %f2417---418name:            fun11419alignment:       16420tracksRegLiveness: true421registers: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 }427liveins:428  - { reg: '$f0d', virtual-reg: '%0' }429  - { reg: '$f2d', virtual-reg: '%1' }430  - { reg: '$r2d', virtual-reg: '%2' }431frameInfo:432  maxAlignment:    1433machineFunctionInfo: {}434body:             |435  bb.0:436    liveins: $f0d, $f2d, $r2d437  438    %2:addr64bit = COPY $r2d439    %1:fp64bit = COPY $f2d440    %0:fp64bit = COPY $f0d441    %4:fp64bit = COPY $f2d442    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 $f15d443    %3:vr64bit = nofpexcept WFMSDB %4, %1, %0, implicit $fpc444    VST64 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)445    Return446 447...448 449 450# CHECK-LABEL: fun12:451# CHECK: mseb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload452---453name:            fun12454alignment:       16455tracksRegLiveness: true456registers: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 }462liveins:463  - { reg: '$f0s', virtual-reg: '%0' }464  - { reg: '$f2s', virtual-reg: '%1' }465  - { reg: '$r2d', virtual-reg: '%2' }466frameInfo:467  maxAlignment:    1468machineFunctionInfo: {}469body:             |470  bb.0:471    liveins: $f0d, $f2d, $r2d472  473    %2:addr64bit = COPY $r2d474    %1:fp32bit = COPY $f2s475    %0:fp32bit = COPY $f0s476    %4:fp32bit = COPY $f2s477    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 $f15d478    %3:vr32bit = nofpexcept WFMSSB %0, %1, %4, implicit $fpc479    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)480    Return481 482...483 484 485# CHECK-LABEL: fun13:486# CHECK: mseb    %f0, %f1, 160(%r15)             # 4-byte Folded Reload487---488name:            fun13489alignment:       16490tracksRegLiveness: true491registers: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 }497liveins:498  - { reg: '$f0s', virtual-reg: '%0' }499  - { reg: '$f2s', virtual-reg: '%1' }500  - { reg: '$r2d', virtual-reg: '%2' }501frameInfo:502  maxAlignment:    1503machineFunctionInfo: {}504body:             |505  bb.0:506    liveins: $f0d, $f2d, $r2d507  508    %2:addr64bit = COPY $r2d509    %1:fp32bit = COPY $f2s510    %0:fp32bit = COPY $f0s511    %4:fp32bit = COPY $f2s512    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 $f15d513    %3:vr32bit = nofpexcept WFMSSB %1, %0, %4, implicit $fpc514    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)515    Return516 517...518 519 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, %f0523---524name:            fun14525alignment:       16526tracksRegLiveness: true527registers: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 }533liveins:534  - { reg: '$f0s', virtual-reg: '%0' }535  - { reg: '$f2s', virtual-reg: '%1' }536  - { reg: '$r2d', virtual-reg: '%2' }537frameInfo:538  maxAlignment:    1539machineFunctionInfo: {}540body:             |541  bb.0:542    liveins: $f0d, $f2d, $r2d543  544    %2:addr64bit = COPY $r2d545    %1:vr32bit = COPY $f2s546    %0:fp32bit = COPY $f0s547    %4:fp32bit = COPY $f2s548    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 $f15d549    %3:vr32bit = nofpexcept WFMSSB %1, %0, %4, implicit $fpc550    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)551    Return552 553...554 555 556# MSEB can't be used unless accumulator and result registers are the same.557# CHECK-LABEL: fun15:558# CHECK: wfmssb  %f0, %f0, %f1, %f2559---560name:            fun15561alignment:       16562tracksRegLiveness: true563registers: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 }569liveins:570  - { reg: '$f0s', virtual-reg: '%0' }571  - { reg: '$f2s', virtual-reg: '%1' }572  - { reg: '$r2d', virtual-reg: '%2' }573frameInfo:574  maxAlignment:    1575machineFunctionInfo: {}576body:             |577  bb.0:578    liveins: $f0d, $f2d, $r2d579  580    %2:addr64bit = COPY $r2d581    %1:fp32bit = COPY $f2s582    %0:fp32bit = COPY $f0s583    %4:fp32bit = COPY $f2s584    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 $f15d585    %3:vr32bit = nofpexcept WFMSSB %4, %1, %0, implicit $fpc586    VST32 %3, %2, 0, $noreg :: (store (s64) into %ir.Dst)587    Return588 589...590