1# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z14 -start-before=greedy %s -o - \ 2# RUN: | FileCheck %s 3# 4# Test folding of a memory operand into an fp memory instruction. 5 6--- | 7 define void @fun0(double %arg0, double %arg1, double* %Dst) { ret void } 8 define void @fun1(double %arg0, double %arg1, double* %Dst) { ret void } 9 define void @fun2(double %arg0, double %arg1, double* %Dst) { ret void } 10 define void @fun3(float %arg0, float %arg1, float* %Dst) { ret void } 11 define void @fun4(float %arg0, float %arg1, float* %Dst) { ret void } 12 define void @fun5(float %arg0, float %arg1, float* %Dst) { ret void } 13 define void @fun6(double %arg0, double %arg1, double* %Dst) { ret void } 14 define void @fun7(double %arg0, double %arg1, double* %Dst) { ret void } 15 define void @fun8(double %arg0, double %arg1, double* %Dst) { ret void } 16 define void @fun9(float %arg0, float %arg1, float* %Dst) { ret void } 17 define void @fun10(float %arg0, float %arg1, float* %Dst) { ret void } 18 define void @fun11(float %arg0, float %arg1, float* %Dst) { ret void } 19 define void @fun12(double %arg0, double %arg1, double* %Dst) { ret void } 20 define void @fun13(double %arg0, double %arg1, double* %Dst) { ret void } 21 define void @fun14(double %arg0, double %arg1, double* %Dst) { ret void } 22 define void @fun15(float %arg0, float %arg1, float* %Dst) { ret void } 23 define void @fun16(float %arg0, float %arg1, float* %Dst) { ret void } 24 define void @fun17(float %arg0, float %arg1, float* %Dst) { ret void } 25 define void @fun18(double %arg0, double %arg1, double* %Dst) { ret void } 26 define void @fun19(double %arg0, double %arg1, double* %Dst) { ret void } 27 define void @fun20(double %arg0, double %arg1, double* %Dst) { ret void } 28 define void @fun21(float %arg0, float %arg1, float* %Dst) { ret void } 29 define void @fun22(float %arg0, float %arg1, float* %Dst) { ret void } 30 define void @fun23(float %arg0, float %arg1, float* %Dst) { ret void } 31 32... 33 34# Test with both orders of operands since some operations are commutative. 35 36# CHECK-LABEL: fun0: 37# CHECK: adb %f0, 160(%r15) # 8-byte Folded Reload 38--- 39name: fun0 40alignment: 16 41tracksRegLiveness: true 42registers: 43 - { id: 0, class: fp64bit } 44 - { id: 1, class: fp64bit } 45 - { id: 2, class: addr64bit } 46 - { id: 3, class: vr64bit } 47liveins: 48 - { reg: '$f0d', virtual-reg: '%0' } 49 - { reg: '$f2d', virtual-reg: '%1' } 50 - { reg: '$r2d', virtual-reg: '%2' } 51frameInfo: 52 maxAlignment: 1 53machineFunctionInfo: {} 54body: | 55 bb.0: 56 liveins: $f0d, $f2d, $r2d 57 58 %2:addr64bit = COPY $r2d 59 %1:fp64bit = COPY $f2d 60 %0:fp64bit = COPY $f0d 61 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 62 %3:vr64bit = nofpexcept WFADB %0, %1, implicit $fpc 63 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 64 Return 65 66... 67 68 69# CHECK-LABEL: fun1: 70# CHECK: adb %f0, 160(%r15) # 8-byte Folded Reload 71--- 72name: fun1 73alignment: 16 74tracksRegLiveness: true 75registers: 76 - { id: 0, class: fp64bit } 77 - { id: 1, class: fp64bit } 78 - { id: 2, class: addr64bit } 79 - { id: 3, class: vr64bit } 80liveins: 81 - { reg: '$f0d', virtual-reg: '%0' } 82 - { reg: '$f2d', virtual-reg: '%1' } 83 - { reg: '$r2d', virtual-reg: '%2' } 84frameInfo: 85 maxAlignment: 1 86machineFunctionInfo: {} 87body: | 88 bb.0: 89 liveins: $f0d, $f2d, $r2d 90 91 %2:addr64bit = COPY $r2d 92 %1:fp64bit = COPY $f2d 93 %0:fp64bit = COPY $f0d 94 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 95 %3:vr64bit = nofpexcept WFADB %1, %0, implicit $fpc 96 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 97 Return 98 99... 100 101# ADB can't be used if one operand is a VR64 (and not FP64). 102# CHECK-LABEL: fun2: 103# CHECK: wfadb %f0, %v16, %f0 104--- 105name: fun2 106alignment: 16 107tracksRegLiveness: true 108registers: 109 - { id: 0, class: fp64bit } 110 - { id: 1, class: vr64bit } 111 - { id: 2, class: addr64bit } 112 - { id: 3, class: vr64bit } 113liveins: 114 - { reg: '$f0d', virtual-reg: '%0' } 115 - { reg: '$f2d', virtual-reg: '%1' } 116 - { reg: '$r2d', virtual-reg: '%2' } 117frameInfo: 118 maxAlignment: 1 119machineFunctionInfo: {} 120body: | 121 bb.0: 122 liveins: $f0d, $f2d, $r2d 123 124 %2:addr64bit = COPY $r2d 125 %1:vr64bit = COPY $f2d 126 %0:fp64bit = COPY $f0d 127 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 128 %3:vr64bit = nofpexcept WFADB %1, %0, implicit $fpc 129 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 130 Return 131 132... 133 134 135# CHECK-LABEL: fun3: 136# CHECK: aeb %f0, 164(%r15) # 4-byte Folded Reload 137--- 138name: fun3 139alignment: 16 140tracksRegLiveness: true 141registers: 142 - { id: 0, class: fp32bit } 143 - { id: 1, class: fp32bit } 144 - { id: 2, class: addr64bit } 145 - { id: 3, class: vr32bit } 146liveins: 147 - { reg: '$f0s', virtual-reg: '%0' } 148 - { reg: '$f2s', virtual-reg: '%1' } 149 - { reg: '$r2d', virtual-reg: '%2' } 150frameInfo: 151 maxAlignment: 1 152machineFunctionInfo: {} 153body: | 154 bb.0: 155 liveins: $f0s, $f2s, $r2d 156 157 %2:addr64bit = COPY $r2d 158 %1:fp32bit = COPY $f2s 159 %0:fp32bit = COPY $f0s 160 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 161 %3:vr32bit = nofpexcept WFASB %0, %1, implicit $fpc 162 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 163 Return 164 165... 166 167 168# CHECK-LABEL: fun4: 169# CHECK: aeb %f0, 164(%r15) # 4-byte Folded Reload 170--- 171name: fun4 172alignment: 16 173tracksRegLiveness: true 174registers: 175 - { id: 0, class: fp32bit } 176 - { id: 1, class: fp32bit } 177 - { id: 2, class: addr64bit } 178 - { id: 3, class: vr32bit } 179liveins: 180 - { reg: '$f0s', virtual-reg: '%0' } 181 - { reg: '$f2s', virtual-reg: '%1' } 182 - { reg: '$r2d', virtual-reg: '%2' } 183frameInfo: 184 maxAlignment: 1 185machineFunctionInfo: {} 186body: | 187 bb.0: 188 liveins: $f0s, $f2s, $r2d 189 190 %2:addr64bit = COPY $r2d 191 %1:fp32bit = COPY $f2s 192 %0:fp32bit = COPY $f0s 193 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 194 %3:vr32bit = nofpexcept WFASB %1, %0, implicit $fpc 195 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 196 Return 197 198... 199 200 201# AEB can't be used if one operand is a VR64 (and not FP64). 202# CHECK-LABEL: fun5: 203# CHECK: wfasb %f0, %v16, %f0 204--- 205name: fun5 206alignment: 16 207tracksRegLiveness: true 208registers: 209 - { id: 0, class: fp32bit } 210 - { id: 1, class: vr32bit } 211 - { id: 2, class: addr64bit } 212 - { id: 3, class: vr32bit } 213liveins: 214 - { reg: '$f0s', virtual-reg: '%0' } 215 - { reg: '$f2s', virtual-reg: '%1' } 216 - { reg: '$r2d', virtual-reg: '%2' } 217frameInfo: 218 maxAlignment: 1 219machineFunctionInfo: {} 220body: | 221 bb.0: 222 liveins: $f0s, $f2s, $r2d 223 224 %2:addr64bit = COPY $r2d 225 %1:vr32bit = COPY $f2s 226 %0:fp32bit = COPY $f0s 227 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 228 %3:vr32bit = nofpexcept WFASB %1, %0, implicit $fpc 229 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 230 Return 231 232... 233 234 235# CHECK-LABEL: fun6: 236# CHECK: sdb %f0, 160(%r15) # 8-byte Folded Reload 237--- 238name: fun6 239alignment: 16 240tracksRegLiveness: true 241registers: 242 - { id: 0, class: fp64bit } 243 - { id: 1, class: fp64bit } 244 - { id: 2, class: addr64bit } 245 - { id: 3, class: vr64bit } 246liveins: 247 - { reg: '$f0d', virtual-reg: '%0' } 248 - { reg: '$f2d', virtual-reg: '%1' } 249 - { reg: '$r2d', virtual-reg: '%2' } 250frameInfo: 251 maxAlignment: 1 252machineFunctionInfo: {} 253body: | 254 bb.0: 255 liveins: $f0d, $f2d, $r2d 256 257 %2:addr64bit = COPY $r2d 258 %1:fp64bit = COPY $f2d 259 %0:fp64bit = COPY $f0d 260 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 261 %3:vr64bit = nofpexcept WFSDB %0, %1, implicit $fpc 262 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 263 Return 264 265... 266 267 268# CHECK-LABEL: fun7: 269# CHECK: wfsdb %f0, %f1, %f0 270--- 271name: fun7 272alignment: 16 273tracksRegLiveness: true 274registers: 275 - { id: 0, class: fp64bit } 276 - { id: 1, class: fp64bit } 277 - { id: 2, class: addr64bit } 278 - { id: 3, class: vr64bit } 279liveins: 280 - { reg: '$f0d', virtual-reg: '%0' } 281 - { reg: '$f2d', virtual-reg: '%1' } 282 - { reg: '$r2d', virtual-reg: '%2' } 283frameInfo: 284 maxAlignment: 1 285machineFunctionInfo: {} 286body: | 287 bb.0: 288 liveins: $f0d, $f2d, $r2d 289 290 %2:addr64bit = COPY $r2d 291 %1:fp64bit = COPY $f2d 292 %0:fp64bit = COPY $f0d 293 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 294 %3:vr64bit = nofpexcept WFSDB %1, %0, implicit $fpc 295 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 296 Return 297 298... 299 300# SDB can't be used if one operand is a VR64 (and not FP64). 301# CHECK-LABEL: fun8: 302# CHECK: wfsdb %f0, %f0, %v16 303--- 304name: fun8 305alignment: 16 306tracksRegLiveness: true 307registers: 308 - { id: 0, class: fp64bit } 309 - { id: 1, class: vr64bit } 310 - { id: 2, class: addr64bit } 311 - { id: 3, class: vr64bit } 312liveins: 313 - { reg: '$f0d', virtual-reg: '%0' } 314 - { reg: '$f2d', virtual-reg: '%1' } 315 - { reg: '$r2d', virtual-reg: '%2' } 316frameInfo: 317 maxAlignment: 1 318machineFunctionInfo: {} 319body: | 320 bb.0: 321 liveins: $f0d, $f2d, $r2d 322 323 %2:addr64bit = COPY $r2d 324 %1:vr64bit = COPY $f2d 325 %0:fp64bit = COPY $f0d 326 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 327 %3:vr64bit = nofpexcept WFSDB %0, %1, implicit $fpc 328 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 329 Return 330 331... 332 333 334# CHECK-LABEL: fun9: 335# CHECK: seb %f0, 164(%r15) # 4-byte Folded Reload 336--- 337name: fun9 338alignment: 16 339tracksRegLiveness: true 340registers: 341 - { id: 0, class: fp32bit } 342 - { id: 1, class: fp32bit } 343 - { id: 2, class: addr64bit } 344 - { id: 3, class: vr32bit } 345liveins: 346 - { reg: '$f0s', virtual-reg: '%0' } 347 - { reg: '$f2s', virtual-reg: '%1' } 348 - { reg: '$r2d', virtual-reg: '%2' } 349frameInfo: 350 maxAlignment: 1 351machineFunctionInfo: {} 352body: | 353 bb.0: 354 liveins: $f0s, $f2s, $r2d 355 356 %2:addr64bit = COPY $r2d 357 %1:fp32bit = COPY $f2s 358 %0:fp32bit = COPY $f0s 359 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 360 %3:vr32bit = nofpexcept WFSSB %0, %1, implicit $fpc 361 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 362 Return 363 364... 365 366 367# CHECK-LABEL: fun10: 368# CHECK: wfssb %f0, %f1, %f0 369--- 370name: fun10 371alignment: 16 372tracksRegLiveness: true 373registers: 374 - { id: 0, class: fp32bit } 375 - { id: 1, class: fp32bit } 376 - { id: 2, class: addr64bit } 377 - { id: 3, class: vr32bit } 378liveins: 379 - { reg: '$f0s', virtual-reg: '%0' } 380 - { reg: '$f2s', virtual-reg: '%1' } 381 - { reg: '$r2d', virtual-reg: '%2' } 382frameInfo: 383 maxAlignment: 1 384machineFunctionInfo: {} 385body: | 386 bb.0: 387 liveins: $f0s, $f2s, $r2d 388 389 %2:addr64bit = COPY $r2d 390 %1:fp32bit = COPY $f2s 391 %0:fp32bit = COPY $f0s 392 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 393 %3:vr32bit = nofpexcept WFSSB %1, %0, implicit $fpc 394 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 395 Return 396 397... 398 399 400# SEB can't be used if one operand is a VR32 (and not FP32). 401# CHECK-LABEL: fun11: 402# CHECK: wfssb %f0, %f0, %v16 403--- 404name: fun11 405alignment: 16 406tracksRegLiveness: true 407registers: 408 - { id: 0, class: fp32bit } 409 - { id: 1, class: vr32bit } 410 - { id: 2, class: addr64bit } 411 - { id: 3, class: vr32bit } 412liveins: 413 - { reg: '$f0s', virtual-reg: '%0' } 414 - { reg: '$f2s', virtual-reg: '%1' } 415 - { reg: '$r2d', virtual-reg: '%2' } 416frameInfo: 417 maxAlignment: 1 418machineFunctionInfo: {} 419body: | 420 bb.0: 421 liveins: $f0s, $f2s, $r2d 422 423 %2:addr64bit = COPY $r2d 424 %1:vr32bit = COPY $f2s 425 %0:fp32bit = COPY $f0s 426 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 427 %3:vr32bit = nofpexcept WFSSB %0, %1, implicit $fpc 428 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 429 Return 430 431... 432 433# CHECK-LABEL: fun12: 434# CHECK: ddb %f0, 160(%r15) # 8-byte Folded Reload 435--- 436name: fun12 437alignment: 16 438tracksRegLiveness: true 439registers: 440 - { id: 0, class: fp64bit } 441 - { id: 1, class: fp64bit } 442 - { id: 2, class: addr64bit } 443 - { id: 3, class: vr64bit } 444liveins: 445 - { reg: '$f0d', virtual-reg: '%0' } 446 - { reg: '$f2d', virtual-reg: '%1' } 447 - { reg: '$r2d', virtual-reg: '%2' } 448frameInfo: 449 maxAlignment: 1 450machineFunctionInfo: {} 451body: | 452 bb.0: 453 liveins: $f0d, $f2d, $r2d 454 455 %2:addr64bit = COPY $r2d 456 %1:fp64bit = COPY $f2d 457 %0:fp64bit = COPY $f0d 458 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 459 %3:vr64bit = nofpexcept WFDDB %0, %1, implicit $fpc 460 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 461 Return 462 463... 464 465 466# CHECK-LABEL: fun13: 467# CHECK: wfddb %f0, %f1, %f0 468--- 469name: fun13 470alignment: 16 471tracksRegLiveness: true 472registers: 473 - { id: 0, class: fp64bit } 474 - { id: 1, class: fp64bit } 475 - { id: 2, class: addr64bit } 476 - { id: 3, class: vr64bit } 477liveins: 478 - { reg: '$f0d', virtual-reg: '%0' } 479 - { reg: '$f2d', virtual-reg: '%1' } 480 - { reg: '$r2d', virtual-reg: '%2' } 481frameInfo: 482 maxAlignment: 1 483machineFunctionInfo: {} 484body: | 485 bb.0: 486 liveins: $f0d, $f2d, $r2d 487 488 %2:addr64bit = COPY $r2d 489 %1:fp64bit = COPY $f2d 490 %0:fp64bit = COPY $f0d 491 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 492 %3:vr64bit = nofpexcept WFDDB %1, %0, implicit $fpc 493 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 494 Return 495 496... 497 498# DDB can't be used if one operand is a VR64 (and not FP64). 499# CHECK-LABEL: fun14: 500# CHECK: wfddb %f0, %f0, %v16 501--- 502name: fun14 503alignment: 16 504tracksRegLiveness: true 505registers: 506 - { id: 0, class: fp64bit } 507 - { id: 1, class: vr64bit } 508 - { id: 2, class: addr64bit } 509 - { id: 3, class: vr64bit } 510liveins: 511 - { reg: '$f0d', virtual-reg: '%0' } 512 - { reg: '$f2d', virtual-reg: '%1' } 513 - { reg: '$r2d', virtual-reg: '%2' } 514frameInfo: 515 maxAlignment: 1 516machineFunctionInfo: {} 517body: | 518 bb.0: 519 liveins: $f0d, $f2d, $r2d 520 521 %2:addr64bit = COPY $r2d 522 %1:vr64bit = COPY $f2d 523 %0:fp64bit = COPY $f0d 524 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 525 %3:vr64bit = nofpexcept WFDDB %0, %1, implicit $fpc 526 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 527 Return 528 529... 530 531 532# CHECK-LABEL: fun15: 533# CHECK: deb %f0, 164(%r15) # 4-byte Folded Reload 534--- 535name: fun15 536alignment: 16 537tracksRegLiveness: true 538registers: 539 - { id: 0, class: fp32bit } 540 - { id: 1, class: fp32bit } 541 - { id: 2, class: addr64bit } 542 - { id: 3, class: vr32bit } 543liveins: 544 - { reg: '$f0s', virtual-reg: '%0' } 545 - { reg: '$f2s', virtual-reg: '%1' } 546 - { reg: '$r2d', virtual-reg: '%2' } 547frameInfo: 548 maxAlignment: 1 549machineFunctionInfo: {} 550body: | 551 bb.0: 552 liveins: $f0s, $f2s, $r2d 553 554 %2:addr64bit = COPY $r2d 555 %1:fp32bit = COPY $f2s 556 %0:fp32bit = COPY $f0s 557 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 558 %3:vr32bit = nofpexcept WFDSB %0, %1, implicit $fpc 559 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 560 Return 561 562... 563 564 565# CHECK-LABEL: fun16: 566# CHECK: wfdsb %f0, %f1, %f0 567--- 568name: fun16 569alignment: 16 570tracksRegLiveness: true 571registers: 572 - { id: 0, class: fp32bit } 573 - { id: 1, class: fp32bit } 574 - { id: 2, class: addr64bit } 575 - { id: 3, class: vr32bit } 576liveins: 577 - { reg: '$f0s', virtual-reg: '%0' } 578 - { reg: '$f2s', virtual-reg: '%1' } 579 - { reg: '$r2d', virtual-reg: '%2' } 580frameInfo: 581 maxAlignment: 1 582machineFunctionInfo: {} 583body: | 584 bb.0: 585 liveins: $f0s, $f2s, $r2d 586 587 %2:addr64bit = COPY $r2d 588 %1:fp32bit = COPY $f2s 589 %0:fp32bit = COPY $f0s 590 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 591 %3:vr32bit = nofpexcept WFDSB %1, %0, implicit $fpc 592 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 593 Return 594 595... 596 597 598# DEB can't be used if one operand is a VR32 (and not FP32). 599# CHECK-LABEL: fun17: 600# CHECK: wfdsb %f0, %f0, %v16 601--- 602name: fun17 603alignment: 16 604tracksRegLiveness: true 605registers: 606 - { id: 0, class: fp32bit } 607 - { id: 1, class: vr32bit } 608 - { id: 2, class: addr64bit } 609 - { id: 3, class: vr32bit } 610liveins: 611 - { reg: '$f0s', virtual-reg: '%0' } 612 - { reg: '$f2s', virtual-reg: '%1' } 613 - { reg: '$r2d', virtual-reg: '%2' } 614frameInfo: 615 maxAlignment: 1 616machineFunctionInfo: {} 617body: | 618 bb.0: 619 liveins: $f0s, $f2s, $r2d 620 621 %2:addr64bit = COPY $r2d 622 %1:vr32bit = COPY $f2s 623 %0:fp32bit = COPY $f0s 624 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 625 %3:vr32bit = nofpexcept WFDSB %0, %1, implicit $fpc 626 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 627 Return 628 629... 630 631 632# CHECK-LABEL: fun18: 633# CHECK: mdb %f0, 160(%r15) # 8-byte Folded Reload 634--- 635name: fun18 636alignment: 16 637tracksRegLiveness: true 638registers: 639 - { id: 0, class: fp64bit } 640 - { id: 1, class: fp64bit } 641 - { id: 2, class: addr64bit } 642 - { id: 3, class: vr64bit } 643liveins: 644 - { reg: '$f0d', virtual-reg: '%0' } 645 - { reg: '$f2d', virtual-reg: '%1' } 646 - { reg: '$r2d', virtual-reg: '%2' } 647frameInfo: 648 maxAlignment: 1 649machineFunctionInfo: {} 650body: | 651 bb.0: 652 liveins: $f0d, $f2d, $r2d 653 654 %2:addr64bit = COPY $r2d 655 %1:fp64bit = COPY $f2d 656 %0:fp64bit = COPY $f0d 657 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 658 %3:vr64bit = nofpexcept WFMDB %0, %1, implicit $fpc 659 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 660 Return 661 662... 663 664 665# CHECK-LABEL: fun19: 666# CHECK: mdb %f0, 160(%r15) # 8-byte Folded Reload 667--- 668name: fun19 669alignment: 16 670tracksRegLiveness: true 671registers: 672 - { id: 0, class: fp64bit } 673 - { id: 1, class: fp64bit } 674 - { id: 2, class: addr64bit } 675 - { id: 3, class: vr64bit } 676liveins: 677 - { reg: '$f0d', virtual-reg: '%0' } 678 - { reg: '$f2d', virtual-reg: '%1' } 679 - { reg: '$r2d', virtual-reg: '%2' } 680frameInfo: 681 maxAlignment: 1 682machineFunctionInfo: {} 683body: | 684 bb.0: 685 liveins: $f0d, $f2d, $r2d 686 687 %2:addr64bit = COPY $r2d 688 %1:fp64bit = COPY $f2d 689 %0:fp64bit = COPY $f0d 690 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 691 %3:vr64bit = nofpexcept WFMDB %1, %0, implicit $fpc 692 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 693 Return 694 695... 696 697# MDB can't be used if one operand is a VR64 (and not FP64). 698# CHECK-LABEL: fun20: 699# CHECK: wfmdb %f0, %v16, %f0 700--- 701name: fun20 702alignment: 16 703tracksRegLiveness: true 704registers: 705 - { id: 0, class: fp64bit } 706 - { id: 1, class: vr64bit } 707 - { id: 2, class: addr64bit } 708 - { id: 3, class: vr64bit } 709liveins: 710 - { reg: '$f0d', virtual-reg: '%0' } 711 - { reg: '$f2d', virtual-reg: '%1' } 712 - { reg: '$r2d', virtual-reg: '%2' } 713frameInfo: 714 maxAlignment: 1 715machineFunctionInfo: {} 716body: | 717 bb.0: 718 liveins: $f0d, $f2d, $r2d 719 720 %2:addr64bit = COPY $r2d 721 %1:vr64bit = COPY $f2d 722 %0:fp64bit = COPY $f0d 723 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 724 %3:vr64bit = nofpexcept WFMDB %1, %0, implicit $fpc 725 VST64 %3, %2, 0, $noreg :: (store 8 into %ir.Dst) 726 Return 727 728... 729 730 731# CHECK-LABEL: fun21: 732# CHECK: meeb %f0, 164(%r15) # 4-byte Folded Reload 733--- 734name: fun21 735alignment: 16 736tracksRegLiveness: true 737registers: 738 - { id: 0, class: fp32bit } 739 - { id: 1, class: fp32bit } 740 - { id: 2, class: addr64bit } 741 - { id: 3, class: vr32bit } 742liveins: 743 - { reg: '$f0s', virtual-reg: '%0' } 744 - { reg: '$f2s', virtual-reg: '%1' } 745 - { reg: '$r2d', virtual-reg: '%2' } 746frameInfo: 747 maxAlignment: 1 748machineFunctionInfo: {} 749body: | 750 bb.0: 751 liveins: $f0s, $f2s, $r2d 752 753 %2:addr64bit = COPY $r2d 754 %1:fp32bit = COPY $f2s 755 %0:fp32bit = COPY $f0s 756 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 757 %3:vr32bit = nofpexcept WFMSB %0, %1, implicit $fpc 758 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 759 Return 760 761... 762 763 764# CHECK-LABEL: fun22: 765# CHECK: meeb %f0, 164(%r15) # 4-byte Folded Reload 766--- 767name: fun22 768alignment: 16 769tracksRegLiveness: true 770registers: 771 - { id: 0, class: fp32bit } 772 - { id: 1, class: fp32bit } 773 - { id: 2, class: addr64bit } 774 - { id: 3, class: vr32bit } 775liveins: 776 - { reg: '$f0s', virtual-reg: '%0' } 777 - { reg: '$f2s', virtual-reg: '%1' } 778 - { reg: '$r2d', virtual-reg: '%2' } 779frameInfo: 780 maxAlignment: 1 781machineFunctionInfo: {} 782body: | 783 bb.0: 784 liveins: $f0s, $f2s, $r2d 785 786 %2:addr64bit = COPY $r2d 787 %1:fp32bit = COPY $f2s 788 %0:fp32bit = COPY $f0s 789 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 790 %3:vr32bit = nofpexcept WFMSB %1, %0, implicit $fpc 791 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 792 Return 793 794... 795 796 797# MEEB can't be used if one operand is a VR32 (and not FP32). 798# CHECK-LABEL: fun23: 799# CHECK: wfmsb %f0, %v16, %f0 800--- 801name: fun23 802alignment: 16 803tracksRegLiveness: true 804registers: 805 - { id: 0, class: fp32bit } 806 - { id: 1, class: vr32bit } 807 - { id: 2, class: addr64bit } 808 - { id: 3, class: vr32bit } 809liveins: 810 - { reg: '$f0s', virtual-reg: '%0' } 811 - { reg: '$f2s', virtual-reg: '%1' } 812 - { reg: '$r2d', virtual-reg: '%2' } 813frameInfo: 814 maxAlignment: 1 815machineFunctionInfo: {} 816body: | 817 bb.0: 818 liveins: $f0s, $f2s, $r2d 819 820 %2:addr64bit = COPY $r2d 821 %1:vr32bit = COPY $f2s 822 %0:fp32bit = COPY $f0s 823 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 824 %3:vr32bit = nofpexcept WFMSB %1, %0, implicit $fpc 825 VST32 %3, %2, 0, $noreg :: (store 4 into %ir.Dst) 826 Return 827 828... 829