Refactor Optimiser Steps Interface.

This commit is contained in:
chriseth
2019-09-24 14:52:01 +02:00
parent c4208a6ab8
commit 9ce1ca2340
49 changed files with 674 additions and 293 deletions
+12 -9
View File
@@ -30,6 +30,7 @@
namespace yul
{
struct Dialect;
struct OptimiserStepContext;
/**
* Optimiser component that modifies an AST in place, inlining functions that can be
@@ -48,11 +49,8 @@ struct Dialect;
class ExpressionInliner: public ASTModifier
{
public:
ExpressionInliner(Dialect const& _dialect, Block& _block):
m_block(_block), m_dialect(_dialect)
{}
void run();
static constexpr char const* name{"ExpressionInliner"};
static void run(OptimiserStepContext&, Block& _ast);
using ASTModifier::operator();
void operator()(FunctionDefinition& _fun) override;
@@ -60,13 +58,18 @@ public:
void visit(Expression& _expression) override;
private:
std::map<YulString, FunctionDefinition const*> m_inlinableFunctions;
ExpressionInliner(
Dialect const& _dialect,
std::map<YulString, FunctionDefinition const*> const& _inlinableFunctions
): m_dialect(_dialect), m_inlinableFunctions(_inlinableFunctions)
{}
Dialect const& m_dialect;
std::map<YulString, FunctionDefinition const*> const& m_inlinableFunctions;
std::map<YulString, YulString> m_varReplacements;
/// Set of functions we are currently visiting inside.
std::set<YulString> m_currentFunctions;
Block& m_block;
Dialect const& m_dialect;
};
}