diff options
author | chriseth <chris@ethereum.org> | 2018-02-02 22:23:44 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-02-06 19:38:32 +0800 |
commit | 2b6a7665ee79e1397f72cca8fb21e44e29045844 (patch) | |
tree | f47f5625a851cfef5fe22db28b503f415a214353 /libjulia/optimiser/Rematerialiser.h | |
parent | e100af592b7f78166ba867bf4f9b151d3adece08 (diff) | |
download | dexon-solidity-2b6a7665ee79e1397f72cca8fb21e44e29045844.tar dexon-solidity-2b6a7665ee79e1397f72cca8fb21e44e29045844.tar.gz dexon-solidity-2b6a7665ee79e1397f72cca8fb21e44e29045844.tar.bz2 dexon-solidity-2b6a7665ee79e1397f72cca8fb21e44e29045844.tar.lz dexon-solidity-2b6a7665ee79e1397f72cca8fb21e44e29045844.tar.xz dexon-solidity-2b6a7665ee79e1397f72cca8fb21e44e29045844.tar.zst dexon-solidity-2b6a7665ee79e1397f72cca8fb21e44e29045844.zip |
Refactor data flow analysis out of remat.
Diffstat (limited to 'libjulia/optimiser/Rematerialiser.h')
-rw-r--r-- | libjulia/optimiser/Rematerialiser.h | 29 |
1 files changed, 2 insertions, 27 deletions
diff --git a/libjulia/optimiser/Rematerialiser.h b/libjulia/optimiser/Rematerialiser.h index 1accc3f6..60dbfada 100644 --- a/libjulia/optimiser/Rematerialiser.h +++ b/libjulia/optimiser/Rematerialiser.h @@ -20,7 +20,7 @@ #pragma once -#include <libjulia/optimiser/ASTWalker.h> +#include <libjulia/optimiser/DataFlowAnalyzer.h> #include <string> #include <map> @@ -36,37 +36,12 @@ namespace julia * * Prerequisite: Disambiguator */ -class Rematerialiser: public ASTModifier +class Rematerialiser: public DataFlowAnalyzer { -public: - using ASTModifier::operator(); - virtual void operator()(Assignment& _assignment) override; - virtual void operator()(VariableDeclaration& _varDecl) override; - virtual void operator()(If& _if) override; - virtual void operator()(Switch& _switch) override; - virtual void operator()(FunctionDefinition&) override; - virtual void operator()(ForLoop&) override; - virtual void operator()(Block& _block) override; - protected: using ASTModifier::visit; virtual void visit(Expression& _e) override; -private: - void handleAssignment(std::set<std::string> const& _names, Expression* _value); - - /// Returns true iff the variable is in scope. - bool inScope(std::string const& _variableName) const; - - /// Substitutions to be performed, if possible. - std::map<std::string, Expression const*> m_substitutions; - /// m_references[a].contains(b) <=> the current expression assigned to a references b - std::map<std::string, std::set<std::string>> m_references; - /// m_referencedBy[b].contains(a) <=> the current expression assigned to a references b - std::map<std::string, std::set<std::string>> m_referencedBy; - /// List of scopes, where each scope is a set of variables and a bool that tells - /// whether it is a function body (true) or not. - std::vector<std::pair<std::set<std::string>, bool>> m_variableScopes; }; } |