|
@@ -0,0 +1,45 @@
|
|
|
|
+#ifndef ZP_OPTIMIZER_H
|
|
|
|
+#define ZP_OPTIMIZER_H
|
|
|
|
+
|
|
|
|
+#include "Parser.h"
|
|
|
|
+
|
|
|
|
+namespace zp
|
|
|
|
+{
|
|
|
|
+ template <typename T>
|
|
|
|
+ class AstVisitor;
|
|
|
|
+
|
|
|
|
+ struct Instruction;
|
|
|
|
+ class Optimizer;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+template <typename T>
|
|
|
|
+class zp::AstVisitor
|
|
|
|
+{
|
|
|
|
+public:
|
|
|
|
+ T visit(Block& block);
|
|
|
|
+
|
|
|
|
+ virtual T visitLoop(Loop& loop) = 0;
|
|
|
|
+ virtual T visitInstructionBlock(InstructionBlock& ib) = 0;
|
|
|
|
+ virtual T visitUnionBlock(UnionBlock& ub) = 0;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+struct zp::Instruction
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class zp::Optimizer :
|
|
|
|
+ public AstVisitor<std::unique_ptr<Instruction>>
|
|
|
|
+{
|
|
|
|
+public:
|
|
|
|
+ std::unique_ptr<Instruction> visitLoop(Loop& loop) override;
|
|
|
|
+ std::unique_ptr<Instruction> visitInstructionBlock(InstructionBlock& ib) override;
|
|
|
|
+ std::unique_ptr<Instruction> visitUnionBlock(UnionBlock& ub) override;
|
|
|
|
+
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#endif /* ZP_OPTIMIZER_H */
|