diff options
Diffstat (limited to 'dev-lang/julia/files/julia-1.6.5-llvm_13_compat_part_1.patch')
-rw-r--r-- | dev-lang/julia/files/julia-1.6.5-llvm_13_compat_part_1.patch | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/dev-lang/julia/files/julia-1.6.5-llvm_13_compat_part_1.patch b/dev-lang/julia/files/julia-1.6.5-llvm_13_compat_part_1.patch new file mode 100644 index 000000000000..1398be7ec873 --- /dev/null +++ b/dev-lang/julia/files/julia-1.6.5-llvm_13_compat_part_1.patch @@ -0,0 +1,172 @@ +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 <v.churavy@gmail.com> +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<ConstantAggregate>(constant)) + nargs = CC->getNumOperands(); +- else if (const auto *CAZ = dyn_cast<ConstantAggregateZero>(constant)) ++ else if (const auto *CAZ = dyn_cast<ConstantAggregateZero>(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<ConstantDataSequential>(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<std::unique_ptr<Module>, 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<MCObjectFileInfo> 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<MCSubtargetInfo> +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 <llvm/Analysis/TargetTransformInfo.h> + #include <llvm/ExecutionEngine/Orc/CompileUtils.h> + #include <llvm/ExecutionEngine/Orc/ExecutionUtils.h> ++#if JL_LLVM_VERSION >= 130000 ++#include <llvm/ExecutionEngine/Orc/ExecutorProcessControl.h> ++#endif + #include <llvm/Support/DynamicLibrary.h> + #include <llvm/Support/FormattedStream.h> + #include <llvm/Support/SmallVectorMemoryBuffer.h> +@@ -654,7 +657,11 @@ JuliaOJIT::JuliaOJIT(TargetMachine &TM, LLVMContext *LLVMCtx) + MemMgr(createRTDyldMemoryManager()), + JuliaListener(CreateJuliaJITEventListener()), + TSCtx(std::unique_ptr<LLVMContext>(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<VectorType>(SI->getType())) { ++ if (auto VTy = dyn_cast<FixedVectorType>(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<PHINode *, 2> lifted; + std::vector<int> Numbers; + unsigned NumRoots = 1; +- if (auto VTy = dyn_cast<VectorType>(Phi->getType())) { ++ if (auto VTy = dyn_cast<FixedVectorType>(Phi->getType())) { + NumRoots = VTy->getNumElements(); + Numbers.resize(NumRoots); + } + else { ++ // TODO: SVE + assert(isa<PointerType>(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<ReturnInst*,8> 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, |