GBE: Fix a bug in assigning image bti.

Submitted by Song, Ruiling on July 22, 2015, 5:51 a.m.

Details

Message ID 1437544305-7295-1-git-send-email-ruiling.song@intel.com
State New
Headers show

Not browsing as part of any series.

Commit Message

Song, Ruiling July 22, 2015, 5:51 a.m.
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@intel.com>
---
 backend/src/llvm/llvm_gen_backend.cpp | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

Patch hide | download patch | download mbox

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)));
       }
     }
 

Comments

LGTM, pushed.

> -----Original Message-----

> From: Beignet [mailto:beignet-bounces@lists.freedesktop.org] On Behalf Of

> Ruiling Song

> Sent: Wednesday, July 22, 2015 13:52

> To: beignet@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@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@lists.freedesktop.org

> http://lists.freedesktop.org/mailman/listinfo/beignet