103103// for outputting assembly
104104#include < llvm/CodeGen/AsmPrinter.h>
105105#include < llvm/CodeGen/AsmPrinterHandler.h>
106+ #include < llvm/CodeGen/DebugHandlerBase.h>
106107#include < llvm/CodeGen/MachineModuleInfo.h>
107108#include < llvm/CodeGen/Passes.h>
108109#include < llvm/CodeGen/TargetPassConfig.h>
@@ -920,11 +921,17 @@ static void jl_dump_asm_internal(
920921 // LLVM will destroy the formatted stream, and we keep the raw stream.
921922 std::unique_ptr<formatted_raw_ostream> ustream (new formatted_raw_ostream (rstream));
922923 std::unique_ptr<MCStreamer> Streamer (
923- TheTarget->createAsmStreamer (Ctx, std::move (ustream), /* asmverbose*/ true ,
924- /* useDwarfDirectory*/ true ,
925- IP.release (),
926- std::move (CE), std::move (MAB),
927- /* ShowInst*/ false ));
924+ #if JL_LLVM_VERSION >= 190000
925+ TheTarget->createAsmStreamer (Ctx, std::move (ustream),
926+
927+ IP.release (), std::move (CE), std::move (MAB))
928+ #else
929+ TheTarget->createAsmStreamer (Ctx, std::move (ustream), /* asmverbose*/ true ,
930+ /* useDwarfDirectory*/ true , IP.release (),
931+ std::move (CE), std::move (MAB),
932+ /* ShowInst*/ false )
933+ #endif
934+ );
928935 Streamer->initSections (true , *STI);
929936
930937 // Make the MemoryObject wrapper
@@ -1148,7 +1155,11 @@ addPassesToGenerateCode(LLVMTargetMachine *TM, PassManagerBase &PM) {
11481155 return &MMIWP->getMMI ().getContext ();
11491156}
11501157
1158+ #if JL_LLVM_VERSION >= 190000
1159+ class LineNumberPrinterHandler : public DebugHandlerBase {
1160+ #else
11511161class LineNumberPrinterHandler : public AsmPrinterHandler {
1162+ #endif
11521163 MCStreamer &S;
11531164 LineNumberAnnotatedWriter LinePrinter;
11541165 std::string Buffer;
@@ -1157,7 +1168,11 @@ class LineNumberPrinterHandler : public AsmPrinterHandler {
11571168
11581169public:
11591170 LineNumberPrinterHandler (AsmPrinter &Printer, const char *debuginfo)
1160- : S(*Printer.OutStreamer),
1171+ :
1172+ #if JL_LLVM_VERSION >= 190000
1173+ DebugHandlerBase (&Printer),
1174+ #endif
1175+ S (*Printer.OutStreamer),
11611176 LinePrinter (" ; " , true , debuginfo),
11621177 RawStream (Buffer),
11631178 Stream (RawStream) {}
@@ -1176,12 +1191,20 @@ class LineNumberPrinterHandler : public AsmPrinterHandler {
11761191 // virtual void beginModule(Module *M) override {}
11771192 virtual void endModule () override {}
11781193 // / note that some AsmPrinter implementations may not call beginFunction at all
1194+ #if JL_LLVM_VERSION >= 190000
1195+ virtual void beginFunctionImpl (const MachineFunction *MF) override {
1196+ #else
11791197 virtual void beginFunction (const MachineFunction *MF) override {
1198+ #endif
11801199 LinePrinter.emitFunctionAnnot (&MF->getFunction (), Stream);
11811200 emitAndReset ();
11821201 }
11831202 // virtual void markFunctionEnd() override {}
1203+ #if JL_LLVM_VERSION >= 190000
1204+ virtual void endFunctionImpl (const MachineFunction *MF) override {
1205+ #else
11841206 virtual void endFunction (const MachineFunction *MF) override {
1207+ #endif
11851208 LinePrinter.emitEnd (Stream);
11861209 emitAndReset ();
11871210 }
@@ -1257,15 +1280,23 @@ jl_value_t *jl_dump_function_asm_impl(jl_llvmf_dump_t* dump, char emit_mc, const
12571280 }
12581281 auto FOut = std::make_unique<formatted_raw_ostream>(asmfile);
12591282 std::unique_ptr<MCStreamer> S (TM->getTarget ().createAsmStreamer (
1260- *Context, std::move (FOut), true ,
1261- true , InstPrinter,
1262- std::move (MCE), std::move (MAB),
1263- false ));
1283+ #if JL_LLVM_VERSION >= 190000
1284+ *Context, std::move (FOut), InstPrinter, std::move (MCE), std::move (MAB)
1285+ #else
1286+ *Context, std::move (FOut), true , true , InstPrinter, std::move (MCE),
1287+ std::move (MAB), false
1288+ #endif
1289+ ));
12641290 std::unique_ptr<AsmPrinter> Printer (
12651291 TM->getTarget ().createAsmPrinter (*TM, std::move (S)));
1292+ #if JL_LLVM_VERSION >= 190000
1293+ Printer->addDebugHandler (
1294+ std::make_unique<LineNumberPrinterHandler>(*Printer, debuginfo));
1295+ #else
12661296 Printer->addAsmPrinterHandler (AsmPrinter::HandlerInfo (
12671297 std::unique_ptr<AsmPrinterHandler>(new LineNumberPrinterHandler (*Printer, debuginfo)),
12681298 " emit" , " Debug Info Emission" , " Julia" , " Julia::LineNumberPrinterHandler Markup" ));
1299+ #endif
12691300 if (!Printer)
12701301 return jl_an_empty_string;
12711302 PM.add (Printer.release ());
0 commit comments