Equal store eliminator.

This commit is contained in:
chriseth
2022-01-03 15:52:05 +01:00
parent 223395bcad
commit 772e100813
14 changed files with 210 additions and 27 deletions
+6
View File
@@ -28,6 +28,7 @@
#include <libyul/optimiser/ConditionalUnsimplifier.h>
#include <libyul/optimiser/ConditionalSimplifier.h>
#include <libyul/optimiser/CommonSubexpressionEliminator.h>
#include <libyul/optimiser/EqualStoreEliminator.h>
#include <libyul/optimiser/EquivalentFunctionCombiner.h>
#include <libyul/optimiser/ExpressionSplitter.h>
#include <libyul/optimiser/FunctionGrouper.h>
@@ -236,6 +237,11 @@ YulOptimizerTestCommon::YulOptimizerTestCommon(
ForLoopInitRewriter::run(*m_context, *m_ast);
UnusedAssignEliminator::run(*m_context, *m_ast);
}},
{"equalStoreEliminator", [&]() {
disambiguate();
ForLoopInitRewriter::run(*m_context, *m_ast);
EqualStoreEliminator::run(*m_context, *m_ast);
}},
{"ssaPlusCleanup", [&]() {
disambiguate();
ForLoopInitRewriter::run(*m_context, *m_ast);
@@ -0,0 +1,31 @@
{
let var_k := calldataload(0)
let _1 := 0x00
let _2 := 0x20
mstore(_1, var_k)
mstore(_2, _1)
sstore(keccak256(_1, 0x40), 0x01)
mstore(_1, var_k)
mstore(_2, _1)
sstore(add(keccak256(_1, 0x40), 0x01), 0x03)
mstore(_1, var_k)
mstore(_2, _1)
sstore(add(keccak256(_1, 0x40), 2), 0x04)
mstore(_1, var_k)
mstore(_2, _1)
sstore(add(keccak256(_1, 0x40), 0x03), 2)
}
// ----
// step: equalStoreEliminator
//
// {
// let var_k := calldataload(0)
// let _1 := 0x00
// let _2 := 0x20
// mstore(_1, var_k)
// mstore(_2, _1)
// sstore(keccak256(_1, 0x40), 0x01)
// sstore(add(keccak256(_1, 0x40), 0x01), 0x03)
// sstore(add(keccak256(_1, 0x40), 2), 0x04)
// sstore(add(keccak256(_1, 0x40), 0x03), 2)
// }
+1 -1
View File
@@ -138,7 +138,7 @@ BOOST_AUTO_TEST_CASE(output_operator_should_create_concise_and_unambiguous_strin
BOOST_TEST(chromosome.length() == allSteps.size());
BOOST_TEST(chromosome.optimisationSteps() == allSteps);
BOOST_TEST(toString(chromosome) == "flcCUnDvejsxIOoighFTLMRmVatrpud");
BOOST_TEST(toString(chromosome) == "flcCUnDEvejsxIOoighFTLMRrmVatpud");
}
BOOST_AUTO_TEST_CASE(optimisationSteps_should_translate_chromosomes_genes_to_optimisation_step_names)