[Beignet] [PATCH] add more OP for LOGICAL_SRCMOD case

Guo Yejun yejun.guo at intel.com
Thu Oct 22 12:27:13 PDT 2015


currently, only OP_ADD is considered, actually, from hw spec,
and, not, or, xor 's srcmod are all logical

Signed-off-by: Guo Yejun <yejun.guo at intel.com>
---
 backend/src/backend/gen_insn_selection.cpp          | 6 +++---
 backend/src/backend/gen_insn_selection.hpp          | 6 +++---
 backend/src/backend/gen_insn_selection_optimize.cpp | 5 +++--
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp
index 6833457..02212e1 100644
--- a/backend/src/backend/gen_insn_selection.cpp
+++ b/backend/src/backend/gen_insn_selection.cpp
@@ -2131,7 +2131,7 @@ namespace gbe
     this->opaque->setHasLongType(true);
     this->opaque->setSlowByteGather(true);
     this->opaque->setHasHalfType(true);
-    opt_features = SIOF_OP_AND_LOGICAL_SRCMOD;
+    opt_features = SIOF_LOGICAL_SRCMOD;
   }
 
   SelectionChv::SelectionChv(GenContext &ctx) : Selection(ctx) {
@@ -2140,7 +2140,7 @@ namespace gbe
     this->opaque->setLongRegRestrict(true);
     this->opaque->setSlowByteGather(true);
     this->opaque->setHasHalfType(true);
-    opt_features = SIOF_OP_AND_LOGICAL_SRCMOD | SIOF_OP_MOV_LONG_REG_RESTRICT;
+    opt_features = SIOF_LOGICAL_SRCMOD | SIOF_OP_MOV_LONG_REG_RESTRICT;
   }
 
   Selection9::Selection9(GenContext &ctx) : Selection(ctx) {
@@ -2149,7 +2149,7 @@ namespace gbe
     this->opaque->setLdMsgOrder(LD_MSG_ORDER_SKL);
     this->opaque->setSlowByteGather(true);
     this->opaque->setHasHalfType(true);
-    opt_features = SIOF_OP_AND_LOGICAL_SRCMOD;
+    opt_features = SIOF_LOGICAL_SRCMOD;
   }
 
   void Selection::Opaque::TYPED_WRITE(GenRegister *msgs, uint32_t msgNum,
diff --git a/backend/src/backend/gen_insn_selection.hpp b/backend/src/backend/gen_insn_selection.hpp
index 4efb80b..f51c905 100644
--- a/backend/src/backend/gen_insn_selection.hpp
+++ b/backend/src/backend/gen_insn_selection.hpp
@@ -227,9 +227,9 @@ namespace gbe
   };
 
   enum SEL_IR_OPT_FEATURE {
-    //for OP_AND, on BDW+, SrcMod value indicates a logical source modifier
-    //            on PRE-BDW, SrcMod value indicates a numeric source modifier
-    SIOF_OP_AND_LOGICAL_SRCMOD = 1 << 0,
+    //for OP_AND/not/or/xor , on BDW+, SrcMod value indicates a logical source modifier
+    //                        on PRE-BDW, SrcMod value indicates a numeric source modifier
+    SIOF_LOGICAL_SRCMOD = 1 << 0,
     //for OP_MOV, on BSW, for long data type, src and dst hstride must be aligned to the same qword
     SIOF_OP_MOV_LONG_REG_RESTRICT = 1 << 1,
   };
diff --git a/backend/src/backend/gen_insn_selection_optimize.cpp b/backend/src/backend/gen_insn_selection_optimize.cpp
index fffc8b0..81405ba 100644
--- a/backend/src/backend/gen_insn_selection_optimize.cpp
+++ b/backend/src/backend/gen_insn_selection_optimize.cpp
@@ -170,8 +170,9 @@ namespace gbe
     if (insn.isWrite() || insn.isRead()) //register in selection vector
       return false;
 
-    if (features & SIOF_OP_AND_LOGICAL_SRCMOD)
-      if (insn.opcode == SEL_OP_AND && (info->replacement.absolute || info->replacement.negation))
+    if (features & SIOF_LOGICAL_SRCMOD)
+      if ((insn.opcode == SEL_OP_AND || insn.opcode == SEL_OP_NOT || insn.opcode == SEL_OP_OR || insn.opcode == SEL_OP_XOR) &&
+            (info->replacement.absolute || info->replacement.negation))
         return false;
 
     if (features & SIOF_OP_MOV_LONG_REG_RESTRICT && insn.opcode == SEL_OP_MOV) {
-- 
1.9.1



More information about the Beignet mailing list