diff options
-rw-r--r-- | libjulia/optimiser/DataFlowAnalyzer.cpp | 2 | ||||
-rw-r--r-- | test/libjulia/Rematerialiser.cpp | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/libjulia/optimiser/DataFlowAnalyzer.cpp b/libjulia/optimiser/DataFlowAnalyzer.cpp index 9ee3215d..56653393 100644 --- a/libjulia/optimiser/DataFlowAnalyzer.cpp +++ b/libjulia/optimiser/DataFlowAnalyzer.cpp @@ -135,9 +135,7 @@ void DataFlowAnalyzer::handleAssignment(set<string> const& _variables, Expressio string const& name = *_variables.begin(); // Expression has to be movable and cannot contain a reference // to the variable that will be assigned to. - // TODO: Add a test for that if (_value && movableChecker.movable() && !movableChecker.referencedVariables().count(name)) - // TODO If _value is null, we could use zero. m_value[name] = _value; } diff --git a/test/libjulia/Rematerialiser.cpp b/test/libjulia/Rematerialiser.cpp index 5bd69236..8f928f8e 100644 --- a/test/libjulia/Rematerialiser.cpp +++ b/test/libjulia/Rematerialiser.cpp @@ -146,6 +146,15 @@ BOOST_AUTO_TEST_CASE(reassignment) ); } +BOOST_AUTO_TEST_CASE(update_assignment_remat) +{ + // We cannot substitute `a` in `let b := a` + CHECK( + "{ let a := extcodesize(0) a := mul(a, 2) let b := a }", + "{ let a := extcodesize(0) a := mul(a, 2) let b := a }" + ); +} + BOOST_AUTO_TEST_CASE(do_not_move_out_of_scope) { // Cannot replace by `let b := x` by `let b := a` since a is out of scope. |