[Beignet] [PATCH 1/2] GBE: use sr0.1's SLM Offset to eliminate the software SLM offset for HSW.

Zhigang Gong zhigang.gong at intel.com
Tue Dec 23 21:13:56 PST 2014


sr0.1 has a SLM Offset bits field which could be used to
set slm offset (4K unit), so we just need to initialize it
at the beginning of the kernel and don't need to maintain
the software SLM offset.

Signed-off-by: Zhigang Gong <zhigang.gong at intel.com>
---
 backend/src/backend/gen75_context.cpp      | 12 +++++++++---
 backend/src/backend/gen_insn_selection.cpp |  2 +-
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/backend/src/backend/gen75_context.cpp b/backend/src/backend/gen75_context.cpp
index 1f9591e..da1e6d9 100644
--- a/backend/src/backend/gen75_context.cpp
+++ b/backend/src/backend/gen75_context.cpp
@@ -39,13 +39,19 @@ namespace gbe
     if(kernel->getUseSLM() == false)
       return;
 
-    const GenRegister slm_offset = ra->genReg(GenRegister::ud1grf(ir::ocl::slmoffset));
     const GenRegister slm_index = GenRegister::ud1grf(0, 0);
-    //the slm index is hold in r0.0 24-27 bit, in 4K unit, shift left 12 to get byte unit
+    //the slm index is hold in r0.0 24-27 bit, in 4K unit, move it to sr0.1's 8-11 bits.
     p->push();
       p->curr.execWidth = 1;
       p->curr.predicate = GEN_PREDICATE_NONE;
-      p->SHR(slm_offset, slm_index, GenRegister::immud(12));
+      GenRegister sr0 = GenRegister(GEN_ARCHITECTURE_REGISTER_FILE,
+                                    GEN_ARF_STATE,
+                                    1,
+                                    GEN_TYPE_UD,
+                                    GEN_VERTICAL_STRIDE_8,
+                                    GEN_WIDTH_8,
+                                    GEN_HORIZONTAL_STRIDE_1);
+      p->SHR(sr0, slm_index, GenRegister::immud(16));
     p->pop();
   }
 
diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp
index adff091..58f913e 100644
--- a/backend/src/backend/gen_insn_selection.cpp
+++ b/backend/src/backend/gen_insn_selection.cpp
@@ -1746,7 +1746,7 @@ namespace gbe
   }
 
   Selection75::Selection75(GenContext &ctx) : Selection(ctx) {
-    this->opaque->setPatchSLMAddr(true);
+    this->opaque->setPatchSLMAddr(false);
   }
 
   Selection8::Selection8(GenContext &ctx) : Selection(ctx) {
-- 
1.8.3.2



More information about the Beignet mailing list