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() + } + } + } +}