diff options
author | Visoiu Mistrih Francis <890283+francisvm@users.noreply.github.com> | 2024-02-07 14:30:45 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-07 14:30:45 -0800 |
commit | 514686acfda66401869f9599954d731619c12c99 (patch) | |
tree | e6f54cf67bcf93ba60b52723407b9dfc92008f91 /llvm | |
parent | 50ffc53e4708f3484939ef82e7b0309600a8e19f (diff) | |
download | llvm-514686acfda66401869f9599954d731619c12c99.zip llvm-514686acfda66401869f9599954d731619c12c99.tar.gz llvm-514686acfda66401869f9599954d731619c12c99.tar.bz2 |
[RISCV] Add correct Uses, Defs, isReturn to Zcmp (#81039)
* they all do stack adjustments, so they all use and def x2.
* popret and popretz also return
* popretz also defines x10
This adds that to the TD file and updates the PushPopOptimizer to
preserve the extra implicit operands added during frame lowering when
converting to popret(z).
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Target/RISCV/RISCVInstrInfoZc.td | 11 | ||||
-rw-r--r-- | llvm/lib/Target/RISCV/RISCVPushPopOptimizer.cpp | 16 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir | 186 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir | 8 |
4 files changed, 210 insertions, 11 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td index 3506204..a3ec2e5 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td @@ -190,16 +190,19 @@ def CM_MVSA01 : RVInst16CA<0b101011, 0b01, 0b10, (outs SR07:$rs1, SR07:$rs2), } // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]... let DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp] in { -let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in +let hasSideEffects = 0, mayLoad = 0, mayStore = 1, Uses = [X2], Defs = [X2] in def CM_PUSH : RVInstZcCPPP<0b11000, "cm.push">; -let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in +let hasSideEffects = 0, mayLoad = 1, mayStore = 0, isReturn = 1, + Uses = [X2], Defs = [X2] in def CM_POPRET : RVInstZcCPPP<0b11110, "cm.popret">; -let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in +let hasSideEffects = 0, mayLoad = 1, mayStore = 0, isReturn = 1, + Uses = [X2], Defs = [X2, X10] in def CM_POPRETZ : RVInstZcCPPP<0b11100, "cm.popretz">; -let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in +let hasSideEffects = 0, mayLoad = 1, mayStore = 0, + Uses = [X2], Defs = [X2] in def CM_POP : RVInstZcCPPP<0b11010, "cm.pop">; } // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]... diff --git a/llvm/lib/Target/RISCV/RISCVPushPopOptimizer.cpp b/llvm/lib/Target/RISCV/RISCVPushPopOptimizer.cpp index 009dcf5..098e5bb 100644 --- a/llvm/lib/Target/RISCV/RISCVPushPopOptimizer.cpp +++ b/llvm/lib/Target/RISCV/RISCVPushPopOptimizer.cpp @@ -62,9 +62,19 @@ bool RISCVPushPopOpt::usePopRet(MachineBasicBlock::iterator &MBBI, // this will detect all ret instruction. DebugLoc DL = NextI->getDebugLoc(); unsigned Opc = IsReturnZero ? RISCV::CM_POPRETZ : RISCV::CM_POPRET; - BuildMI(*NextI->getParent(), NextI, DL, TII->get(Opc)) - .add(MBBI->getOperand(0)) - .add(MBBI->getOperand(1)); + MachineInstrBuilder PopRetBuilder = + BuildMI(*NextI->getParent(), NextI, DL, TII->get(Opc)) + .add(MBBI->getOperand(0)) + .add(MBBI->getOperand(1)); + + // Copy over the variable implicit uses and defs from the CM_POP. They depend + // on what register list has been picked during frame lowering. + const MCInstrDesc &PopDesc = MBBI->getDesc(); + unsigned FirstNonDeclaredOp = PopDesc.getNumOperands() + + PopDesc.NumImplicitUses + + PopDesc.NumImplicitDefs; + for (unsigned i = FirstNonDeclaredOp; i < MBBI->getNumOperands(); ++i) + PopRetBuilder.add(MBBI->getOperand(i)); MBBI->eraseFromParent(); NextI->eraseFromParent(); diff --git a/llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir b/llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir new file mode 100644 index 0000000..93931ff --- /dev/null +++ b/llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir @@ -0,0 +1,186 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4 +# RUN: llc -mtriple=riscv32 -mattr=+zcmp -x mir -start-before=prologepilog -stop-after=riscv-push-pop-opt -verify-machineinstrs -o - %s \ +# RUN: | FileCheck -check-prefixes=CHECK-ZCMP32 %s +# RUN: llc -mtriple=riscv32 -mattr=+save-restore -x mir -start-before=prologepilog -stop-after=riscv-push-pop-opt -verify-machineinstrs -o - %s \ +# RUN: | FileCheck -check-prefixes=CHECK-LIBCALL32 %s +# RUN: llc -mtriple=riscv64 -mattr=+zcmp -x mir -start-before=prologepilog -stop-after=riscv-push-pop-opt -verify-machineinstrs -o - %s \ +# RUN: | FileCheck -check-prefixes=CHECK-ZCMP64 %s +# RUN: llc -mtriple=riscv64 -mattr=+save-restore -x mir -start-before=prologepilog -stop-after=riscv-push-pop-opt -verify-machineinstrs -o - %s \ +# RUN: | FileCheck -check-prefixes=CHECK-LIBCALL64 %s +# RUN: llc -mtriple=riscv32 -x mir -start-before=prologepilog -stop-after=riscv-push-pop-opt -verify-machineinstrs -o - %s \ +# RUN: | FileCheck -check-prefixes=CHECK-NO-ZCMP32 %s +# RUN: llc -mtriple=riscv64 -x mir -start-before=prologepilog -stop-after=riscv-push-pop-opt -verify-machineinstrs -o - %s \ +# RUN: | FileCheck -check-prefixes=CHECK-NO-ZCMP64 %s +--- +name: popret_rvlist5 +tracksRegLiveness: true +body: | + bb.0: + ; CHECK-ZCMP32-LABEL: name: popret_rvlist5 + ; CHECK-ZCMP32: liveins: $x1, $x8 + ; CHECK-ZCMP32-NEXT: {{ $}} + ; CHECK-ZCMP32-NEXT: frame-setup CM_PUSH 5, 0, implicit-def $x2, implicit $x2, implicit $x1, implicit $x8 + ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8 + ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -4 + ; CHECK-ZCMP32-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-ZCMP32-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-ZCMP32-NEXT: CM_POPRET 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8 + ; + ; CHECK-LIBCALL32-LABEL: name: popret_rvlist5 + ; CHECK-LIBCALL32: liveins: $x1, $x8 + ; CHECK-LIBCALL32-NEXT: {{ $}} + ; CHECK-LIBCALL32-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_1 + ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4 + ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8 + ; CHECK-LIBCALL32-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-LIBCALL32-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-LIBCALL32-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_1, implicit $x2 + ; + ; CHECK-ZCMP64-LABEL: name: popret_rvlist5 + ; CHECK-ZCMP64: liveins: $x1, $x8 + ; CHECK-ZCMP64-NEXT: {{ $}} + ; CHECK-ZCMP64-NEXT: frame-setup CM_PUSH 5, 0, implicit-def $x2, implicit $x2, implicit $x1, implicit $x8 + ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -16 + ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8 + ; CHECK-ZCMP64-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-ZCMP64-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-ZCMP64-NEXT: CM_POPRET 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8 + ; + ; CHECK-LIBCALL64-LABEL: name: popret_rvlist5 + ; CHECK-LIBCALL64: liveins: $x1, $x8 + ; CHECK-LIBCALL64-NEXT: {{ $}} + ; CHECK-LIBCALL64-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_1 + ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8 + ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16 + ; CHECK-LIBCALL64-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-LIBCALL64-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-LIBCALL64-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_1, implicit $x2 + ; + ; CHECK-NO-ZCMP32-LABEL: name: popret_rvlist5 + ; CHECK-NO-ZCMP32: liveins: $x1, $x8 + ; CHECK-NO-ZCMP32-NEXT: {{ $}} + ; CHECK-NO-ZCMP32-NEXT: $x2 = frame-setup ADDI $x2, -16 + ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-NO-ZCMP32-NEXT: SW killed $x1, $x2, 12 :: (store (s32) into %stack.0) + ; CHECK-NO-ZCMP32-NEXT: SW killed $x8, $x2, 8 :: (store (s32) into %stack.1) + ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4 + ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8 + ; CHECK-NO-ZCMP32-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-NO-ZCMP32-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-NO-ZCMP32-NEXT: $x1 = LW $x2, 12 :: (load (s32) from %stack.0) + ; CHECK-NO-ZCMP32-NEXT: $x8 = LW $x2, 8 :: (load (s32) from %stack.1) + ; CHECK-NO-ZCMP32-NEXT: $x2 = frame-destroy ADDI $x2, 16 + ; CHECK-NO-ZCMP32-NEXT: PseudoRET + ; + ; CHECK-NO-ZCMP64-LABEL: name: popret_rvlist5 + ; CHECK-NO-ZCMP64: liveins: $x1, $x8 + ; CHECK-NO-ZCMP64-NEXT: {{ $}} + ; CHECK-NO-ZCMP64-NEXT: $x2 = frame-setup ADDI $x2, -16 + ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-NO-ZCMP64-NEXT: SD killed $x1, $x2, 8 :: (store (s64) into %stack.0) + ; CHECK-NO-ZCMP64-NEXT: SD killed $x8, $x2, 0 :: (store (s64) into %stack.1) + ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8 + ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16 + ; CHECK-NO-ZCMP64-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-NO-ZCMP64-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-NO-ZCMP64-NEXT: $x1 = LD $x2, 8 :: (load (s64) from %stack.0) + ; CHECK-NO-ZCMP64-NEXT: $x8 = LD $x2, 0 :: (load (s64) from %stack.1) + ; CHECK-NO-ZCMP64-NEXT: $x2 = frame-destroy ADDI $x2, 16 + ; CHECK-NO-ZCMP64-NEXT: PseudoRET + $x1 = IMPLICIT_DEF + $x8 = IMPLICIT_DEF + PseudoRET +... +--- +name: popretz_rvlist5 +tracksRegLiveness: true +body: | + bb.0: + ; CHECK-ZCMP32-LABEL: name: popretz_rvlist5 + ; CHECK-ZCMP32: liveins: $x1, $x8 + ; CHECK-ZCMP32-NEXT: {{ $}} + ; CHECK-ZCMP32-NEXT: frame-setup CM_PUSH 5, 0, implicit-def $x2, implicit $x2, implicit $x1, implicit $x8 + ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8 + ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -4 + ; CHECK-ZCMP32-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-ZCMP32-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-ZCMP32-NEXT: CM_POPRETZ 5, 0, implicit-def $x2, implicit-def $x10, implicit $x2, implicit-def $x1, implicit-def $x8 + ; + ; CHECK-LIBCALL32-LABEL: name: popretz_rvlist5 + ; CHECK-LIBCALL32: liveins: $x1, $x8 + ; CHECK-LIBCALL32-NEXT: {{ $}} + ; CHECK-LIBCALL32-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_1 + ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4 + ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8 + ; CHECK-LIBCALL32-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-LIBCALL32-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-LIBCALL32-NEXT: $x10 = ADDI $x0, 0 + ; CHECK-LIBCALL32-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_1, implicit $x2, implicit $x10 + ; + ; CHECK-ZCMP64-LABEL: name: popretz_rvlist5 + ; CHECK-ZCMP64: liveins: $x1, $x8 + ; CHECK-ZCMP64-NEXT: {{ $}} + ; CHECK-ZCMP64-NEXT: frame-setup CM_PUSH 5, 0, implicit-def $x2, implicit $x2, implicit $x1, implicit $x8 + ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -16 + ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8 + ; CHECK-ZCMP64-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-ZCMP64-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-ZCMP64-NEXT: CM_POPRETZ 5, 0, implicit-def $x2, implicit-def $x10, implicit $x2, implicit-def $x1, implicit-def $x8 + ; + ; CHECK-LIBCALL64-LABEL: name: popretz_rvlist5 + ; CHECK-LIBCALL64: liveins: $x1, $x8 + ; CHECK-LIBCALL64-NEXT: {{ $}} + ; CHECK-LIBCALL64-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_1 + ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8 + ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16 + ; CHECK-LIBCALL64-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-LIBCALL64-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-LIBCALL64-NEXT: $x10 = ADDI $x0, 0 + ; CHECK-LIBCALL64-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_1, implicit $x2, implicit $x10 + ; + ; CHECK-NO-ZCMP32-LABEL: name: popretz_rvlist5 + ; CHECK-NO-ZCMP32: liveins: $x1, $x8 + ; CHECK-NO-ZCMP32-NEXT: {{ $}} + ; CHECK-NO-ZCMP32-NEXT: $x2 = frame-setup ADDI $x2, -16 + ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-NO-ZCMP32-NEXT: SW killed $x1, $x2, 12 :: (store (s32) into %stack.0) + ; CHECK-NO-ZCMP32-NEXT: SW killed $x8, $x2, 8 :: (store (s32) into %stack.1) + ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4 + ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8 + ; CHECK-NO-ZCMP32-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-NO-ZCMP32-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-NO-ZCMP32-NEXT: $x10 = ADDI $x0, 0 + ; CHECK-NO-ZCMP32-NEXT: $x1 = LW $x2, 12 :: (load (s32) from %stack.0) + ; CHECK-NO-ZCMP32-NEXT: $x8 = LW $x2, 8 :: (load (s32) from %stack.1) + ; CHECK-NO-ZCMP32-NEXT: $x2 = frame-destroy ADDI $x2, 16 + ; CHECK-NO-ZCMP32-NEXT: PseudoRET implicit $x10 + ; + ; CHECK-NO-ZCMP64-LABEL: name: popretz_rvlist5 + ; CHECK-NO-ZCMP64: liveins: $x1, $x8 + ; CHECK-NO-ZCMP64-NEXT: {{ $}} + ; CHECK-NO-ZCMP64-NEXT: $x2 = frame-setup ADDI $x2, -16 + ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 + ; CHECK-NO-ZCMP64-NEXT: SD killed $x1, $x2, 8 :: (store (s64) into %stack.0) + ; CHECK-NO-ZCMP64-NEXT: SD killed $x8, $x2, 0 :: (store (s64) into %stack.1) + ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8 + ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16 + ; CHECK-NO-ZCMP64-NEXT: $x1 = IMPLICIT_DEF + ; CHECK-NO-ZCMP64-NEXT: $x8 = IMPLICIT_DEF + ; CHECK-NO-ZCMP64-NEXT: $x10 = ADDI $x0, 0 + ; CHECK-NO-ZCMP64-NEXT: $x1 = LD $x2, 8 :: (load (s64) from %stack.0) + ; CHECK-NO-ZCMP64-NEXT: $x8 = LD $x2, 0 :: (load (s64) from %stack.1) + ; CHECK-NO-ZCMP64-NEXT: $x2 = frame-destroy ADDI $x2, 16 + ; CHECK-NO-ZCMP64-NEXT: PseudoRET implicit $x10 + $x1 = IMPLICIT_DEF + $x8 = IMPLICIT_DEF + $x10 = COPY $x0 + PseudoRET implicit $x10 +... diff --git a/llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir b/llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir index d9ccb49..db474b5 100644 --- a/llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir +++ b/llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir @@ -19,7 +19,7 @@ body: | ; CHECK-ZCMP32-LABEL: name: push_rvlist15 ; CHECK-ZCMP32: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27 ; CHECK-ZCMP32-NEXT: {{ $}} - ; CHECK-ZCMP32-NEXT: frame-setup CM_PUSH 15, 0, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27 + ; CHECK-ZCMP32-NEXT: frame-setup CM_PUSH 15, 0, implicit-def $x2, implicit $x2, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27 ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 64 ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -52 ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -48 @@ -47,7 +47,7 @@ body: | ; CHECK-ZCMP32-NEXT: $x25 = IMPLICIT_DEF ; CHECK-ZCMP32-NEXT: $x26 = IMPLICIT_DEF ; CHECK-ZCMP32-NEXT: $x27 = IMPLICIT_DEF - ; CHECK-ZCMP32-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27 + ; CHECK-ZCMP32-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27 ; CHECK-ZCMP32-NEXT: PseudoRET ; ; CHECK-LIBCALL32-LABEL: name: push_rvlist15 @@ -86,7 +86,7 @@ body: | ; CHECK-ZCMP64-LABEL: name: push_rvlist15 ; CHECK-ZCMP64: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27 ; CHECK-ZCMP64-NEXT: {{ $}} - ; CHECK-ZCMP64-NEXT: frame-setup CM_PUSH 15, 0, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27 + ; CHECK-ZCMP64-NEXT: frame-setup CM_PUSH 15, 0, implicit-def $x2, implicit $x2, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27 ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 112 ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -104 ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -96 @@ -114,7 +114,7 @@ body: | ; CHECK-ZCMP64-NEXT: $x25 = IMPLICIT_DEF ; CHECK-ZCMP64-NEXT: $x26 = IMPLICIT_DEF ; CHECK-ZCMP64-NEXT: $x27 = IMPLICIT_DEF - ; CHECK-ZCMP64-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27 + ; CHECK-ZCMP64-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27 ; CHECK-ZCMP64-NEXT: PseudoRET ; ; CHECK-LIBCALL64-LABEL: name: push_rvlist15 |