From 3fdca8871156ce227cdfb4647560fa9ce02842aa Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 27 Apr 2022 15:40:35 +0200 Subject: [PATCH] some tests --- .../clear_assign_in_one_switch.yul | 45 +++++++++++++++++++ .../for_increment.yul | 37 +++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 test/libyul/yulOptimizerTests/commonSubexpressionEliminator/clear_assign_in_one_switch.yul create mode 100644 test/libyul/yulOptimizerTests/reasoningBasedSimplifier/for_increment.yul diff --git a/test/libyul/yulOptimizerTests/commonSubexpressionEliminator/clear_assign_in_one_switch.yul b/test/libyul/yulOptimizerTests/commonSubexpressionEliminator/clear_assign_in_one_switch.yul new file mode 100644 index 000000000..61aac1da8 --- /dev/null +++ b/test/libyul/yulOptimizerTests/commonSubexpressionEliminator/clear_assign_in_one_switch.yul @@ -0,0 +1,45 @@ +{ + let x := 10 + switch calldataload(0) + case 0 { + x := 2 + } + case 1 { + if calldataload(2) { revert(0, 0) } + } + // this should not be replaced by x + sstore(0, 10) + + function f(arg) -> r { + switch calldataload(0) + case 0 { + r := 2 + } + case 1 { + if calldataload(2) { revert(0, 0) } + } + // this should not be replaced by r + sstore(0, 0) + } +} +// ---- +// step: commonSubexpressionEliminator +// +// { +// let x := 10 +// switch calldataload(0) +// case 0 { x := 2 } +// case 1 { +// if calldataload(2) { revert(0, 0) } +// } +// sstore(0, 10) +// function f(arg) -> r +// { +// switch calldataload(0) +// case 0 { r := 2 } +// case 1 { +// if calldataload(2) { revert(0, 0) } +// } +// sstore(0, 0) +// } +// } diff --git a/test/libyul/yulOptimizerTests/reasoningBasedSimplifier/for_increment.yul b/test/libyul/yulOptimizerTests/reasoningBasedSimplifier/for_increment.yul new file mode 100644 index 000000000..33f17de96 --- /dev/null +++ b/test/libyul/yulOptimizerTests/reasoningBasedSimplifier/for_increment.yul @@ -0,0 +1,37 @@ +{ + let var_x_mpos := mload(0x40) + let var_r := 0 + let var_i := 0 + for { } + lt(var_i, mload(var_x_mpos)) + { + // "not(0)" does not work here - can we + // use a different step to do the bulk of the work here? + if eq(var_i, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { revert(0, 0) } + var_i := add(var_i, 1) + } + { + let _1_1 := mload(add(add(var_x_mpos, shl(5, var_i)), 32)) + if gt(var_r, not(_1_1)) { revert(0, 0) } + var_r := add(var_r, _1_1) + } +} +// ---- +// step: reasoningBasedSimplifier +// +// { +// let var_x_mpos := mload(0x40) +// let var_r := 0 +// let var_i := 0 +// for { } +// lt(var_i, mload(var_x_mpos)) +// { +// if 0 { } +// var_i := add(var_i, 1) +// } +// { +// let _1_1 := mload(add(add(var_x_mpos, shl(5, var_i)), 32)) +// if gt(var_r, not(_1_1)) { revert(0, 0) } +// var_r := add(var_r, _1_1) +// } +// }