aboutsummaryrefslogtreecommitdiffstats
path: root/libjulia/optimiser/Rematerialiser.h
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-02-02 22:23:44 +0800
committerchriseth <chris@ethereum.org>2018-02-06 19:38:32 +0800
commit2b6a7665ee79e1397f72cca8fb21e44e29045844 (patch)
treef47f5625a851cfef5fe22db28b503f415a214353 /libjulia/optimiser/Rematerialiser.h
parente100af592b7f78166ba867bf4f9b151d3adece08 (diff)
downloaddexon-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.h29
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;
};
}