[enco] Introduce ConstantFoldingPass (#3058)
author박종현/On-Device Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Mon, 11 Mar 2019 05:20:17 +0000 (14:20 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 11 Mar 2019 05:20:17 +0000 (14:20 +0900)
This commit introduces ConstantFoldingPass and revises backend
implementation to use this ConstantFoldingPass pass.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/enco/core/src/Backend.cpp
contrib/enco/core/src/Transforms/ConstantFolding.h

index 0578436..a4255dd 100644 (file)
@@ -111,6 +111,7 @@ void BackendImpl::compile(coco::Module *m, coco::Data *d)
   pipeline.append(make_unique<IndirectCopyEliminationPass>());
   pipeline.append(make_unique<IdenticalObjectReductionPass>());
   pipeline.append(make_unique<DuplicatedObjectReductionPass>());
+  pipeline.append(make_unique<ConstantFoldingPass>());
 
   // Apply transforms in the pipeline
   for (uint32_t n = 0; n < pipeline.size(); ++n)
@@ -129,8 +130,6 @@ void BackendImpl::compile(coco::Module *m, coco::Data *d)
   // that share the same bag as their underlying bag
   assert(!has_inout_bag(code(sess)->module()));
 
-  fold_constants(code(sess));
-
   // Eliminate dead object
   //
   // NOTE Dead Object Elimination (DOE) is performed before Copy lowering
index 20ab1a4..6faa9c8 100644 (file)
@@ -18,6 +18,7 @@
 #define __CONSTANT_FOLDING_H__
 
 #include "Code.h"
+#include "Pass.h"
 
 namespace enco
 {
@@ -27,6 +28,16 @@ namespace enco
  */
 void fold_constants(enco::Code *);
 
+struct ConstantFoldingPass final : public Pass
+{
+  PASS_CTOR(ConstantFoldingPass)
+  {
+    // DO NOTHING
+  }
+
+  void run(const SessionID &sess) const override { fold_constants(code(sess)); }
+};
+
 } // namespace enco
 
 #endif // __CONSTANT_FOLDING_H__