From 927152ced8103854533882f9855a9916fc91f936 Mon Sep 17 00:00:00 2001 From: Zentrik Date: Sat, 15 Mar 2025 12:30:54 +0000 Subject: [PATCH 1/5] Adapt some more code for LLVM 20 I missed some deprecations in the previous pr and if we're using jitlink another header file needs to be included. --- src/codegen.cpp | 2 +- src/jitlayers.cpp | 3 ++- src/llvm-julia-licm.cpp | 2 +- src/llvm-late-gc-lowering.cpp | 8 ++++---- src/llvm-propagate-addrspaces.cpp | 2 +- src/llvm-ptls.cpp | 4 ++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index b33c50ca08fa4..a455437ccccde 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -5824,7 +5824,7 @@ static void emit_phinode_assign(jl_codectx_t &ctx, ssize_t idx, jl_value_t *r) unsigned nb = jl_datatype_size(phiType); dest = emit_static_alloca(ctx, nb, align); phi = cast(dest->clone()); - phi->insertBefore(dest); + phi->insertBefore(dest->getIterator()); ctx.builder.CreateMemCpy(phi, align, dest, align, nb, false); ctx.builder.CreateLifetimeEnd(dest); } diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 3666e61fd2813..fcdc4212b0da6 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -15,7 +15,8 @@ #include #include #if JL_LLVM_VERSION >= 200000 -#include "llvm/ExecutionEngine/Orc/AbsoluteSymbols.h" +#include +#include #endif #if JL_LLVM_VERSION >= 180000 #include diff --git a/src/llvm-julia-licm.cpp b/src/llvm-julia-licm.cpp index 68fe41216bfd4..ffa55ba88bac6 100644 --- a/src/llvm-julia-licm.cpp +++ b/src/llvm-julia-licm.cpp @@ -59,7 +59,7 @@ static void moveInstructionBefore(Instruction &I, Instruction &Dest, MemorySSAUpdater &MSSAU, ScalarEvolution *SE, MemorySSA::InsertionPlace Place = MemorySSA::BeforeTerminator) { - I.moveBefore(&Dest); + I.moveBefore(Dest.getIterator()); if (MSSAU.getMemorySSA()) if (MemoryUseOrDef *OldMemAcc = cast_or_null( MSSAU.getMemorySSA()->getMemoryAccess(&I))) diff --git a/src/llvm-late-gc-lowering.cpp b/src/llvm-late-gc-lowering.cpp index a41e947c0b6b3..3ed2e6e624688 100644 --- a/src/llvm-late-gc-lowering.cpp +++ b/src/llvm-late-gc-lowering.cpp @@ -2382,10 +2382,10 @@ void LateLowerGCFrame::PlaceGCFrameReset(State &S, unsigned R, unsigned MinColor auto slotAddress = CallInst::Create( getOrDeclare(jl_intrinsics::getGCFrameSlot), {GCFrame, ConstantInt::get(Type::getInt32Ty(InsertBefore->getContext()), Colors[R] + MinColorRoot)}, - "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore); + "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore->getIterator()); // Reset the slot to NULL. Value *Val = ConstantPointerNull::get(T_prjlvalue); - new StoreInst(Val, slotAddress, InsertBefore); + new StoreInst(Val, slotAddress, InsertBefore->getIterator()); } void LateLowerGCFrame::PlaceGCFrameStores(State &S, unsigned MinColorRoot, @@ -2438,7 +2438,7 @@ void LateLowerGCFrame::PlaceRootsAndUpdateCalls(ArrayRef Colors, int PreAss getOrDeclare(jl_intrinsics::newGCFrame), {ConstantInt::get(T_int32, 0)}, "gcframe"); - gcframe->insertBefore(&*F->getEntryBlock().begin()); + gcframe->insertBefore(F->getEntryBlock().begin()); auto pushGcframe = CallInst::Create( getOrDeclare(jl_intrinsics::pushGCFrame), @@ -2554,7 +2554,7 @@ void LateLowerGCFrame::PlaceRootsAndUpdateCalls(ArrayRef Colors, int PreAss auto popGcframe = CallInst::Create( getOrDeclare(jl_intrinsics::popGCFrame), {gcframe}); - popGcframe->insertBefore(BB.getTerminator()); + popGcframe->insertBefore(BB.getTerminator()->getIterator()); } } } diff --git a/src/llvm-propagate-addrspaces.cpp b/src/llvm-propagate-addrspaces.cpp index 55c9e731e1525..fd92cfba1e3eb 100644 --- a/src/llvm-propagate-addrspaces.cpp +++ b/src/llvm-propagate-addrspaces.cpp @@ -289,7 +289,7 @@ bool propagateJuliaAddrspaces(Function &F) { PropagateJuliaAddrspacesVisitor visitor; visitor.visit(F); for (auto it : visitor.ToInsert) - it.first->insertBefore(it.second); + it.first->insertBefore(it.second->getIterator()); for (Instruction *I : visitor.ToDelete) I->eraseFromParent(); visitor.ToInsert.clear(); diff --git a/src/llvm-ptls.cpp b/src/llvm-ptls.cpp index 807d3cb95422d..6af6f03fbc3d5 100644 --- a/src/llvm-ptls.cpp +++ b/src/llvm-ptls.cpp @@ -179,7 +179,7 @@ void LowerPTLS::fix_pgcstack_use(CallInst *pgcstack, Function *pgcstack_getter, adoptFunc->copyMetadata(pgcstack_getter, 0); } adopt->setCalledFunction(adoptFunc); - adopt->insertBefore(slowTerm); + adopt->insertBefore(slowTerm->getIterator()); phi->addIncoming(adopt, slowTerm->getParent()); // emit fast branch code builder.SetInsertPoint(fastTerm->getParent()); @@ -237,7 +237,7 @@ void LowerPTLS::fix_pgcstack_use(CallInst *pgcstack, Function *pgcstack_getter, builder.SetInsertPoint(pgcstack); auto phi = builder.CreatePHI(T_pppjlvalue, 2, "pgcstack"); pgcstack->replaceAllUsesWith(phi); - pgcstack->moveBefore(slowTerm); + pgcstack->moveBefore(slowTerm->getIterator()); // refresh the basic block in the builder builder.SetInsertPoint(pgcstack); auto getter = builder.CreateLoad(T_pgcstack_getter, pgcstack_func_slot); From 847590b3904311e7b38d3f10dccf817c6924b8ce Mon Sep 17 00:00:00 2001 From: Zentrik Date: Sat, 15 Mar 2025 12:43:31 +0000 Subject: [PATCH 2/5] Update test --- test/llvmpasses/gcroots.ll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/llvmpasses/gcroots.ll b/test/llvmpasses/gcroots.ll index 9f9282cd3c870..d8c1438e4ff63 100644 --- a/test/llvmpasses/gcroots.ll +++ b/test/llvmpasses/gcroots.ll @@ -764,7 +764,7 @@ define i8 @gather_arrayptrs_alltrue() { ; OPAQUE: %gcframe = alloca ptr addrspace(10), i32 3 -; OPAQUE: %arrayptrs = call <2 x ptr addrspace(13)> @llvm.masked.gather.v2p13.v2p11(<2 x ptr addrspace(11)> %arrayptrptrs, i32 16, <2 x i1> , <2 x ptr addrspace(13)> zeroinitializer) +; OPAQUE: %arrayptrs = call <2 x ptr addrspace(13)> @llvm.masked.gather.v2p13.v2p11(<2 x ptr addrspace(11)> %arrayptrptrs, i32 16, <2 x i1> {{(|splat \(i1 true\))}}, <2 x ptr addrspace(13)> zeroinitializer) ; OPAQUE: [[GEP0:%.*]] = getelementptr inbounds ptr addrspace(10), ptr %gcframe, i32 2 ; OPAQUE: store ptr addrspace(10) %obj1, ptr [[GEP0]] ; From 1f80be06321d0293570737172d67d297a20763f2 Mon Sep 17 00:00:00 2001 From: Zentrik Date: Sun, 16 Mar 2025 12:41:18 +0000 Subject: [PATCH 3/5] Guard changes --- src/codegen.cpp | 4 ++++ src/llvm-julia-licm.cpp | 4 ++++ src/llvm-late-gc-lowering.cpp | 38 +++++++++++++++++++++++-------- src/llvm-propagate-addrspaces.cpp | 4 ++++ src/llvm-ptls.cpp | 8 +++++++ 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index a455437ccccde..1d8e426dbe79e 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -5824,7 +5824,11 @@ static void emit_phinode_assign(jl_codectx_t &ctx, ssize_t idx, jl_value_t *r) unsigned nb = jl_datatype_size(phiType); dest = emit_static_alloca(ctx, nb, align); phi = cast(dest->clone()); +#if JL_LLVM_VERSION >= 200000 phi->insertBefore(dest->getIterator()); +#else + phi->insertBefore(dest); +#endif ctx.builder.CreateMemCpy(phi, align, dest, align, nb, false); ctx.builder.CreateLifetimeEnd(dest); } diff --git a/src/llvm-julia-licm.cpp b/src/llvm-julia-licm.cpp index ffa55ba88bac6..989911c877587 100644 --- a/src/llvm-julia-licm.cpp +++ b/src/llvm-julia-licm.cpp @@ -59,7 +59,11 @@ static void moveInstructionBefore(Instruction &I, Instruction &Dest, MemorySSAUpdater &MSSAU, ScalarEvolution *SE, MemorySSA::InsertionPlace Place = MemorySSA::BeforeTerminator) { +#if JL_LLVM_VERSION >= 200000 I.moveBefore(Dest.getIterator()); +#else + I.moveBefore(Dest); +#endif if (MSSAU.getMemorySSA()) if (MemoryUseOrDef *OldMemAcc = cast_or_null( MSSAU.getMemorySSA()->getMemoryAccess(&I))) diff --git a/src/llvm-late-gc-lowering.cpp b/src/llvm-late-gc-lowering.cpp index 3ed2e6e624688..12cc35c9fb555 100644 --- a/src/llvm-late-gc-lowering.cpp +++ b/src/llvm-late-gc-lowering.cpp @@ -2356,36 +2356,39 @@ static void AddInPredLiveOuts(BasicBlock *BB, LargeSparseBitVector &LiveIn, Stat void LateLowerGCFrame::PlaceGCFrameStore(State &S, unsigned R, unsigned MinColorRoot, ArrayRef Colors, Value *GCFrame, +#if JL_LLVM_VERSION >= 200000 Instruction *InsertBefore) { - // Get the slot address. +#else + InstListType::iterator InsertBefore) { +#endif // Get the slot address. auto slotAddress = CallInst::Create( getOrDeclare(jl_intrinsics::getGCFrameSlot), {GCFrame, ConstantInt::get(Type::getInt32Ty(InsertBefore->getContext()), Colors[R] + MinColorRoot)}, -#if JL_LLVM_VERSION >= 200000 - "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore->getIterator()); -#else "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore); -#endif Value *Val = GetPtrForNumber(S, R, InsertBefore); // Pointee types don't have semantics, so the optimizer is // free to rewrite them if convenient. We need to change // it back here for the store. assert(Val->getType() == T_prjlvalue); - new StoreInst(Val, slotAddress, InsertBefore->getIterator()); + new StoreInst(Val, slotAddress, InsertBefore); } void LateLowerGCFrame::PlaceGCFrameReset(State &S, unsigned R, unsigned MinColorRoot, ArrayRef Colors, Value *GCFrame, +#if JL_LLVM_VERSION >= 200000 Instruction *InsertBefore) { +#else + InstListType::iterator InsertBefore) { +#endif // Get the slot address. auto slotAddress = CallInst::Create( getOrDeclare(jl_intrinsics::getGCFrameSlot), {GCFrame, ConstantInt::get(Type::getInt32Ty(InsertBefore->getContext()), Colors[R] + MinColorRoot)}, - "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore->getIterator()); + "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore); // Reset the slot to NULL. Value *Val = ConstantPointerNull::get(T_prjlvalue); - new StoreInst(Val, slotAddress, InsertBefore->getIterator()); + new StoreInst(Val, slotAddress, InsertBefore); } void LateLowerGCFrame::PlaceGCFrameStores(State &S, unsigned MinColorRoot, @@ -2406,15 +2409,22 @@ void LateLowerGCFrame::PlaceGCFrameStores(State &S, unsigned MinColorRoot, for (int Idx : *LastLive) { if (Colors[Idx] >= PreAssignedColors && !HasBitSet(NowLive, Idx)) { PlaceGCFrameReset(S, Idx, MinColorRoot, Colors, GCFrame, - S.ReverseSafepointNumbering[*rit]); - } +#if JL_LLVM_VERSION >= 200000 + S.ReverseSafepointNumbering[*rit]->getIterator()); + #else + S.ReverseSafepointNumbering[*rit]); + #endif } } // store values which are alive in this safepoint but // haven't been stored in the GC frame before for (int Idx : NowLive) { if (!HasBitSet(*LastLive, Idx)) { PlaceGCFrameStore(S, Idx, MinColorRoot, Colors, GCFrame, +#if JL_LLVM_VERSION >= 200000 + S.ReverseSafepointNumbering[*rit]->getIterator()); +#else S.ReverseSafepointNumbering[*rit]); +#endif } } LastLive = &NowLive; @@ -2536,7 +2546,11 @@ void LateLowerGCFrame::PlaceRootsAndUpdateCalls(ArrayRef Colors, int PreAss assert(Elem->getType() == T_prjlvalue); //auto Idxs = ArrayRef(Tracked[i]); //Value *Elem = ExtractScalar(Base, true, Idxs, SI); +#if JL_LLVM_VERSION >= 200000 Value *shadowStore = new StoreInst(Elem, slotAddress, SI->getIterator()); +#else + Value *shadowStore = new StoreInst(Elem, slotAddress, SI); +#endif (void)shadowStore; // TODO: shadowStore->setMetadata(LLVMContext::MD_tbaa, tbaa_gcframe); AllocaSlot++; @@ -2554,7 +2568,11 @@ void LateLowerGCFrame::PlaceRootsAndUpdateCalls(ArrayRef Colors, int PreAss auto popGcframe = CallInst::Create( getOrDeclare(jl_intrinsics::popGCFrame), {gcframe}); +#if JL_LLVM_VERSION >= 200000 popGcframe->insertBefore(BB.getTerminator()->getIterator()); +#else + popGcframe->insertBefore(BB.getTerminator()); +#endif } } } diff --git a/src/llvm-propagate-addrspaces.cpp b/src/llvm-propagate-addrspaces.cpp index fd92cfba1e3eb..5be8a30e3405e 100644 --- a/src/llvm-propagate-addrspaces.cpp +++ b/src/llvm-propagate-addrspaces.cpp @@ -289,7 +289,11 @@ bool propagateJuliaAddrspaces(Function &F) { PropagateJuliaAddrspacesVisitor visitor; visitor.visit(F); for (auto it : visitor.ToInsert) +#if JL_LLVM_VERSION >= 200000 it.first->insertBefore(it.second->getIterator()); +#else + it.first->insertBefore(it.second); +#endif for (Instruction *I : visitor.ToDelete) I->eraseFromParent(); visitor.ToInsert.clear(); diff --git a/src/llvm-ptls.cpp b/src/llvm-ptls.cpp index 6af6f03fbc3d5..ca1868b85d4e0 100644 --- a/src/llvm-ptls.cpp +++ b/src/llvm-ptls.cpp @@ -179,7 +179,11 @@ void LowerPTLS::fix_pgcstack_use(CallInst *pgcstack, Function *pgcstack_getter, adoptFunc->copyMetadata(pgcstack_getter, 0); } adopt->setCalledFunction(adoptFunc); +#if JL_LLVM_VERSION >= 200000 adopt->insertBefore(slowTerm->getIterator()); +#else + adopt->insertBefore(slowTerm); +#endif phi->addIncoming(adopt, slowTerm->getParent()); // emit fast branch code builder.SetInsertPoint(fastTerm->getParent()); @@ -237,7 +241,11 @@ void LowerPTLS::fix_pgcstack_use(CallInst *pgcstack, Function *pgcstack_getter, builder.SetInsertPoint(pgcstack); auto phi = builder.CreatePHI(T_pppjlvalue, 2, "pgcstack"); pgcstack->replaceAllUsesWith(phi); +#if JL_LLVM_VERSION >= 200000 pgcstack->moveBefore(slowTerm->getIterator()); +#else + pgcstack->moveBefore(slowTerm); +#endif // refresh the basic block in the builder builder.SetInsertPoint(pgcstack); auto getter = builder.CreateLoad(T_pgcstack_getter, pgcstack_func_slot); From 105711bc3f61b9795ae099c8439bab56d81da7de Mon Sep 17 00:00:00 2001 From: Zentrik Date: Sun, 16 Mar 2025 12:58:58 +0000 Subject: [PATCH 4/5] Remove compilicated broken change --- src/llvm-late-gc-lowering.cpp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/llvm-late-gc-lowering.cpp b/src/llvm-late-gc-lowering.cpp index 12cc35c9fb555..378466ad36ef1 100644 --- a/src/llvm-late-gc-lowering.cpp +++ b/src/llvm-late-gc-lowering.cpp @@ -2356,39 +2356,48 @@ static void AddInPredLiveOuts(BasicBlock *BB, LargeSparseBitVector &LiveIn, Stat void LateLowerGCFrame::PlaceGCFrameStore(State &S, unsigned R, unsigned MinColorRoot, ArrayRef Colors, Value *GCFrame, -#if JL_LLVM_VERSION >= 200000 Instruction *InsertBefore) { -#else - InstListType::iterator InsertBefore) { -#endif // Get the slot address. + // Get the slot address. auto slotAddress = CallInst::Create( getOrDeclare(jl_intrinsics::getGCFrameSlot), {GCFrame, ConstantInt::get(Type::getInt32Ty(InsertBefore->getContext()), Colors[R] + MinColorRoot)}, +#if JL_LLVM_VERSION >= 200000 + "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore->getIterator()); +#else "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore); +#endif Value *Val = GetPtrForNumber(S, R, InsertBefore); // Pointee types don't have semantics, so the optimizer is // free to rewrite them if convenient. We need to change // it back here for the store. assert(Val->getType() == T_prjlvalue); +#if JL_LLVM_VERSION >= 200000 + new StoreInst(Val, slotAddress, InsertBefore->getIterator()); +#else new StoreInst(Val, slotAddress, InsertBefore); +#endif } void LateLowerGCFrame::PlaceGCFrameReset(State &S, unsigned R, unsigned MinColorRoot, ArrayRef Colors, Value *GCFrame, -#if JL_LLVM_VERSION >= 200000 Instruction *InsertBefore) { -#else - InstListType::iterator InsertBefore) { -#endif // Get the slot address. auto slotAddress = CallInst::Create( getOrDeclare(jl_intrinsics::getGCFrameSlot), {GCFrame, ConstantInt::get(Type::getInt32Ty(InsertBefore->getContext()), Colors[R] + MinColorRoot)}, +#if JL_LLVM_VERSION >= 200000 + "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore->getIterator()); +#else "gc_slot_addr_" + StringRef(std::to_string(Colors[R] + MinColorRoot)), InsertBefore); +#endif // Reset the slot to NULL. Value *Val = ConstantPointerNull::get(T_prjlvalue); +#if JL_LLVM_VERSION >= 200000 + new StoreInst(Val, slotAddress, InsertBefore->getIterator()); +#else new StoreInst(Val, slotAddress, InsertBefore); +#endif } void LateLowerGCFrame::PlaceGCFrameStores(State &S, unsigned MinColorRoot, @@ -2409,22 +2418,15 @@ void LateLowerGCFrame::PlaceGCFrameStores(State &S, unsigned MinColorRoot, for (int Idx : *LastLive) { if (Colors[Idx] >= PreAssignedColors && !HasBitSet(NowLive, Idx)) { PlaceGCFrameReset(S, Idx, MinColorRoot, Colors, GCFrame, -#if JL_LLVM_VERSION >= 200000 - S.ReverseSafepointNumbering[*rit]->getIterator()); - #else S.ReverseSafepointNumbering[*rit]); - #endif } + } } // store values which are alive in this safepoint but // haven't been stored in the GC frame before for (int Idx : NowLive) { if (!HasBitSet(*LastLive, Idx)) { PlaceGCFrameStore(S, Idx, MinColorRoot, Colors, GCFrame, -#if JL_LLVM_VERSION >= 200000 - S.ReverseSafepointNumbering[*rit]->getIterator()); -#else S.ReverseSafepointNumbering[*rit]); -#endif } } LastLive = &NowLive; From 98e2bdf31dc8dcf76323b3daa4098d496c4f8ccb Mon Sep 17 00:00:00 2001 From: Zentrik Date: Sun, 16 Mar 2025 13:17:11 +0000 Subject: [PATCH 5/5] Fix --- src/llvm-julia-licm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llvm-julia-licm.cpp b/src/llvm-julia-licm.cpp index 989911c877587..2fb17f26eb694 100644 --- a/src/llvm-julia-licm.cpp +++ b/src/llvm-julia-licm.cpp @@ -62,7 +62,7 @@ static void moveInstructionBefore(Instruction &I, Instruction &Dest, #if JL_LLVM_VERSION >= 200000 I.moveBefore(Dest.getIterator()); #else - I.moveBefore(Dest); + I.moveBefore(&Dest); #endif if (MSSAU.getMemorySSA()) if (MemoryUseOrDef *OldMemAcc = cast_or_null(