[Beignet] [PATCH] GBE: Fix a bug in assigning image bti.
Ruiling Song
ruiling.song at intel.com
Tue Jul 21 22:51:45 PDT 2015
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
More information about the Beignet
mailing list