This patch is from the julialang repository: https://github.com/JuliaLang/julia/commit/677ce6d3.patch but reference comes form ARCH Linux juia package https://github.com/archlinux/svntogit-community/tree/packages/julia/trunk From 677ce6d3adc2f70886f72795b0e5c739e75730ee Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Sat, 28 Aug 2021 16:48:32 +0200 Subject: [PATCH] [LLVM] Adapt to LLVM 13 changes --- src/cgutils.cpp | 8 +++++++- src/codegen.cpp | 2 +- src/disasm.cpp | 8 ++++++++ src/jitlayers.cpp | 7 +++++++ src/llvm-late-gc-lowering.cpp | 5 +++-- src/llvm-multiversioning.cpp | 5 +++++ src/llvm-remove-addrspaces.cpp | 8 ++++++++ 7 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 4e9917b6b078..928e1a07b2f1 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -2757,8 +2757,14 @@ static jl_value_t *static_constant_instance(Constant *constant, jl_value_t *jt) size_t nargs; if (const auto *CC = dyn_cast(constant)) nargs = CC->getNumOperands(); - else if (const auto *CAZ = dyn_cast(constant)) + else if (const auto *CAZ = dyn_cast(constant)) { +#if JL_LLVM_VERSION >= 130000 + // SVE: Elsewhere we use `getMinKownValue` + nargs = CAZ->getElementCount().getFixedValue(); +#else nargs = CAZ->getNumElements(); +#endif + } else if (const auto *CDS = dyn_cast(constant)) nargs = CDS->getNumElements(); else diff --git a/src/codegen.cpp b/src/codegen.cpp index 5cc9f66ffaef..9000513151fe 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -7394,7 +7394,7 @@ static std::pair, jl_llvm_functions_t> #endif continue; } - assert(find(pred_begin(PhiBB), pred_end(PhiBB), FromBB) != pred_end(PhiBB)); // consistency check + assert(std::find(pred_begin(PhiBB), pred_end(PhiBB), FromBB) != pred_end(PhiBB)); // consistency check TerminatorInst *terminator = FromBB->getTerminator(); if (!terminator->getParent()->getUniqueSuccessor()) { // Can't use `llvm::SplitCriticalEdge` here because diff --git a/src/disasm.cpp b/src/disasm.cpp index 6157873ad71c..589f618396ea 100644 --- a/src/disasm.cpp +++ b/src/disasm.cpp @@ -857,8 +857,16 @@ static void jl_dump_asm_internal( assert(MRI && "Unable to create target register info!"); std::unique_ptr MOFI(new MCObjectFileInfo()); +#if JL_LLVM_VERSION >= 130000 + MCSubtargetInfo *MSTI = TheTarget->createMCSubtargetInfo(TheTriple.str(), cpu, features); + assert(MSTI && "Unable to create subtarget info!"); + + MCContext Ctx(TheTriple, MAI.get(), MRI.get(), MSTI, &SrcMgr); + MOFI->initMCObjectFileInfo(Ctx, /* PIC */ false, /* LargeCodeModel */ false); +#else MCContext Ctx(MAI.get(), MRI.get(), MOFI.get(), &SrcMgr); MOFI->InitMCObjectFileInfo(TheTriple, /* PIC */ false, Ctx); +#endif // Set up Subtarget and Disassembler std::unique_ptr diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 60b1903aaa80..12497cadf491 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -10,6 +10,9 @@ #include #include #include +#if JL_LLVM_VERSION >= 130000 +#include +#endif #include #include #include @@ -654,7 +657,11 @@ JuliaOJIT::JuliaOJIT(TargetMachine &TM, LLVMContext *LLVMCtx) MemMgr(createRTDyldMemoryManager()), JuliaListener(CreateJuliaJITEventListener()), TSCtx(std::unique_ptr(LLVMCtx)), +#if JL_LLVM_VERSION >= 130000 + ES(cantFail(orc::SelfExecutorProcessControl::Create())), +#else ES(), +#endif GlobalJD(ES.createBareJITDylib("JuliaGlobals")), JD(ES.createBareJITDylib("JuliaOJIT")), ObjectLayer( diff --git a/src/llvm-late-gc-lowering.cpp b/src/llvm-late-gc-lowering.cpp index 0aac7638be0d..db8b19bacea5 100644 --- a/src/llvm-late-gc-lowering.cpp +++ b/src/llvm-late-gc-lowering.cpp @@ -709,7 +709,7 @@ void LateLowerGCFrame::LiftSelect(State &S, SelectInst *SI) { else Numbers[i] = Number; } - if (auto VTy = dyn_cast(SI->getType())) { + if (auto VTy = dyn_cast(SI->getType())) { if (NumRoots != Numbers.size()) { // broadcast the scalar root number to fill the vector assert(NumRoots == 1); @@ -736,11 +736,12 @@ void LateLowerGCFrame::LiftPhi(State &S, PHINode *Phi) { SmallVector lifted; std::vector Numbers; unsigned NumRoots = 1; - if (auto VTy = dyn_cast(Phi->getType())) { + if (auto VTy = dyn_cast(Phi->getType())) { NumRoots = VTy->getNumElements(); Numbers.resize(NumRoots); } else { + // TODO: SVE assert(isa(Phi->getType()) && "unimplemented"); } for (unsigned i = 0; i < NumRoots; ++i) { diff --git a/src/llvm-multiversioning.cpp b/src/llvm-multiversioning.cpp index 68081eb53d3a..a82600162fa9 100644 --- a/src/llvm-multiversioning.cpp +++ b/src/llvm-multiversioning.cpp @@ -403,7 +403,12 @@ void CloneCtx::clone_function(Function *F, Function *new_f, ValueToValueMapTy &v vmap[&*J] = &*DestI++; } SmallVector Returns; +#if JL_LLVM_VERSION >= 130000 + // We are cloning into the same module + CloneFunctionInto(new_f, F, vmap, CloneFunctionChangeType::GlobalChanges, Returns); +#else CloneFunctionInto(new_f, F, vmap, true, Returns); +#endif } // Clone all clone_all targets. Makes sure that the base targets are all available. diff --git a/src/llvm-remove-addrspaces.cpp b/src/llvm-remove-addrspaces.cpp index ada10c8d5f1f..7c6ef093fbce 100644 --- a/src/llvm-remove-addrspaces.cpp +++ b/src/llvm-remove-addrspaces.cpp @@ -345,7 +345,11 @@ bool RemoveAddrspacesPass::runOnModule(Module &M) for (auto MD : MDs) NGV->addMetadata( MD.first, +#if JL_LLVM_VERSION >= 130000 + *MapMetadata(MD.second, VMap)); +#else *MapMetadata(MD.second, VMap, RF_MoveDistinctMDs)); +#endif copyComdat(NGV, GV); @@ -372,7 +376,11 @@ bool RemoveAddrspacesPass::runOnModule(Module &M) NF, F, VMap, +#if JL_LLVM_VERSION >= 130000 + CloneFunctionChangeType::GlobalChanges, +#else /*ModuleLevelChanges=*/true, +#endif Returns, "", nullptr,