[enco] Dead Bag Elimination as an independent module (#1726)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Tue, 2 Oct 2018 10:03:25 +0000 (19:03 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 2 Oct 2018 10:03:25 +0000 (19:03 +0900)
This commit introduces "DeadBagElimination" module (header and source)
which includes the declaration and implementation of 'eliminate_dead_bag'.

Previously, the declaration and implementation was in Optimizations
module.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/enco/core/src/Backend.cpp
contrib/enco/core/src/Transforms/DeadBagElimination.cpp [new file with mode: 0644]
contrib/enco/core/src/Transforms/DeadBagElimination.h [new file with mode: 0644]
contrib/enco/core/src/Transforms/Optimizations.cpp
contrib/enco/core/src/Transforms/Optimizations.h

index c97ee5f..d11bd44 100644 (file)
@@ -29,6 +29,7 @@
 #include "Transforms/IdenticalObjectReduction.h"
 #include "Transforms/DuplicatedObjectReduction.h"
 #include "Transforms/DeadObjectElimination.h"
+#include "Transforms/DeadBagElimination.h"
 #include "Transforms/Optimizations.h"
 #include "Transforms/Split.h"
 
diff --git a/contrib/enco/core/src/Transforms/DeadBagElimination.cpp b/contrib/enco/core/src/Transforms/DeadBagElimination.cpp
new file mode 100644 (file)
index 0000000..8c0dd7a
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "DeadBagElimination.h"
+
+#include <set>
+
+namespace
+{
+
+// @brief Return true if a given bag is marked as either input or output
+bool is_public(const coco::Bag *b) { return b->isInput() || b->isOutput(); }
+
+// @brief Return the set of "dead" bags in a given module
+std::set<coco::Bag *> dead_bags(const coco::Module *m)
+{
+  std::set<coco::Bag *> res;
+
+  for (uint32_t n = 0; n < m->entity()->bag()->size(); ++n)
+  {
+    auto bag = m->entity()->bag()->at(n);
+
+    if (coco::readers(bag).empty() && !is_public(bag))
+    {
+      res.insert(bag);
+    }
+  }
+
+  return res;
+}
+
+} // namespace
+
+namespace enco
+{
+
+void eliminate_dead_bag(enco::Code *code)
+{
+  auto m = code->module();
+
+  // Destroy a dead bag and its updaters
+  for (auto bag : dead_bags(m))
+  {
+    for (auto updater : coco::updaters(bag))
+    {
+      auto ins = updater->loc();
+
+      assert(ins != nullptr);
+
+      ins->detach();
+      m->entity()->instr()->destroy(ins);
+    }
+
+    bag->replaceWith(nullptr);
+    m->entity()->bag()->destroy(bag);
+  }
+}
+
+} // namespace enco
diff --git a/contrib/enco/core/src/Transforms/DeadBagElimination.h b/contrib/enco/core/src/Transforms/DeadBagElimination.h
new file mode 100644 (file)
index 0000000..ab81cb2
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __ENCO_TRANSFORM_DEAD_BAG_ELIMINATION_H__
+#define __ENCO_TRANSFORM_DEAD_BAG_ELIMINATION_H__
+
+#include "Code.h"
+
+namespace enco
+{
+
+/**
+ * @brief Eliminate dead bags
+ *
+ * A bag is referred to as dead if it is neither input nor output, and has no read. If a bag is
+ * dead, it is unnecessary to updates its values as these values are never used.
+ *
+ * "eliminate_dead_bag" removes all the dead bags and its updaters from IR.
+ */
+void eliminate_dead_bag(enco::Code *code);
+
+} // namespace enco
+
+#endif // __ENCO_TRANSFORM_DEAD_BAG_ELIMINATION_H__
index 6b86a06..90ad1b7 100644 (file)
@@ -255,61 +255,3 @@ void hoist_object(enco::Code *code)
 }
 
 } // namespace enco
-
-//
-// Dead Bag Elimination
-//
-#include <set>
-
-namespace
-{
-
-// @brief Return true if a given bag is marked as either input or output
-bool is_public(const coco::Bag *b) { return b->isInput() || b->isOutput(); }
-
-// @brief Return the set of "dead" bags in a given module
-std::set<coco::Bag *> dead_bags(const coco::Module *m)
-{
-  std::set<coco::Bag *> res;
-
-  for (uint32_t n = 0; n < m->entity()->bag()->size(); ++n)
-  {
-    auto bag = m->entity()->bag()->at(n);
-
-    if (coco::readers(bag).empty() && !is_public(bag))
-    {
-      res.insert(bag);
-    }
-  }
-
-  return res;
-}
-
-} // namespace
-
-namespace enco
-{
-
-void eliminate_dead_bag(enco::Code *code)
-{
-  auto m = code->module();
-
-  // Destroy a dead bag and its updaters
-  for (auto bag : dead_bags(m))
-  {
-    for (auto updater : coco::updaters(bag))
-    {
-      auto ins = updater->loc();
-
-      assert(ins != nullptr);
-
-      ins->detach();
-      m->entity()->instr()->destroy(ins);
-    }
-
-    bag->replaceWith(nullptr);
-    m->entity()->bag()->destroy(bag);
-  }
-}
-
-} // namespace enco
index 1b4cc17..c5f0f9c 100644 (file)
@@ -87,16 +87,6 @@ void generate_bypass_shuffle(enco::Code *code);
  */
 void hoist_object(enco::Code *code);
 
-/**
- * @brief Eliminate dead bags
- *
- * A bag is referred to as dead if it is neither input nor output, and has no read. If a bag is
- * dead, it is unnecessary to updates its values as these values are never used.
- *
- * "eliminate_dead_bag" removes all the dead bags and its updaters from IR.
- */
-void eliminate_dead_bag(enco::Code *code);
-
 } // namespace enco
 
 #endif // __ENCO_OPTIMIZATIONS_H__