[Beignet] [PATCH] GBE: Fix a bug in assigning image bti.

Yang, Rong R rong.r.yang at intel.com
Wed Jul 22 01:21:04 PDT 2015


LGTM, pushed.

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Ruiling Song
> Sent: Wednesday, July 22, 2015 13:52
> To: beignet at lists.freedesktop.org
> Cc: Song, Ruiling
> Subject: [Beignet] [PATCH] GBE: Fix a bug in assigning image bti.
> 
> in llvm > 3.5, image address space was global, while in older version image
> address space was private. So, I put an argument isImage when
> getNewBTI() to make it also work correctly under llvm 3.3.
> 
> Signed-off-by: Ruiling Song <ruiling.song at intel.com>
> ---
>  backend/src/llvm/llvm_gen_backend.cpp | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/backend/src/llvm/llvm_gen_backend.cpp
> b/backend/src/llvm/llvm_gen_backend.cpp
> index 1e141cd..4905415 100644
> --- a/backend/src/llvm/llvm_gen_backend.cpp
> +++ b/backend/src/llvm/llvm_gen_backend.cpp
> @@ -583,7 +583,7 @@ namespace gbe
>      /*! For all possible pointers, GlobalVariable, function pointer argument,
>          alloca instruction, find their pointer escape points */
>      void analyzePointerOrigin(Function &F);
> -    unsigned getNewBti(Value *origin);
> +    unsigned getNewBti(Value *origin, bool isImage);
>      void assignBti(Function &F);
>      bool isSingleBti(Value *Val);
>      Value *getBtiRegister(Value *v);
> @@ -1098,8 +1098,14 @@ namespace gbe
>      }
>    }
> 
> -  unsigned GenWriter::getNewBti(Value *origin) {
> +  unsigned GenWriter::getNewBti(Value *origin, bool isImage) {
>      unsigned new_bti = 0;
> +    if (isImage) {
> +      new_bti = btiBase;
> +      incBtiBase();
> +      return new_bti;
> +    }
> +
>      if(origin->getName().equals(StringRef("__gen_ocl_printf_buf"))) {
>        new_bti = btiBase;
>        incBtiBase();
> @@ -1161,7 +1167,7 @@ namespace gbe
>        GlobalVariable &v = *i;
>        if(!v.isConstantUsed()) continue;
> 
> -      BtiMap.insert(std::make_pair(&v, getNewBti(&v)));
> +      BtiMap.insert(std::make_pair(&v, getNewBti(&v, false)));
>      }
>      MDNode *typeNameNode = NULL;
>      MDNode *node = getKernelFunctionMetadata(&F); @@ -1179,8 +1185,9
> @@ namespace gbe
>      ir::FunctionArgument::InfoFromLLVM llvmInfo;
>      for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I,
> argID++) {
>        llvmInfo.typeName= (cast<MDString>(typeNameNode->getOperand(1 +
> argID)))->getString();
> -      if (I->getType()->isPointerTy() || llvmInfo.isImageType()) {
> -        BtiMap.insert(std::make_pair(I, getNewBti(I)));
> +      bool isImage = llvmInfo.isImageType();
> +      if (I->getType()->isPointerTy() || isImage) {
> +        BtiMap.insert(std::make_pair(I, getNewBti(I, isImage)));
>        }
>      }
> 
> --
> 2.3.6
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list