From 2b6a7665ee79e1397f72cca8fb21e44e29045844 Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 2 Feb 2018 15:23:44 +0100 Subject: Refactor data flow analysis out of remat. --- libjulia/optimiser/Rematerialiser.h | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) (limited to 'libjulia/optimiser/Rematerialiser.h') 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 +#include #include #include @@ -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 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 m_substitutions; - /// m_references[a].contains(b) <=> the current expression assigned to a references b - std::map> m_references; - /// m_referencedBy[b].contains(a) <=> the current expression assigned to a references b - std::map> 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, bool>> m_variableScopes; }; } -- cgit