[PATCH] D119557: [Systemz/z/OS] Centralize emitting the call type information
Kai Nacke via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 11 09:45:20 PST 2022
Kai created this revision.
Kai added reviewers: uweigand, jnspaulsson, yusra.syeda, neumannh.
Herald added a subscriber: hiraditya.
Kai requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
With XPLINK, a no-op with information about the call type is emitted
after each call instruction. Centralizing it has the advantage that it is
easy to document all cases, and it makes it easier to extend it later
(e.g. dynamic stack allocation, 32 bit mode).
Also add a test checking the call types emitted so far.
Repository:
rG LLVM Github Monorepo
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,13 @@
.addImm(0);
}
+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 +241,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.407925.patch
Type: text/x-patch
Size: 3325 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220211/075a5731/attachment.bin>
More information about the llvm-commits
mailing list