[PATCH] D119557: [Systemz/z/OS] Centralize emitting the call type information
Kai Nacke via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 14 09:01:31 PST 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG62ba528a6869: [Systemz/z/OS] Centralize emitting the call type information (authored by Kai).
Changed prior to commit:
https://reviews.llvm.org/D119557?vs=407925&id=408444#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119557/new/
https://reviews.llvm.org/D119557
Files:
llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
llvm/test/CodeGen/SystemZ/call-zos-02.ll
Index: llvm/test/CodeGen/SystemZ/call-zos-02.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/SystemZ/call-zos-02.ll
@@ -0,0 +1,17 @@
+; RUN: llc --mtriple=s390x-ibm-zos --show-mc-encoding < %s | FileCheck %s
+
+define internal signext i32 @caller() {
+entry:
+ ret i32 0
+}
+
+
+define hidden signext i32 @caller2() {
+entry:
+; CHECK-LABEL: caller2:
+; CHECK: brasl 7, caller at PLT * encoding: [0xc0,0x75,A,A,A,A]
+; CHECK-NEXT: * fixup A - offset: 2, value: caller at PLT+2, kind: FK_390_PC32DBL
+; CHECK-NEXT: bcr 0, 3 * encoding: [0x07,0x03]
+ %call = call signext i32 @caller()
+ ret i32 %call
+}
Index: llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
===================================================================
--- llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
+++ llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
@@ -33,6 +33,18 @@
return static_cast<SystemZTargetStreamer *>(TS);
}
+ /// Call type information for XPLINK.
+ enum class CallType {
+ BASR76 = 0, // b'x000' == BASR r7,r6
+ BRAS7 = 1, // b'x001' == BRAS r7,ep
+ RESVD_2 = 2, // b'x010'
+ BRASL7 = 3, // b'x011' == BRASL r7,ep
+ RESVD_4 = 4, // b'x100'
+ RESVD_5 = 5, // b'x101'
+ BALR1415 = 6, // b'x110' == BALR r14,r15
+ BASR33 = 7, // b'x111' == BASR r3,r3
+ };
+
public:
SystemZAsmPrinter(TargetMachine &TM, std::unique_ptr<MCStreamer> Streamer)
: AsmPrinter(TM, std::move(Streamer)), SM(*this) {}
@@ -54,6 +66,7 @@
void emitFunctionEntryLabel() override;
private:
+ void emitCallInformation(CallType CT);
void LowerFENTRY_CALL(const MachineInstr &MI, SystemZMCInstLower &MCIL);
void LowerSTACKMAP(const MachineInstr &MI);
void LowerPATCHPOINT(const MachineInstr &MI, SystemZMCInstLower &Lower);
Index: llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
+++ llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
@@ -124,6 +124,18 @@
.addImm(0);
}
+// The XPLINK ABI requires that a no-op encoding the call type is emitted after
+// each call to a subroutine. This information can be used by the called
+// function to determine its entry point, e.g. for generating a backtrace. The
+// call type is encoded as a register number in the bcr instruction. See
+// enumeration CallType for the possible values.
+void SystemZAsmPrinter::emitCallInformation(CallType CT) {
+ EmitToStreamer(*OutStreamer,
+ MCInstBuilder(SystemZ::BCRAsm)
+ .addImm(0)
+ .addReg(SystemZMC::GR64Regs[static_cast<unsigned>(CT)]));
+}
+
void SystemZAsmPrinter::emitInstruction(const MachineInstr *MI) {
SystemZMCInstLower Lower(MF->getContext(), *this);
MCInst LoweredMI;
@@ -234,18 +246,14 @@
.addReg(SystemZ::R7D)
.addExpr(Lower.getExpr(MI->getOperand(0),
MCSymbolRefExpr::VK_PLT)));
- EmitToStreamer(
- *OutStreamer,
- MCInstBuilder(SystemZ::BCRAsm).addImm(0).addReg(SystemZ::R3D));
+ emitCallInformation(CallType::BRASL7);
return;
case SystemZ::CallBASR_XPLINK64:
EmitToStreamer(*OutStreamer, MCInstBuilder(SystemZ::BASR)
.addReg(SystemZ::R7D)
.addReg(MI->getOperand(0).getReg()));
- EmitToStreamer(
- *OutStreamer,
- MCInstBuilder(SystemZ::BCRAsm).addImm(0).addReg(SystemZ::R0D));
+ emitCallInformation(CallType::BASR76);
return;
case SystemZ::CallBRASL:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119557.408444.patch
Type: text/x-patch
Size: 3684 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220214/b1de5d0c/attachment.bin>
More information about the llvm-commits
mailing list