From 7bed40af93b688cc75415e8c35462f7ac30dc4b9 Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 26 Apr 2021 18:21:00 +0200 Subject: [PATCH] Tests. --- test/libyul/YulOptimizerTestCommon.cpp | 10 ++++++++++ .../intermittent_load.yul | 18 ++++++++++++++++++ .../redundantStoreEliminator/simple.yul | 13 +++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 test/libyul/yulOptimizerTests/redundantStoreEliminator/intermittent_load.yul create mode 100644 test/libyul/yulOptimizerTests/redundantStoreEliminator/simple.yul 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)) +// }