aboutsummaryrefslogtreecommitdiffstats
path: root/libjulia/optimiser/Rematerialiser.h
diff options
context:
space:
mode:
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;
};
}