[Beignet] [PATCH v2] Change the order of the code
Xiuli Pan
xiuli.pan at intel.com
Fri Feb 21 00:25:20 PST 2014
From: xiuli pan <xiuli.pan at intel.com>
Fix the 66K problem in the OpenCV testing.
The bug was casued by the incorrect order
of the code, it will result the beignet to
calculate the whole localsize of the kernel
file. Now the OpenCV test can pass.
---
backend/src/llvm/llvm_gen_backend.cpp | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index 2d4fb0a..e20f810 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -1394,16 +1394,7 @@ namespace gbe
ir::AddressSpace addrSpace = addressSpaceLLVMToGen(v.getType()->getAddressSpace());
if(addrSpace == ir::MEM_LOCAL) {
- ir::Function &f = ctx.getFunction();
- f.setUseSLM(true);
- const Constant *c = v.getInitializer();
- Type *ty = c->getType();
- uint32_t oldSlm = f.getSLMSize();
- uint32_t align = 8 * getAlignmentByte(unit, ty);
- uint32_t padding = getPadding(oldSlm*8, align);
-
- f.setSLMSize(oldSlm + padding/8 + getTypeByteSize(unit, ty));
- const Value * val = cast<Value>(&v);
+ const Value * val = cast<Value>(&v);
// local variable can only be used in one kernel function. so, don't need to check its all uses.
// loop through the Constant to find the instruction that use the global variable
// FIXME need to find a more grace way to find the function which use this local data.
@@ -1419,6 +1410,16 @@ namespace gbe
const BasicBlock * bb = insn->getParent();
const Function * func = bb->getParent();
if(func != &F) continue;
+
+ ir::Function &f = ctx.getFunction();
+ f.setUseSLM(true);
+ const Constant *c = v.getInitializer();
+ Type *ty = c->getType();
+ uint32_t oldSlm = f.getSLMSize();
+ uint32_t align = 8 * getAlignmentByte(unit, ty);
+ uint32_t padding = getPadding(oldSlm*8, align);
+
+ f.setSLMSize(oldSlm + padding/8 + getTypeByteSize(unit, ty));
this->newRegister(const_cast<GlobalVariable*>(&v));
ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
--
1.7.9.5
More information about the Beignet
mailing list