499 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(float %arg0, float %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(double %arg0, double %arg1, ptr %Dst) { ret void }14 define void @fun7(double %arg0, double %arg1, ptr %Dst) { ret void }15 define void @fun8(double %arg0, double %arg1, ptr %Dst) { ret void }16 define void @fun9(float %arg0, float %arg1, ptr %Dst) { ret void }17 define void @fun10(float %arg0, float %arg1, ptr %Dst) { ret void }18 define void @fun11(float %arg0, float %arg1, ptr %Dst) { ret void }19 define void @fun12(float %arg0, float %arg1, ptr %Dst) { ret void }20 21...22 23# CHECK-LABEL: fun0:24# CHECK: cdb %f0, 160(%r15) # 8-byte Folded Reload25---26name: fun027alignment: 1628tracksRegLiveness: true29registers:30 - { id: 0, class: fp64bit }31 - { id: 1, class: fp64bit }32 - { id: 2, class: addr64bit }33 - { id: 3, class: vr64bit }34 - { id: 4, class: gr64bit }35liveins:36 - { reg: '$f0d', virtual-reg: '%0' }37 - { reg: '$f2d', virtual-reg: '%1' }38 - { reg: '$r2d', virtual-reg: '%2' }39frameInfo:40 maxAlignment: 141machineFunctionInfo: {}42body: |43 bb.0:44 liveins: $f0d, $f2d, $r2d45 46 %2:addr64bit = COPY $r2d47 %1:fp64bit = COPY $f2d48 %0:fp64bit = COPY $f0d49 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 $f15d50 nofpexcept WFCDB %0, %1, implicit-def $cc, implicit $fpc51 %4:gr64bit = LGHI 052 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc53 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)54 Return55 56...57 58 59# CHECK-LABEL: fun1:60# CHECK: cdb %f0, 160(%r15) # 8-byte Folded Reload61---62name: fun163alignment: 1664tracksRegLiveness: true65registers:66 - { id: 0, class: fp64bit }67 - { id: 1, class: fp64bit }68 - { id: 2, class: addr64bit }69 - { id: 3, class: vr64bit }70 - { id: 4, class: gr64bit }71liveins:72 - { reg: '$f0d', virtual-reg: '%0' }73 - { reg: '$f2d', virtual-reg: '%1' }74 - { reg: '$r2d', virtual-reg: '%2' }75frameInfo:76 maxAlignment: 177machineFunctionInfo: {}78body: |79 bb.0:80 liveins: $f0d, $f2d, $r2d81 82 %2:addr64bit = COPY $r2d83 %1:fp64bit = COPY $f2d84 %0:fp64bit = COPY $f0d85 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 $f15d86 nofpexcept WFCDB %1, %0, implicit-def $cc, implicit $fpc87 %4:gr64bit = LGHI 088 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc89 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)90 Return91 92...93 94 95# CDB can't be used if one operand is a VR64 (and not FP64).96# CHECK-LABEL: fun2:97# CHECK: ld %f0, 160(%r15) # 8-byte Reload98# CHECK-NEXT: wfcdb %v16, %f099---100name: fun2101alignment: 16102tracksRegLiveness: true103registers:104 - { id: 0, class: fp64bit }105 - { id: 1, class: vr64bit }106 - { id: 2, class: addr64bit }107 - { id: 3, class: vr64bit }108 - { id: 4, class: gr64bit }109liveins:110 - { reg: '$f0d', virtual-reg: '%0' }111 - { reg: '$f2d', virtual-reg: '%1' }112 - { reg: '$r2d', virtual-reg: '%2' }113frameInfo:114 maxAlignment: 1115machineFunctionInfo: {}116body: |117 bb.0:118 liveins: $f0d, $f2d, $r2d119 120 %2:addr64bit = COPY $r2d121 %1:vr64bit = COPY $f2d122 %0:fp64bit = COPY $f0d123 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 $f0d, 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 nofpexcept WFCDB %1, %0, implicit-def $cc, implicit $fpc125 %4:gr64bit = LGHI 0126 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc127 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)128 Return129 130...131 132 133# CHECK-LABEL: fun3:134# CHECK: ceb %f0, 164(%r15) # 4-byte Folded Reload135---136name: fun3137alignment: 16138tracksRegLiveness: true139registers:140 - { id: 0, class: fp32bit }141 - { id: 1, class: fp32bit }142 - { id: 2, class: addr64bit }143 - { id: 3, class: vr32bit }144 - { id: 4, class: gr64bit }145liveins:146 - { reg: '$f0s', virtual-reg: '%0' }147 - { reg: '$f2s', virtual-reg: '%1' }148 - { reg: '$r2d', virtual-reg: '%2' }149frameInfo:150 maxAlignment: 1151machineFunctionInfo: {}152body: |153 bb.0:154 liveins: $f0s, $f2s, $r2d155 156 %2:addr64bit = COPY $r2d157 %1:fp32bit = COPY $f2s158 %0:fp32bit = COPY $f0s159 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 nofpexcept WFCSB %0, %1, implicit-def $cc, implicit $fpc161 %4:gr64bit = LGHI 0162 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc163 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)164 Return165 166...167 168 169# CHECK-LABEL: fun4:170# CHECK: ceb %f0, 164(%r15) # 4-byte Folded Reload171---172name: fun4173alignment: 16174tracksRegLiveness: true175registers:176 - { id: 0, class: fp32bit }177 - { id: 1, class: fp32bit }178 - { id: 2, class: addr64bit }179 - { id: 3, class: vr32bit }180 - { id: 4, class: gr64bit }181liveins:182 - { reg: '$f0s', virtual-reg: '%0' }183 - { reg: '$f2s', virtual-reg: '%1' }184 - { reg: '$r2d', virtual-reg: '%2' }185frameInfo:186 maxAlignment: 1187machineFunctionInfo: {}188body: |189 bb.0:190 liveins: $f0s, $f2s, $r2d191 192 %2:addr64bit = COPY $r2d193 %1:fp32bit = COPY $f2s194 %0:fp32bit = COPY $f0s195 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 $f15d196 nofpexcept WFCSB %1, %0, implicit-def $cc, implicit $fpc197 %4:gr64bit = LGHI 0198 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc199 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)200 Return201 202...203 204 205# CEB can't be used if one operand is a VR32 (and not FP32).206# CHECK-LABEL: fun5:207# CHECK: lde %f0, 164(%r15) # 4-byte Reload208# CHECK-NEXT: wfcsb %v16, %f0209---210name: fun5211alignment: 16212tracksRegLiveness: true213registers:214 - { id: 0, class: fp32bit }215 - { id: 1, class: vr32bit }216 - { id: 2, class: addr64bit }217 - { id: 3, class: vr32bit }218 - { id: 4, class: gr64bit }219liveins:220 - { reg: '$f0s', virtual-reg: '%0' }221 - { reg: '$f2s', virtual-reg: '%1' }222 - { reg: '$r2d', virtual-reg: '%2' }223frameInfo:224 maxAlignment: 1225machineFunctionInfo: {}226body: |227 bb.0:228 liveins: $f0s, $f2s, $r2d229 230 %2:addr64bit = COPY $r2d231 %1:vr32bit = COPY $f2s232 %0:fp32bit = COPY $f0s233 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 $f0d, 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 $f15d234 nofpexcept WFCSB %1, %0, implicit-def $cc, implicit $fpc235 %4:gr64bit = LGHI 0236 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc237 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)238 Return239 240...241 242 243# CHECK-LABEL: fun6:244# CHECK: kdb %f0, 160(%r15) # 8-byte Folded Reload245---246name: fun6247alignment: 16248tracksRegLiveness: true249registers:250 - { id: 0, class: fp64bit }251 - { id: 1, class: fp64bit }252 - { id: 2, class: addr64bit }253 - { id: 3, class: vr64bit }254 - { id: 4, class: gr64bit }255liveins:256 - { reg: '$f0d', virtual-reg: '%0' }257 - { reg: '$f2d', virtual-reg: '%1' }258 - { reg: '$r2d', virtual-reg: '%2' }259frameInfo:260 maxAlignment: 1261machineFunctionInfo: {}262body: |263 bb.0:264 liveins: $f0d, $f2d, $r2d265 266 %2:addr64bit = COPY $r2d267 %1:fp64bit = COPY $f2d268 %0:fp64bit = COPY $f0d269 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 $f15d270 nofpexcept WFKDB %0, %1, implicit-def $cc, implicit $fpc271 %4:gr64bit = LGHI 0272 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc273 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)274 Return275 276...277 278 279# CHECK-LABEL: fun7:280# CHECK: kdb %f0, 160(%r15) # 8-byte Folded Reload281---282name: fun7283alignment: 16284tracksRegLiveness: true285registers:286 - { id: 0, class: fp64bit }287 - { id: 1, class: fp64bit }288 - { id: 2, class: addr64bit }289 - { id: 3, class: vr64bit }290 - { id: 4, class: gr64bit }291liveins:292 - { reg: '$f0d', virtual-reg: '%0' }293 - { reg: '$f2d', virtual-reg: '%1' }294 - { reg: '$r2d', virtual-reg: '%2' }295frameInfo:296 maxAlignment: 1297machineFunctionInfo: {}298body: |299 bb.0:300 liveins: $f0d, $f2d, $r2d301 302 %2:addr64bit = COPY $r2d303 %1:fp64bit = COPY $f2d304 %0:fp64bit = COPY $f0d305 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 $f15d306 nofpexcept WFKDB %1, %0, implicit-def $cc, implicit $fpc307 %4:gr64bit = LGHI 0308 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc309 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)310 Return311 312...313 314 315# KDB can't be used if one operand is a VR64 (and not FP64).316# CHECK-LABEL: fun8:317# CHECK: ld %f0, 160(%r15) # 8-byte Reload318# CHECK-NEXT: wfkdb %v16, %f0319---320name: fun8321alignment: 16322tracksRegLiveness: true323registers:324 - { id: 0, class: fp64bit }325 - { id: 1, class: vr64bit }326 - { id: 2, class: addr64bit }327 - { id: 3, class: vr64bit }328 - { id: 4, class: gr64bit }329liveins:330 - { reg: '$f0d', virtual-reg: '%0' }331 - { reg: '$f2d', virtual-reg: '%1' }332 - { reg: '$r2d', virtual-reg: '%2' }333frameInfo:334 maxAlignment: 1335machineFunctionInfo: {}336body: |337 bb.0:338 liveins: $f0d, $f2d, $r2d339 340 %2:addr64bit = COPY $r2d341 %1:vr64bit = COPY $f2d342 %0:fp64bit = COPY $f0d343 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 $f0d, 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 $f15d344 nofpexcept WFKDB %1, %0, implicit-def $cc, implicit $fpc345 %4:gr64bit = LGHI 0346 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc347 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)348 Return349 350...351 352 353# CHECK-LABEL: fun9:354# CHECK: keb %f0, 164(%r15) # 4-byte Folded Reload355---356name: fun9357alignment: 16358tracksRegLiveness: true359registers:360 - { id: 0, class: fp32bit }361 - { id: 1, class: fp32bit }362 - { id: 2, class: addr64bit }363 - { id: 3, class: vr32bit }364 - { id: 4, class: gr64bit }365liveins:366 - { reg: '$f0s', virtual-reg: '%0' }367 - { reg: '$f2s', virtual-reg: '%1' }368 - { reg: '$r2d', virtual-reg: '%2' }369frameInfo:370 maxAlignment: 1371machineFunctionInfo: {}372body: |373 bb.0:374 liveins: $f0s, $f2s, $r2d375 376 %2:addr64bit = COPY $r2d377 %1:fp32bit = COPY $f2s378 %0:fp32bit = COPY $f0s379 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 $f15d380 nofpexcept WFKSB %0, %1, implicit-def $cc, implicit $fpc381 %4:gr64bit = LGHI 0382 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc383 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)384 Return385 386...387 388 389# CHECK-LABEL: fun10:390# CHECK: keb %f0, 164(%r15) # 4-byte Folded Reload391---392name: fun10393alignment: 16394tracksRegLiveness: true395registers:396 - { id: 0, class: fp32bit }397 - { id: 1, class: fp32bit }398 - { id: 2, class: addr64bit }399 - { id: 3, class: vr32bit }400 - { id: 4, class: gr64bit }401liveins:402 - { reg: '$f0s', virtual-reg: '%0' }403 - { reg: '$f2s', virtual-reg: '%1' }404 - { reg: '$r2d', virtual-reg: '%2' }405frameInfo:406 maxAlignment: 1407machineFunctionInfo: {}408body: |409 bb.0:410 liveins: $f0s, $f2s, $r2d411 412 %2:addr64bit = COPY $r2d413 %1:fp32bit = COPY $f2s414 %0:fp32bit = COPY $f0s415 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 $f15d416 nofpexcept WFKSB %1, %0, implicit-def $cc, implicit $fpc417 %4:gr64bit = LGHI 0418 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc419 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)420 Return421 422...423 424 425# CEB can't be used if one operand is a VR32 (and not FP32).426# CHECK-LABEL: fun11:427# CHECK: lde %f0, 164(%r15) # 4-byte Reload428# CHECK-NEXT: wfksb %v16, %f0429---430name: fun11431alignment: 16432tracksRegLiveness: true433registers:434 - { id: 0, class: fp32bit }435 - { id: 1, class: vr32bit }436 - { id: 2, class: addr64bit }437 - { id: 3, class: vr32bit }438 - { id: 4, class: gr64bit }439liveins:440 - { reg: '$f0s', virtual-reg: '%0' }441 - { reg: '$f2s', virtual-reg: '%1' }442 - { reg: '$r2d', virtual-reg: '%2' }443frameInfo:444 maxAlignment: 1445machineFunctionInfo: {}446body: |447 bb.0:448 liveins: $f0s, $f2s, $r2d449 450 %2:addr64bit = COPY $r2d451 %1:vr32bit = COPY $f2s452 %0:fp32bit = COPY $f0s453 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 $f0d, 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 $f15d454 nofpexcept WFKSB %1, %0, implicit-def $cc, implicit $fpc455 %4:gr64bit = LGHI 0456 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc457 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)458 Return459 460...461 462 463# This test case involves a 128 bit operand (VGMF generating float 1.0).464# CHECK-LABEL: fun12:465# CHECK: vgmf %v0, 2, 8466# CHECK-NEXT: ceb %f0, 164(%r15) # 4-byte Folded Reload467---468name: fun12469alignment: 16470tracksRegLiveness: true471registers:472 - { id: 0, class: fp32bit }473 - { id: 1, class: vr128bit }474 - { id: 2, class: addr64bit }475 - { id: 3, class: vr32bit }476 - { id: 4, class: gr64bit }477liveins:478 - { reg: '$f0s', virtual-reg: '%0' }479 - { reg: '$f2s', virtual-reg: '%1' }480 - { reg: '$r2d', virtual-reg: '%2' }481frameInfo:482 maxAlignment: 1483machineFunctionInfo: {}484body: |485 bb.0:486 liveins: $f0s, $f2s, $r2d487 488 %2:addr64bit = COPY $r2d489 %0:fp32bit = COPY $f0s490 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 $f0d, 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 $f15d491 %1:vr128bit = VGMF 2, 8492 nofpexcept WFCSB %0, %1.subreg_h32:vr128bit, implicit-def $cc, implicit $fpc493 %4:gr64bit = LGHI 0494 %4:gr64bit = LOCGHI %4, 1, 15, 8, implicit killed $cc495 STG %4, %2, 0, $noreg :: (store (s64) into %ir.Dst)496 Return497 498...499