From b636ef881e9f93b50888963e65732a541e2e96aa Mon Sep 17 00:00:00 2001 From: hrkrshnn Date: Fri, 12 Mar 2021 18:05:05 +0100 Subject: [PATCH] Added command line tests for keccak optimization with low runs The value of keccak256(0, 32) should not be replaced by the big constant --- .../keccak_optimization_deploy_code/args | 1 + .../keccak_optimization_deploy_code/err | 1 + .../keccak_optimization_deploy_code/exit | 1 + .../keccak_optimization_deploy_code/input.sol | 21 ++++++++++++ .../keccak_optimization_deploy_code/output | 32 +++++++++++++++++++ .../keccak_optimization_low_runs/args | 1 + .../keccak_optimization_low_runs/err | 1 + .../keccak_optimization_low_runs/exit | 1 + .../keccak_optimization_low_runs/input.sol | 12 +++++++ .../keccak_optimization_low_runs/output | 30 +++++++++++++++++ 10 files changed, 101 insertions(+) create mode 100644 test/cmdlineTests/keccak_optimization_deploy_code/args create mode 100644 test/cmdlineTests/keccak_optimization_deploy_code/err create mode 100644 test/cmdlineTests/keccak_optimization_deploy_code/exit create mode 100644 test/cmdlineTests/keccak_optimization_deploy_code/input.sol create mode 100644 test/cmdlineTests/keccak_optimization_deploy_code/output create mode 100644 test/cmdlineTests/keccak_optimization_low_runs/args create mode 100644 test/cmdlineTests/keccak_optimization_low_runs/err create mode 100644 test/cmdlineTests/keccak_optimization_low_runs/exit create mode 100644 test/cmdlineTests/keccak_optimization_low_runs/input.sol create mode 100644 test/cmdlineTests/keccak_optimization_low_runs/output diff --git a/test/cmdlineTests/keccak_optimization_deploy_code/args b/test/cmdlineTests/keccak_optimization_deploy_code/args new file mode 100644 index 000000000..c5da41705 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_deploy_code/args @@ -0,0 +1 @@ +--ir-optimized --optimize --optimize-runs 50000 diff --git a/test/cmdlineTests/keccak_optimization_deploy_code/err b/test/cmdlineTests/keccak_optimization_deploy_code/err new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_deploy_code/err @@ -0,0 +1 @@ + diff --git a/test/cmdlineTests/keccak_optimization_deploy_code/exit b/test/cmdlineTests/keccak_optimization_deploy_code/exit new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_deploy_code/exit @@ -0,0 +1 @@ +0 diff --git a/test/cmdlineTests/keccak_optimization_deploy_code/input.sol b/test/cmdlineTests/keccak_optimization_deploy_code/input.sol new file mode 100644 index 000000000..671351e67 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_deploy_code/input.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-v3 +pragma solidity >= 0.0.0; + +contract C { + constructor() { + assembly { + mstore(0, 100) + // because this is part of deploy code, the keccak will not be evaluated + sstore(0, keccak256(0, 32)) + } + } + + fallback() external { + assembly { + mstore(0, 100) + // The keccak here would be evaluated + sstore(0, keccak256(0, 32)) + } + + } +} diff --git a/test/cmdlineTests/keccak_optimization_deploy_code/output b/test/cmdlineTests/keccak_optimization_deploy_code/output new file mode 100644 index 000000000..5bdfaf647 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_deploy_code/output @@ -0,0 +1,32 @@ +Optimized IR: +/******************************************************* + * WARNING * + * Solidity to Yul compilation is still EXPERIMENTAL * + * It can result in LOSS OF FUNDS or worse * + * !USE AT YOUR OWN RISK! * + *******************************************************/ + +object "C_12" { + code { + { + mstore(64, 128) + if callvalue() { revert(0, 0) } + mstore(0, 100) + sstore(0, keccak256(0, 32)) + let _1 := datasize("C_12_deployed") + codecopy(0, dataoffset("C_12_deployed"), _1) + return(0, _1) + } + } + object "C_12_deployed" { + code { + { + mstore(64, 128) + if callvalue() { revert(0, 0) } + mstore(0, 100) + sstore(0, 17385872270140913825666367956517731270094621555228275961425792378517567244498) + stop() + } + } + } +} diff --git a/test/cmdlineTests/keccak_optimization_low_runs/args b/test/cmdlineTests/keccak_optimization_low_runs/args new file mode 100644 index 000000000..3e162407f --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_low_runs/args @@ -0,0 +1 @@ +--ir-optimized --optimize --optimize-runs 1 diff --git a/test/cmdlineTests/keccak_optimization_low_runs/err b/test/cmdlineTests/keccak_optimization_low_runs/err new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_low_runs/err @@ -0,0 +1 @@ + diff --git a/test/cmdlineTests/keccak_optimization_low_runs/exit b/test/cmdlineTests/keccak_optimization_low_runs/exit new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_low_runs/exit @@ -0,0 +1 @@ +0 diff --git a/test/cmdlineTests/keccak_optimization_low_runs/input.sol b/test/cmdlineTests/keccak_optimization_low_runs/input.sol new file mode 100644 index 000000000..cc791b364 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_low_runs/input.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-v3 +pragma solidity >= 0.0.0; + +contract C { + fallback() external { + assembly { + mstore(0, 100) + // because of the low runs value, the constant will not be optimized + sstore(0, keccak256(0, 32)) + } + } +} diff --git a/test/cmdlineTests/keccak_optimization_low_runs/output b/test/cmdlineTests/keccak_optimization_low_runs/output new file mode 100644 index 000000000..ab6027035 --- /dev/null +++ b/test/cmdlineTests/keccak_optimization_low_runs/output @@ -0,0 +1,30 @@ +Optimized IR: +/******************************************************* + * WARNING * + * Solidity to Yul compilation is still EXPERIMENTAL * + * It can result in LOSS OF FUNDS or worse * + * !USE AT YOUR OWN RISK! * + *******************************************************/ + +object "C_7" { + code { + { + mstore(64, 128) + if callvalue() { revert(0, 0) } + let _1 := datasize("C_7_deployed") + codecopy(0, dataoffset("C_7_deployed"), _1) + return(0, _1) + } + } + object "C_7_deployed" { + code { + { + mstore(64, 128) + if callvalue() { revert(0, 0) } + mstore(0, 100) + sstore(0, keccak256(0, 32)) + stop() + } + } + } +}