| # RUN: llc -mtriple=s390x-linux-gnu -mcpu=z17 -start-before=greedy %s -o - \ | |
| # RUN: -verify-machineinstrs | FileCheck %s | |
| # | |
| # Test that folding of a memop does not happen during regalloc in a case that | |
| # would cause tied registers to be different. | |
| --- | | |
| define void @fun() { ret void } | |
| ... | |
| # CHECK-LABEL: fun: | |
| --- | |
| name: fun | |
| alignment: 2 | |
| tracksRegLiveness: true | |
| noPhis: true | |
| isSSA: false | |
| noVRegs: false | |
| hasFakeUses: false | |
| registers: | |
| - { id: 0, class: vr64bit } | |
| - { id: 1, class: vr64bit } | |
| - { id: 2, class: vr64bit } | |
| - { id: 3, class: fp64bit } | |
| - { id: 4, class: fp64bit } | |
| - { id: 5, class: fp64bit } | |
| - { id: 6, class: fp64bit } | |
| - { id: 7, class: gr32bit } | |
| - { id: 8, class: vr64bit } | |
| - { id: 9, class: vr64bit } | |
| - { id: 10, class: vr64bit } | |
| - { id: 11, class: grx32bit } | |
| - { id: 12, class: fp64bit } | |
| - { id: 13, class: addr64bit } | |
| - { id: 14, class: vr64bit } | |
| - { id: 15, class: fp64bit } | |
| - { id: 16, class: grx32bit } | |
| - { id: 17, class: fp64bit } | |
| - { id: 18, class: fp64bit } | |
| - { id: 19, class: vr64bit } | |
| - { id: 20, class: fp64bit } | |
| - { id: 21, class: vr64bit } | |
| - { id: 22, class: addr64bit } | |
| - { id: 23, class: vr64bit } | |
| - { id: 24, class: vr64bit } | |
| - { id: 25, class: fp64bit } | |
| - { id: 26, class: fp64bit } | |
| - { id: 27, class: vr64bit } | |
| liveins: | |
| - { reg: '$f0d', virtual-reg: '%3' } | |
| - { reg: '$f2d', virtual-reg: '%4' } | |
| - { reg: '$f4d', virtual-reg: '%5' } | |
| - { reg: '$f6d', virtual-reg: '%6' } | |
| - { reg: '$r2l', virtual-reg: '%7' } | |
| frameInfo: | |
| maxAlignment: 8 | |
| adjustsStack: true | |
| hasCalls: true | |
| framePointerPolicy: none | |
| fixedStack: | |
| - { id: 0, offset: 16, size: 8, alignment: 8, isImmutable: true } | |
| - { id: 1, offset: 8, size: 8, alignment: 8, isImmutable: true } | |
| - { id: 2, size: 8, alignment: 8, isImmutable: true } | |
| machineFunctionInfo: {} | |
| body: | | |
| bb.0: | |
| liveins: $f0d, $f2d, $f4d, $f6d, $r2l | |
| %7:gr32bit = COPY $r2l | |
| %6:fp64bit = COPY $f6d | |
| %5:fp64bit = COPY $f4d | |
| %4:fp64bit = COPY $f2d | |
| %3:fp64bit = COPY $f0d | |
| %10:vr64bit = VL64 %fixed-stack.0, 0, $noreg :: (load (s64) from %fixed-stack.0) | |
| %9:vr64bit = VL64 %fixed-stack.1, 0, $noreg :: (load (s64) from %fixed-stack.1) | |
| %8:vr64bit = VL64 %fixed-stack.2, 0, $noreg :: (load (s64) from %fixed-stack.2) | |
| %13:addr64bit = LGHI 0 | |
| bb.1: | |
| successors: %bb.2(0x7c000000), %bb.5(0x04000000) | |
| %12:fp64bit = LZDR | |
| $f0d = COPY %12 | |
| $f2d = COPY %4 | |
| $f4d = COPY %12 | |
| CallBASR %13, $f0d, $f2d, $f4d, csr_systemz_elf, implicit-def dead $r14d, implicit-def dead $cc, implicit $fpc, implicit-def dead $f0d | |
| %15:fp64bit = nofpexcept WFMDB %8, %12, implicit $fpc | |
| dead %25:fp64bit = nofpexcept LTDBR %15, implicit-def $cc, implicit $fpc | |
| BRC 15, 11, %bb.5, implicit killed $cc | |
| J %bb.2 | |
| bb.2: | |
| %26:fp64bit = LZDR | |
| %27:vr64bit = COPY %6 | |
| bb.3: | |
| successors: %bb.1(0x04000000), %bb.4(0x7c000000) | |
| TMLMux %7, 1, implicit-def $cc | |
| BRC 15, 7, %bb.1, implicit killed $cc | |
| J %bb.4 | |
| bb.4: | |
| %19:vr64bit = nofpexcept WFSDB %26, %27, implicit $fpc | |
| %20:fp64bit = LZDR | |
| %21:vr64bit = nofpexcept WFMADB %9, %19, %20, implicit $fpc | |
| $f0d = COPY %21 | |
| $f2d = COPY %20 | |
| $f4d = COPY %20 | |
| CallBASR %13, $f0d, $f2d, $f4d, csr_systemz_elf, implicit-def dead $r14d, implicit-def dead $cc, implicit $fpc, implicit-def dead $f0d | |
| %26:fp64bit = nofpexcept WFMADB %10, %20, %3, implicit $fpc | |
| $f0d = COPY %20 | |
| $f2d = COPY %20 | |
| $f4d = COPY %20 | |
| CallBASR %13, $f0d, $f2d, $f4d, csr_systemz_elf, implicit-def dead $r14d, implicit-def dead $cc, implicit $fpc, implicit-def dead $f0d | |
| %27:vr64bit = COPY %5 | |
| J %bb.3 | |
| bb.5: | |
| $r2l = LHIMux 0 | |
| Return implicit $r2l | |
| ... |