Re: [Beignet] [PATCH] defer dead insn removal since lowerIndirectRead still needs them

2017-04-26 Thread Guo, Yejun
Please ignore this patch, there is still something not correct. Thanks.

-Original Message-
From: Guo, Yejun 
Sent: Wednesday, April 26, 2017 4:43 PM
To: beignet@lists.freedesktop.org
Cc: Guo, Yejun
Subject: [PATCH] defer dead insn removal since lowerIndirectRead still needs 
them

---
 backend/src/ir/lowering.cpp | 54 ++---
 1 file changed, 26 insertions(+), 28 deletions(-)

diff --git a/backend/src/ir/lowering.cpp b/backend/src/ir/lowering.cpp
index 93bd96a..53aafa4 100644
--- a/backend/src/ir/lowering.cpp
+++ b/backend/src/ir/lowering.cpp
@@ -117,7 +117,7 @@ namespace ir {
 /*! Lower the given function argument accesses */
 ArgUse lower(uint32_t argID);
 /*! Build the constant push for the function */
-void buildConstantPush(void);
+void buildConstantPush(set& dead);
 /* Lower indirect Read to indirct Mov */
 void lowerIndirectRead(uint32_t argID);
 /* Convert indirectLoad to indirect Mov */
@@ -192,6 +192,25 @@ namespace ir {
 GBE_SAFE_DELETE(liveness);
   }
 
+// Remove all the given instructions from the stream (if dead)
+#define REMOVE_INSN(WHICH) \
+  for (const auto  : seq) { \
+Instruction *WHICH = loadAddImm.WHICH; \
+if (WHICH == NULL) continue; \
+const UseSet  = dag->getUse(WHICH, 0); \
+bool isDead = true; \
+for (auto use : useSet) { \
+  if (dead.contains(use->getInstruction()) == false) { \
+isDead = false; \
+break; \
+  } \
+} \
+if (isDead && !dead.contains(WHICH)) { \
+  dead.insert(WHICH); \
+  WHICH->remove(); \
+} \
+  }
+
   void FunctionArgumentLowerer::lower(const std::string ) {
 if ((this->fn = unit.getFunction(functionName)) == NULL)
   return;
@@ -213,40 +232,22 @@ namespace ir {
 
 // Build the constant push description and remove the instruction that
 // therefore become useless
-this->buildConstantPush();
+set dead;
+this->buildConstantPush(dead);
 for (uint32_t i = 0; i < indirctReadArgs.size(); ++i){
   lowerIndirectRead(indirctReadArgs[i]);
 }
-ReplaceIndirectLoad();
-  }
+REMOVE_INSN(add)
+REMOVE_INSN(loadImm)
 
-// Remove all the given instructions from the stream (if dead)
-#define REMOVE_INSN(WHICH) \
-  for (const auto  : seq) { \
-Instruction *WHICH = loadAddImm.WHICH; \
-if (WHICH == NULL) continue; \
-const UseSet  = dag->getUse(WHICH, 0); \
-bool isDead = true; \
-for (auto use : useSet) { \
-  if (dead.contains(use->getInstruction()) == false) { \
-isDead = false; \
-break; \
-  } \
-} \
-if (isDead && !dead.contains(WHICH)) { \
-  dead.insert(WHICH); \
-  WHICH->remove(); \
-} \
+ReplaceIndirectLoad();
   }
 
-  void FunctionArgumentLowerer::buildConstantPush(void)
+  void FunctionArgumentLowerer::buildConstantPush(set& 
dead)
   {
 if (seq.size() == 0)
   return;
 
-// Track instructions we remove to recursively kill them properly
-set dead;
-
 // The argument location we already pushed (since the same argument 
location
 // can be used several times)
 set inserted;
@@ -291,9 +292,6 @@ namespace ir {
 load->remove();
   }
 }
-
-REMOVE_INSN(add)
-REMOVE_INSN(loadImm)
   }
 
 #undef REMOVE_INSN
-- 
2.7.4

___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet


[Beignet] [PATCH] defer dead insn removal since lowerIndirectRead still needs them

2017-04-26 Thread Guo, Yejun
---
 backend/src/ir/lowering.cpp | 54 ++---
 1 file changed, 26 insertions(+), 28 deletions(-)

diff --git a/backend/src/ir/lowering.cpp b/backend/src/ir/lowering.cpp
index 93bd96a..53aafa4 100644
--- a/backend/src/ir/lowering.cpp
+++ b/backend/src/ir/lowering.cpp
@@ -117,7 +117,7 @@ namespace ir {
 /*! Lower the given function argument accesses */
 ArgUse lower(uint32_t argID);
 /*! Build the constant push for the function */
-void buildConstantPush(void);
+void buildConstantPush(set& dead);
 /* Lower indirect Read to indirct Mov */
 void lowerIndirectRead(uint32_t argID);
 /* Convert indirectLoad to indirect Mov */
@@ -192,6 +192,25 @@ namespace ir {
 GBE_SAFE_DELETE(liveness);
   }
 
+// Remove all the given instructions from the stream (if dead)
+#define REMOVE_INSN(WHICH) \
+  for (const auto  : seq) { \
+Instruction *WHICH = loadAddImm.WHICH; \
+if (WHICH == NULL) continue; \
+const UseSet  = dag->getUse(WHICH, 0); \
+bool isDead = true; \
+for (auto use : useSet) { \
+  if (dead.contains(use->getInstruction()) == false) { \
+isDead = false; \
+break; \
+  } \
+} \
+if (isDead && !dead.contains(WHICH)) { \
+  dead.insert(WHICH); \
+  WHICH->remove(); \
+} \
+  }
+
   void FunctionArgumentLowerer::lower(const std::string ) {
 if ((this->fn = unit.getFunction(functionName)) == NULL)
   return;
@@ -213,40 +232,22 @@ namespace ir {
 
 // Build the constant push description and remove the instruction that
 // therefore become useless
-this->buildConstantPush();
+set dead;
+this->buildConstantPush(dead);
 for (uint32_t i = 0; i < indirctReadArgs.size(); ++i){
   lowerIndirectRead(indirctReadArgs[i]);
 }
-ReplaceIndirectLoad();
-  }
+REMOVE_INSN(add)
+REMOVE_INSN(loadImm)
 
-// Remove all the given instructions from the stream (if dead)
-#define REMOVE_INSN(WHICH) \
-  for (const auto  : seq) { \
-Instruction *WHICH = loadAddImm.WHICH; \
-if (WHICH == NULL) continue; \
-const UseSet  = dag->getUse(WHICH, 0); \
-bool isDead = true; \
-for (auto use : useSet) { \
-  if (dead.contains(use->getInstruction()) == false) { \
-isDead = false; \
-break; \
-  } \
-} \
-if (isDead && !dead.contains(WHICH)) { \
-  dead.insert(WHICH); \
-  WHICH->remove(); \
-} \
+ReplaceIndirectLoad();
   }
 
-  void FunctionArgumentLowerer::buildConstantPush(void)
+  void FunctionArgumentLowerer::buildConstantPush(set& 
dead)
   {
 if (seq.size() == 0)
   return;
 
-// Track instructions we remove to recursively kill them properly
-set dead;
-
 // The argument location we already pushed (since the same argument 
location
 // can be used several times)
 set inserted;
@@ -291,9 +292,6 @@ namespace ir {
 load->remove();
   }
 }
-
-REMOVE_INSN(add)
-REMOVE_INSN(loadImm)
   }
 
 #undef REMOVE_INSN
-- 
2.7.4

___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet