diff --git a/test/libyul/YulOptimizerTestCommon.cpp b/test/libyul/YulOptimizerTestCommon.cpp index c2e836e45..2a56b7df8 100644 --- a/test/libyul/YulOptimizerTestCommon.cpp +++ b/test/libyul/YulOptimizerTestCommon.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -243,6 +244,15 @@ YulOptimizerTestCommon::YulOptimizerTestCommon( SSATransform::run(*m_context, *m_ast); RedundantAssignEliminator::run(*m_context, *m_ast); }}, + {"redundantStoreEliminator", [&]() { + disambiguate(); + ForLoopInitRewriter::run(*m_context, *m_ast); + ExpressionSplitter::run(*m_context, *m_ast); + CommonSubexpressionEliminator::run(*m_context, *m_ast); + RedundantStoreEliminator::run(*m_context, *m_ast); + UnusedPruner::run(*m_context, *m_ast); + ExpressionJoiner::run(*m_context, *m_ast); + }}, {"loadResolver", [&]() { disambiguate(); ForLoopInitRewriter::run(*m_context, *m_ast); diff --git a/test/libyul/yulOptimizerTests/redundantStoreEliminator/intermittent_load.yul b/test/libyul/yulOptimizerTests/redundantStoreEliminator/intermittent_load.yul new file mode 100644 index 000000000..e1addcd4e --- /dev/null +++ b/test/libyul/yulOptimizerTests/redundantStoreEliminator/intermittent_load.yul @@ -0,0 +1,18 @@ +{ + sstore(0, calldataload(0)) + let x := sload(0) + sstore(1, calldataload(2)) + sstore(7, x) + sstore(0, calldataload(7)) +} +// ---- +// step: redundantStoreEliminator +// +// { +// let _1 := 0 +// let x := sload(_1) +// sstore(1, calldataload(2)) +// let _8 := 7 +// sstore(_8, x) +// sstore(_1, calldataload(_8)) +// } diff --git a/test/libyul/yulOptimizerTests/redundantStoreEliminator/simple.yul b/test/libyul/yulOptimizerTests/redundantStoreEliminator/simple.yul new file mode 100644 index 000000000..9ce5f8617 --- /dev/null +++ b/test/libyul/yulOptimizerTests/redundantStoreEliminator/simple.yul @@ -0,0 +1,13 @@ +{ + sstore(0, calldataload(0)) + sstore(1, calldataload(2)) + sstore(0, calldataload(7)) +} +// ---- +// step: redundantStoreEliminator +// +// { +// let _1 := 0 +// sstore(1, calldataload(2)) +// sstore(_1, calldataload(7)) +// }