[Beignet] [PATCH V2] Backend: Refine new instruction with IRBuilder create
Song, Ruiling
ruiling.song at intel.com
Thu Dec 24 18:01:26 PST 2015
LGTM.
Thanks!
Ruiling
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Pan Xiuli
> Sent: Thursday, December 24, 2015 5:19 PM
> To: beignet at lists.freedesktop.org
> Cc: Pan, Xiuli <xiuli.pan at intel.com>
> Subject: [Beignet] [PATCH V2] Backend: Refine new instruction with
> IRBuilder create
>
> New instruction changes with the llvm version but the IRbuilder
> is more stables. So use IRBuilder create to make it can be built
> with more llvm version.
>
> V2: Change all alloca inst to the entry of the function.
> Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
> ---
> backend/src/llvm/llvm_scalarize.cpp | 21 ++++++++++++++-------
> 1 file changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/backend/src/llvm/llvm_scalarize.cpp
> b/backend/src/llvm/llvm_scalarize.cpp
> index b48ff81..899a696 100644
> --- a/backend/src/llvm/llvm_scalarize.cpp
> +++ b/backend/src/llvm/llvm_scalarize.cpp
> @@ -732,25 +732,32 @@ namespace gbe {
> Value* foo = extr->getOperand(0);
> Type* fooTy = foo->getType();
>
> - Instruction* Alloc;
> + Value* Alloc;
> if(vectorAlloca.find(foo) == vectorAlloca.end())
> {
> - Alloc = new AllocaInst(fooTy,0,"",extr->getParent()->begin());
> + BasicBlock &entry = extr->getParent()->getParent()->getEntryBlock();
> + BasicBlock::iterator bbIter = entry.begin();
> + while (isa<AllocaInst>(bbIter)) ++bbIter;
> +
> + IRBuilder<> allocBuilder(&entry);
> + allocBuilder.SetInsertPoint(bbIter);
> +
> + Alloc = allocBuilder.CreateAlloca(fooTy, nullptr, "");
> for (int i = 0; i < GetComponentCount(foo); ++i)
> {
> Value* foo_i = getComponent(i, foo);
> assert(foo_i && "There is unhandled vector component");
> Value* idxs_i[] = {ConstantInt::get(intTy,0), ConstantInt::get(intTy,i)};
> - Instruction* storePtr_i = GetElementPtrInst::Create(Alloc, idxs_i, "",
> extr);
> - new StoreInst(foo_i, storePtr_i, extr);
> + Value* storePtr_i = builder->CreateGEP(Alloc, idxs_i);
> + builder->CreateStore(foo_i, storePtr_i);
> }
> vectorAlloca[foo] = Alloc;
> }
> - else Alloc = dyn_cast<Instruction>(vectorAlloca[foo]);
> + else Alloc = vectorAlloca[foo];
>
> Value* Idxs[] = {ConstantInt::get(intTy,0), extr->getOperand(1)};
> - Instruction* getPtr = GetElementPtrInst::Create(Alloc, Idxs, "", extr);
> - Instruction* loadComp = new LoadInst(getPtr,"",extr);
> + Value* getPtr = builder->CreateGEP(Alloc, Idxs);
> + Value* loadComp = builder->CreateLoad(getPtr);
> extr->replaceAllUsesWith(loadComp);
> return true;
> }
> --
> 2.1.4
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list