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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to