[Beignet] [PATCH 2/2] GBE: fix the constant data allocation.

Song, Ruiling ruiling.song at intel.com
Tue Nov 12 18:18:48 PST 2013


The whole patchset LGTM. Thanks!

-----Original Message-----
From: beignet-bounces at lists.freedesktop.org [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of Zhigang Gong
Sent: Wednesday, November 13, 2013 8:35 AM
To: beignet at lists.freedesktop.org
Cc: Zhigang Gong
Subject: [Beignet] [PATCH 2/2] GBE: fix the constant data allocation.

From: Zhigang Gong <zhigang.gong at linux.intel.com>

Need to keep consistency between the constant data allocation and the constant register allocation.
So we need to skip the unused constant data at the constant data allocation stage.

To avoid possible mismatching, add a new assert in the constant register(address) allocation stage to make sure the address register match the eaxct constant data.

Also modify the constant utest slightly to hit this code path.

Signed-off-by: Zhigang Gong <zhigang.gong at linux.intel.com>
---
 backend/src/llvm/llvm_gen_backend.cpp |    2 ++
 kernels/compiler_global_constant.cl   |    2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index a104df4..5421fdc 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -681,6 +681,7 @@ namespace gbe
     const Module::GlobalListType &globalList = TheModule->getGlobalList();
     for(auto i = globalList.begin(); i != globalList.end(); i ++) {
       const GlobalVariable &v = *i;
+      if(!v.isConstantUsed()) continue;
       const char *name = v.getName().data();
       unsigned addrSpace = v.getType()->getAddressSpace();
       if(addrSpace == ir::AddressSpace::MEM_CONSTANT) { @@ -1380,6 +1381,7 @@ namespace gbe
         this->newRegister(const_cast<GlobalVariable*>(&v));
         ir::Register reg = regTranslator.getScalar(const_cast<GlobalVariable*>(&v), 0);
         ir::Constant &con = unit.getConstantSet().getConstant(j ++);
+        GBE_ASSERT(con.getName() == v.getName());
         ctx.LOADI(ir::TYPE_S32, reg, ctx.newIntegerImmediate(con.getOffset(), ir::TYPE_S32));
       } else {
         GBE_ASSERT(0);
diff --git a/kernels/compiler_global_constant.cl b/kernels/compiler_global_constant.cl
index 53e24b3..c0e23d1 100644
--- a/kernels/compiler_global_constant.cl
+++ b/kernels/compiler_global_constant.cl
@@ -1,5 +1,5 @@
 constant int m[3] = {71,72,73};
-constant int n = 1;
+const constant int n = 1;
 constant int o[3] = {3, 2, 1};
 
 constant int4 a= {1, 2, 3, 4};
--
1.7.9.5

_______________________________________________
Beignet mailing list
Beignet at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list