On Thu, 2022-05-19 at 11:26 +0200, Zoltan Boszormenyi via lists.yoctoproject.org wrote: > 2022. 05. 19. 11:19 keltezéssel, Anuj Mittal írta: > > Backport LLVM 13 fixes from upstream. This fixes the crashes when > > invoking ocloc after enabling built-ins in compute-runtime. > > Please also add the big patch to fix build with LLVM 14 from > https://github.com/intel/intel-graphics-compiler/pull/242
Yes, I am waiting for that PR to be merged. > > meta-intel master branch is only compatible with kirkstone and > meta-clang for kirkstone already uses LLVM 14.0.3. This change is for honister which has LLVM 13. I will merge the LLVM 14 change in kirkstone/master as soon as it's available upstream. There is also a kirkstone-clang12 branch in meta-clang that you can use with meta-intel kirkstone. Thanks, Anuj > > > > > Also see: > > https://github.com/intel/intel-graphics-compiler/issues/204 > > > > Signed-off-by: Anuj Mittal <[email protected]> > > --- > > ...t-accept-nullptr-as-GEP-element-type.patch | 182 > > ++++++++++++++++++ > > ...LLVM13-changed-MCContext-constructor.patch | 41 ++++ > > .../igc/intel-graphics-compiler_1.0.8744.bb | 2 + > > 3 files changed, 225 insertions(+) > > create mode 100644 dynamic-layers/clang-layer/recipes- > > opencl/igc/files/0001-Don-t-accept-nullptr-as-GEP-element- > > type.patch > > create mode 100644 dynamic-layers/clang-layer/recipes- > > opencl/igc/files/0002-LLVM13-changed-MCContext-constructor.patch > > > > diff --git a/dynamic-layers/clang-layer/recipes- > > opencl/igc/files/0001-Don-t-accept-nullptr-as-GEP-element- > > type.patch b/dynamic-layers/clang-layer/recipes- > > opencl/igc/files/0001-Don-t-accept-nullptr-as-GEP-element- > > type.patch > > new file mode 100644 > > index 00000000..0e90023f > > --- /dev/null > > +++ b/dynamic-layers/clang-layer/recipes-opencl/igc/files/0001-Don- > > t-accept-nullptr-as-GEP-element-type.patch > > @@ -0,0 +1,182 @@ > > +From 9c68deb3f913a3d055112a28103ec2933ca7b09c Mon Sep 17 00:00:00 > > 2001 > > +From: Marcin Naczk <[email protected]> > > +Date: Tue, 17 May 2022 10:36:56 +0000 > > +Subject: [PATCH 1/2] Don't accept nullptr as GEP element type > > + > > +LLVM13 IR don't accept nullptr as GEP element type > > +https://reviews.llvm.org/D105653 > > + > > +Upstream-Status: Backport > > +Signed-off-by: Anuj Mittal <[email protected]> > > +--- > > + IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp | 5 > > +++-- > > + IGC/Compiler/CustomSafeOptPass.cpp | 8 > > +++++--- > > + IGC/Compiler/LegalizationPass.cpp | 3 ++- > > + .../IGCInstCombiner/7.0/InstructionCombining.cpp | 3 ++- > > + .../OpenCLPasses/LocalBuffers/InlineLocalsResolution.cpp | 5 > > +++-- > > + .../ProgramScopeConstantResolution.cpp | 3 ++- > > + IGC/Compiler/Optimizer/Scalarizer.cpp | 3 ++- > > + IGC/Compiler/PromoteResourceToDirectAS.cpp | 6 > > +++--- > > + 8 files changed, 22 insertions(+), 14 deletions(-) > > + > > +diff --git a/IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp > > b/IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp > > +index ae5510c6a..0f4fca87c 100644 > > +--- a/IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp > > ++++ b/IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp > > +@@ -3368,17 +3368,18 @@ > > SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function > > *F, > > + case OpInBoundsPtrAccessChain: { > > + auto AC = static_cast<SPIRVAccessChainBase *>(BV); > > + auto Base = transValue(AC->getBase(), F, BB); > > ++ Type *BaseTy = cast<PointerType>(Base->getType())- > > >getPointerElementType(); > > + auto Index = transValue(AC->getIndices(), F, BB); > > + if (!AC->hasPtrIndex()) > > + Index.insert(Index.begin(), getInt32(M, 0)); > > + auto IsInbound = AC->isInBounds(); > > + Value *V = nullptr; > > + if (BB) { > > +- auto GEP = GetElementPtrInst::Create(nullptr, Base, Index, > > BV->getName(), BB); > > ++ auto GEP = GetElementPtrInst::Create(BaseTy, Base, Index, > > BV->getName(), BB); > > + GEP->setIsInBounds(IsInbound); > > + V = GEP; > > + } else { > > +- V = ConstantExpr::getGetElementPtr(nullptr, > > dyn_cast<Constant>(Base), Index, IsInbound); > > ++ V = ConstantExpr::getGetElementPtr(BaseTy, > > dyn_cast<Constant>(Base), Index, IsInbound); > > + } > > + return mapValue(BV, V); > > + } > > +diff --git a/IGC/Compiler/CustomSafeOptPass.cpp > > b/IGC/Compiler/CustomSafeOptPass.cpp > > +index 83223b3cb..33547077e 100644 > > +--- a/IGC/Compiler/CustomSafeOptPass.cpp > > ++++ b/IGC/Compiler/CustomSafeOptPass.cpp > > +@@ -410,7 +410,8 @@ void > > CustomSafeOptPass::visitAllocaInst(AllocaInst& I) > > + gepArg1 = BinaryOperator::CreateSub(pGEP- > > >getOperand(2), IRB.getInt32(index_lb), "reducedIndex", pGEP); > > + } > > + llvm::Value* gepArg[] = { pGEP->getOperand(1), > > gepArg1 }; > > +- llvm::Value* pGEPnew = > > GetElementPtrInst::Create(nullptr, newAlloca, gepArg, "", pGEP); > > ++ Type *BaseTy = cast<PointerType>(newAlloca- > > >getType())->getPointerElementType(); > > ++ llvm::Value* pGEPnew = > > GetElementPtrInst::Create(BaseTy, newAlloca, gepArg, "", pGEP); > > + pGEP->replaceAllUsesWith(pGEPnew); > > + } > > + } > > +@@ -478,10 +479,11 @@ void > > CustomSafeOptPass::visitLoadInst(LoadInst& load) > > + SmallVector<Value*, 8> indices; > > + indices.append(gep->idx_begin(), gep->idx_end()); > > + indices[selIdx] = sel->getOperand(1); > > +- GetElementPtrInst* gep1 = > > GetElementPtrInst::Create(nullptr, gep->getPointerOperand(), > > indices, gep->getName(), gep); > > ++ Type *BaseTy = cast<PointerType>(gep- > > >getPointerOperand()->getType())->getPointerElementType(); > > ++ GetElementPtrInst* gep1 = > > GetElementPtrInst::Create(BaseTy, gep->getPointerOperand(), > > indices, gep->getName(), gep); > > + gep1->setDebugLoc(gep->getDebugLoc()); > > + indices[selIdx] = sel->getOperand(2); > > +- GetElementPtrInst* gep2 = > > GetElementPtrInst::Create(nullptr, gep->getPointerOperand(), > > indices, gep->getName(), gep); > > ++ GetElementPtrInst* gep2 = > > GetElementPtrInst::Create(BaseTy, gep->getPointerOperand(), > > indices, gep->getName(), gep); > > + gep2->setDebugLoc(gep->getDebugLoc()); > > + LoadInst* load1 = cast<LoadInst>(load.clone()); > > + load1->insertBefore(&load); > > +diff --git a/IGC/Compiler/LegalizationPass.cpp > > b/IGC/Compiler/LegalizationPass.cpp > > +index 0586e1b40..fbb3fe894 100644 > > +--- a/IGC/Compiler/LegalizationPass.cpp > > ++++ b/IGC/Compiler/LegalizationPass.cpp > > +@@ -1568,7 +1568,8 @@ void > > Legalization::RecursivelyChangePointerType(Instruction* oldPtr, > > Instruction > > + if (GetElementPtrInst * gep = > > dyn_cast<GetElementPtrInst>(*II)) > > + { > > + SmallVector<Value*, 8> Idx(gep->idx_begin(), gep- > > >idx_end()); > > +- GetElementPtrInst* newGep = > > GetElementPtrInst::Create(nullptr, newPtr, Idx, "", gep); > > ++ Type *BaseTy = cast<PointerType>(newPtr->getType())- > > >getPointerElementType(); > > ++ GetElementPtrInst* newGep = > > GetElementPtrInst::Create(BaseTy, newPtr, Idx, "", gep); > > + RecursivelyChangePointerType(gep, newGep); > > + } > > + else if (LoadInst * load = dyn_cast<LoadInst>(*II)) > > +diff --git > > a/IGC/Compiler/Optimizer/IGCInstCombiner/7.0/InstructionCombining.c > > pp > > b/IGC/Compiler/Optimizer/IGCInstCombiner/7.0/InstructionCombining.c > > pp > > +index ea5c450fb..94b6bd2be 100644 > > +--- > > a/IGC/Compiler/Optimizer/IGCInstCombiner/7.0/InstructionCombining.c > > pp > > ++++ > > b/IGC/Compiler/Optimizer/IGCInstCombiner/7.0/InstructionCombining.c > > pp > > +@@ -1675,7 +1675,8 @@ Instruction* > > InstCombiner::visitGetElementPtrInst(GetElementPtrInst& GEP) { > > + auto* NewSrc = cast<GetElementPtrInst>( > > + Builder.CreateGEP(SO0, GO1, Src- > > >getName())); > > + NewSrc->setIsInBounds(Src->isInBounds()); > > +- auto* NewGEP = > > GetElementPtrInst::Create(nullptr, NewSrc, { SO1 }); > > ++ Type *BaseTy = cast<PointerType>(NewSrc- > > >getType())->getPointerElementType(); > > ++ auto* NewGEP = > > GetElementPtrInst::Create(BaseTy, NewSrc, { SO1 }); > > + NewGEP->setIsInBounds(GEP.isInBounds()); > > + return NewGEP; > > + } > > +diff --git > > a/IGC/Compiler/Optimizer/OpenCLPasses/LocalBuffers/InlineLocalsReso > > lution.cpp > > b/IGC/Compiler/Optimizer/OpenCLPasses/LocalBuffers/InlineLocalsReso > > lution.cpp > > +index be585df75..4a31ca474 100644 > > +--- > > a/IGC/Compiler/Optimizer/OpenCLPasses/LocalBuffers/InlineLocalsReso > > lution.cpp > > ++++ > > b/IGC/Compiler/Optimizer/OpenCLPasses/LocalBuffers/InlineLocalsReso > > lution.cpp > > +@@ -179,9 +179,10 @@ bool > > InlineLocalsResolution::runOnModule(Module& M) > > + Value* sizeConstant = > > ConstantInt::get(Type::getInt32Ty(C), Offset); > > + SmallVector<Value*, 1> idx(1, sizeConstant); > > + Instruction* pInsertBefore = &(*F.begin()- > > >getFirstInsertionPt()); > > +- Type* pLocalCharPtrType = Type::getInt8Ty(C)- > > >getPointerTo(ADDRESS_SPACE_LOCAL); > > ++ Type* pCharType = Type::getInt8Ty(C); > > ++ Type* pLocalCharPtrType = pCharType- > > >getPointerTo(ADDRESS_SPACE_LOCAL); > > + Instruction* pCharPtr = > > BitCastInst::CreatePointerCast(arg, pLocalCharPtrType, > > "localToChar", pInsertBefore); > > +- Value* pMovedCharPtr = > > GetElementPtrInst::Create(nullptr, pCharPtr, idx, "movedLocal", > > pInsertBefore); > > ++ Value* pMovedCharPtr = > > GetElementPtrInst::Create(pCharType, pCharPtr, idx, "movedLocal", > > pInsertBefore); > > + > > + Value* pMovedPtr = > > CastInst::CreatePointerCast(pMovedCharPtr, ptrType, "charToLocal", > > pInsertBefore); > > + > > +diff --git > > a/IGC/Compiler/Optimizer/OpenCLPasses/ProgramScopeConstants/Program > > ScopeConstantResolution.cpp > > b/IGC/Compiler/Optimizer/OpenCLPasses/ProgramScopeConstants/Program > > ScopeConstantResolution.cpp > > +index 64e48a247..d56472191 100644 > > +--- > > a/IGC/Compiler/Optimizer/OpenCLPasses/ProgramScopeConstants/Program > > ScopeConstantResolution.cpp > > ++++ > > b/IGC/Compiler/Optimizer/OpenCLPasses/ProgramScopeConstants/Program > > ScopeConstantResolution.cpp > > +@@ -190,7 +190,8 @@ bool > > ProgramScopeConstantResolution::runOnModule(Module& M) > > + Instruction* pEntryPoint = &(*userFunc- > > >getEntryBlock().getFirstInsertionPt()); > > + > > + // Create a GEP to get to the right offset in the > > constant buffer > > +- GetElementPtrInst* gep = > > GetElementPtrInst::Create(nullptr, &*bufArg, pOffset, "off" + > > pGlobalVar->getName(), pEntryPoint); > > ++ Type *BaseTy = cast<PointerType>((&*bufArg)- > > >getType())->getPointerElementType(); > > ++ GetElementPtrInst* gep = > > GetElementPtrInst::Create(BaseTy, &*bufArg, pOffset, "off" + > > pGlobalVar->getName(), pEntryPoint); > > + // Cast it back to the correct type. > > + CastInst* pNewVal = > > CastInst::CreatePointerCast(gep, pGlobalVar->getType(), "cast" + > > pGlobalVar->getName(), pEntryPoint); > > + > > +diff --git a/IGC/Compiler/Optimizer/Scalarizer.cpp > > b/IGC/Compiler/Optimizer/Scalarizer.cpp > > +index 768cb6da2..75ec2ff0d 100644 > > +--- a/IGC/Compiler/Optimizer/Scalarizer.cpp > > ++++ b/IGC/Compiler/Optimizer/Scalarizer.cpp > > +@@ -994,7 +994,8 @@ void > > ScalarizeFunction::scalarizeInstruction(GetElementPtrInst* GI) > > + auto op1 = baseValue->getType()->isVectorTy() ? > > operand1[i] : baseValue; > > + auto op2 = indexValue->getType()->isVectorTy() ? > > operand2[i] : indexValue; > > + > > +- Value* newGEP = GetElementPtrInst::Create(nullptr, op1, > > op2, "", GI); > > ++ Type *BaseTy = cast<PointerType>(op1->getType())- > > >getPointerElementType(); > > ++ Value* newGEP = GetElementPtrInst::Create(BaseTy, op1, > > op2, "", GI); > > + Value* constIndex = > > ConstantInt::get(Type::getInt32Ty(context()), i); > > + Instruction* insert = > > InsertElementInst::Create(assembledVector, > > + newGEP, constIndex, "assembled.vect", GI); > > +diff --git a/IGC/Compiler/PromoteResourceToDirectAS.cpp > > b/IGC/Compiler/PromoteResourceToDirectAS.cpp > > +index 4d9ccf20c..555b1f9a8 100644 > > +--- a/IGC/Compiler/PromoteResourceToDirectAS.cpp > > ++++ b/IGC/Compiler/PromoteResourceToDirectAS.cpp > > +@@ -297,6 +297,7 @@ bool PatchGetElementPtr(const > > std::vector<Value*>& instList, Type* dstTy, unsign > > + unsigned numInstructions = instList.size(); > > + Value* patchedInst = patchedSourcePtr; > > + dstPtr = nullptr; > > ++ Type* patchTy = nullptr; > > + > > + // Find all the instructions we need to patch, starting from > > the top. > > + // If there is more than one GEP instruction, we need to > > patch all of them, as well > > +@@ -326,7 +327,6 @@ bool PatchGetElementPtr(const > > std::vector<Value*>& instList, Type* dstTy, unsign > > + > > + if (!patchedInst) > > + { > > +- Type* patchTy = nullptr; > > + if (patchInstructions.size() > 0) > > + { > > + // Get the original pointer type before any GEPs or > > bitcasts modifies it > > +@@ -349,9 +349,9 @@ bool PatchGetElementPtr(const > > std::vector<Value*>& instList, Type* dstTy, unsign > > + llvm::SmallVector<llvm::Value*, 4> gepArgs(gepInst- > > >idx_begin(), gepInst->idx_end()); > > + // Create the new GEP instruction > > + if (gepInst->isInBounds()) > > +- patchedInst = > > GetElementPtrInst::CreateInBounds(nullptr, patchedInst, gepArgs, > > "", gepInst); > > ++ patchedInst = > > GetElementPtrInst::CreateInBounds(patchTy, patchedInst, gepArgs, > > "", gepInst); > > + else > > +- patchedInst = GetElementPtrInst::Create(nullptr, > > patchedInst, gepArgs, "", gepInst); > > ++ patchedInst = GetElementPtrInst::Create(patchTy, > > patchedInst, gepArgs, "", gepInst); > > + > > + if (GetElementPtrInst* gepPatchedInst = > > dyn_cast<GetElementPtrInst>(patchedInst)) > > + { > > +-- > > +2.35.3 > > + > > diff --git a/dynamic-layers/clang-layer/recipes- > > opencl/igc/files/0002-LLVM13-changed-MCContext-constructor.patch > > b/dynamic-layers/clang-layer/recipes-opencl/igc/files/0002-LLVM13- > > changed-MCContext-constructor.patch > > new file mode 100644 > > index 00000000..df6fa613 > > --- /dev/null > > +++ b/dynamic-layers/clang-layer/recipes-opencl/igc/files/0002- > > LLVM13-changed-MCContext-constructor.patch > > @@ -0,0 +1,41 @@ > > +From 049cbc1bf259ab109160987cbd43a485069957a6 Mon Sep 17 00:00:00 > > 2001 > > +From: Marcin Naczk <[email protected]> > > +Date: Tue, 17 May 2022 09:50:31 +0000 > > +Subject: [PATCH 2/2] LLVM13 changed MCContext constructor > > + > > +For LLVM13, MCContext constructor changed. > > +In the list of arguments appeared MCSubtargetInfo which is not > > used by us. > > +ObjectFileInfo was removed from the list of arguments, so we need > > to set > > +it in the next command. > > + > > +Upstream-Status: Backport > > +Signed-off-by: Anuj Mittal <[email protected]> > > +--- > > + IGC/WrapperLLVM/include/llvmWrapper/MC/MCContext.h | 11 +++++++-- > > -- > > + 1 file changed, 7 insertions(+), 4 deletions(-) > > + > > +diff --git a/IGC/WrapperLLVM/include/llvmWrapper/MC/MCContext.h > > b/IGC/WrapperLLVM/include/llvmWrapper/MC/MCContext.h > > +index 3725864ef..f3e7e2b4e 100644 > > +--- a/IGC/WrapperLLVM/include/llvmWrapper/MC/MCContext.h > > ++++ b/IGC/WrapperLLVM/include/llvmWrapper/MC/MCContext.h > > +@@ -24,10 +24,13 @@ namespace IGCLLVM > > + bool DoAutoReset = true) > > + { > > + #if LLVM_VERSION_MAJOR >= 13 > > +- std::string Err; > > +- const llvm::Target *T = > > llvm::TargetRegistry::lookupTarget(TheTriple.str(), Err); > > +- std::unique_ptr<llvm::MCSubtargetInfo> STI(T- > > >createMCSubtargetInfo(TheTriple.str(), "", "")); > > +- return new llvm::MCContext(TheTriple, MAI, MRI, > > STI.get(), Mgr, TargetOpts, DoAutoReset); > > ++// Refactor MCObjectFileInfo initialization and allow targets to > > create MCObjectFileInfo > > ++// > > ++// Differential Revision: https://reviews.llvm.org/D101921 > > ++ > > ++ auto *Context = new llvm::MCContext(TheTriple, MAI, MRI, > > nullptr, Mgr, TargetOpts, DoAutoReset); > > ++ Context->setObjectFileInfo(MOFI); > > ++ return Context; > > + #elif LLVM_VERSION_MAJOR >= 10 > > + return new llvm::MCContext(MAI, MRI, MOFI, Mgr, > > TargetOpts, DoAutoReset); > > + #else > > +-- > > +2.35.3 > > + > > diff --git a/dynamic-layers/clang-layer/recipes-opencl/igc/intel- > > graphics-compiler_1.0.8744.bb b/dynamic-layers/clang-layer/recipes- > > opencl/igc/intel-graphics-compiler_1.0.8744.bb > > index 9bbe08c9..51c372ca 100644 > > --- a/dynamic-layers/clang-layer/recipes-opencl/igc/intel-graphics- > > compiler_1.0.8744.bb > > +++ b/dynamic-layers/clang-layer/recipes-opencl/igc/intel-graphics- > > compiler_1.0.8744.bb > > @@ -14,6 +14,8 @@ SRC_URI = "git://github.com/intel/intel-graphics- > > compiler.git;protocol=https;nam > > > > file://0003-Improve-Reproducibility-for-src-package.patch \ > > file://0004-find-external-llvm-tblgen.patch \ > > > > file://0001-BiF-CMakeLists.txt-remove-opt-from-DEPENDS.patch \ > > + > > file://0001-Don-t-accept-nullptr-as-GEP-element-type.patch \ > > + > > file://0002-LLVM13-changed-MCContext-constructor.patch \ > > " > > > > SRCREV_igc = "3ba8dde8c414a0e47df58b1bba12a64f8ba2089e" > > > > > > > > > > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#7540): https://lists.yoctoproject.org/g/meta-intel/message/7540 Mute This Topic: https://lists.yoctoproject.org/mt/91205056/21656 Group Owner: [email protected] Unsubscribe: https://lists.yoctoproject.org/g/meta-intel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
