[llvm] r370743 - [SystemZ] Add support for fentry.
Jonas Paulsson via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 3 04:21:12 PDT 2019
Author: jonpa
Date: Tue Sep 3 04:21:12 2019
New Revision: 370743
URL: http://llvm.org/viewvc/llvm-project?rev=370743&view=rev
Log:
[SystemZ] Add support for fentry.
SystemZAsmPrinter now properly emits function calls to __fentry__.
Review: Ulrich Weigand
Added:
llvm/trunk/test/CodeGen/SystemZ/fentry-insertion.ll
Modified:
llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.cpp
llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.h
Modified: llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.cpp?rev=370743&r1=370742&r2=370743&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.cpp Tue Sep 3 04:21:12 2019
@@ -501,6 +501,10 @@ void SystemZAsmPrinter::EmitInstruction(
}
break;
+ case TargetOpcode::FENTRY_CALL:
+ LowerFENTRY_CALL(*MI, Lower);
+ return;
+
case TargetOpcode::STACKMAP:
LowerSTACKMAP(*MI);
return;
@@ -546,6 +550,16 @@ static unsigned EmitNop(MCContext &OutCo
}
}
+void SystemZAsmPrinter::LowerFENTRY_CALL(const MachineInstr &MI,
+ SystemZMCInstLower &Lower) {
+ MCContext &Ctx = MF->getContext();
+ MCSymbol *fentry = Ctx.getOrCreateSymbol("__fentry__");
+ const MCSymbolRefExpr *Op =
+ MCSymbolRefExpr::create(fentry, MCSymbolRefExpr::VK_PLT, Ctx);
+ OutStreamer->EmitInstruction(MCInstBuilder(SystemZ::BRASL)
+ .addReg(SystemZ::R0D).addExpr(Op), getSubtargetInfo());
+}
+
void SystemZAsmPrinter::LowerSTACKMAP(const MachineInstr &MI) {
const SystemZInstrInfo *TII =
static_cast<const SystemZInstrInfo *>(MF->getSubtarget().getInstrInfo());
Modified: llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.h?rev=370743&r1=370742&r2=370743&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.h (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZAsmPrinter.h Tue Sep 3 04:21:12 2019
@@ -46,6 +46,7 @@ public:
}
private:
+ void LowerFENTRY_CALL(const MachineInstr &MI, SystemZMCInstLower &MCIL);
void LowerSTACKMAP(const MachineInstr &MI);
void LowerPATCHPOINT(const MachineInstr &MI, SystemZMCInstLower &Lower);
};
Added: llvm/trunk/test/CodeGen/SystemZ/fentry-insertion.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/fentry-insertion.ll?rev=370743&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/fentry-insertion.ll (added)
+++ llvm/trunk/test/CodeGen/SystemZ/fentry-insertion.ll Tue Sep 3 04:21:12 2019
@@ -0,0 +1,29 @@
+; RUN: llc %s -mtriple=s390x-linux-gnu -mcpu=z10 -o - -verify-machineinstrs \
+; RUN: | FileCheck %s
+
+define void @test1() #0 {
+entry:
+ ret void
+
+; CHECK-LABEL: @test1
+; CHECK: brasl %r0, __fentry__
+; CHECK-NOT: mcount
+; CHECK: br %r14
+}
+
+define void @test2() #1 {
+entry:
+ br label %bb1
+bb1:
+ call void @address_taken(i64 ptrtoint (i8* blockaddress(@test2, %bb1) to i64), i32 512)
+ ret void
+
+; CHECK-LABEL: @test2
+; CHECK: brasl %r0, __fentry__
+; CHECK-NOT: mcount
+; CHECK: br %r14
+}
+
+declare void @address_taken(i64, i32) local_unnamed_addr
+attributes #0 = { "fentry-call"="true" }
+attributes #1 = { inlinehint minsize noredzone nounwind optsize sspstrong "fentry-call"="true" }
More information about the llvm-commits
mailing list