diff --git a/Changelog.md b/Changelog.md index c837d3975..8e3c57c9d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,6 +6,7 @@ Language Features: Compiler Features: * Command Line Interface: Drop experimental support for ``--machine evm15``. * Optimizer: Try to move ``and`` with constant inside ``or`` to improve storage writes of small types. + * Optimizer: Replace multiplications and divisions with powers of two by shifts. Bugfixes: diff --git a/libevmasm/RuleList.h b/libevmasm/RuleList.h index c2f2cdbb8..4674428ba 100644 --- a/libevmasm/RuleList.h +++ b/libevmasm/RuleList.h @@ -57,6 +57,15 @@ template S shlWorkaround(S const& _x, unsigned _amount) return u256((bigint(_x) << _amount) & u256(-1)); } +/// @returns k if _x == 2**k, nullopt otherwise +inline std::optional binaryLogarithm(u256 const& _x) +{ + if (_x == 0) + return std::nullopt; + size_t msb = boost::multiprecision::msb(_x); + return (u256(1) << msb) == _x ? std::make_optional(msb) : std::nullopt; +} + // simplificationRuleList below was split up into parts to prevent // stack overflows in the JavaScript optimizer for emscripten builds // that affected certain browser versions. @@ -633,7 +642,7 @@ std::vector> simplificationRuleListPart8( template std::vector> evmRuleList( langutil::EVMVersion _evmVersion, - Pattern, + Pattern A, Pattern, Pattern, Pattern, @@ -661,10 +670,27 @@ std::vector> evmRuleList( [=]() -> Pattern { return Word(1); } ); if (_evmVersion.hasBitwiseShifting()) + { rules.emplace_back( Builtins::EXP(2, X), [=]() -> Pattern { return Builtins::SHL(X, 1); } ); + rules.emplace_back( + Builtins::MUL(A, X), + [=]() -> Pattern { return Builtins::SHL(u256(*binaryLogarithm(A.d())), X); }, + [=] { return binaryLogarithm(A.d()).has_value(); } + ); + rules.emplace_back( + Builtins::MUL(X, A), + [=]() -> Pattern { return Builtins::SHL(u256(*binaryLogarithm(A.d())), X); }, + [=] { return binaryLogarithm(A.d()).has_value(); } + ); + rules.emplace_back( + Builtins::DIV(X, A), + [=]() -> Pattern { return Builtins::SHR(u256(*binaryLogarithm(A.d())), X); }, + [=] { return binaryLogarithm(A.d()).has_value(); } + ); + } rules.emplace_back( Builtins::EXP(Word(-1), X), [=]() -> Pattern diff --git a/test/cmdlineTests/name_simplifier/output b/test/cmdlineTests/name_simplifier/output index 56e382e25..a26c82966 100644 --- a/test/cmdlineTests/name_simplifier/output +++ b/test/cmdlineTests/name_simplifier/output @@ -34,7 +34,7 @@ object "C_59" { if iszero(slt(add(offset, 35), calldatasize())) { revert(_1, _1) } let _4 := calldataload(add(4, offset)) if gt(_4, _3) { panic_error_0x41() } - let _5 := mul(_4, _2) + let _5 := shl(5, _4) let dst := allocate_memory(add(_5, _2)) let dst_1 := dst mstore(dst, _4) @@ -95,12 +95,12 @@ object "C_59" { } function extract_from_storage_value_dynamict_uint256(slot_value, offset) -> value { - value := shr(mul(offset, 8), slot_value) + value := shr(shl(3, offset), slot_value) } function fun_sumArray(var_s_mpos) -> var, var_mpos { if iszero(lt(var_mpos, mload(var_s_mpos))) { panic_error_0x32() } - let _1 := mload(mload(add(add(var_s_mpos, mul(var_mpos, 32)), 32))) + let _1 := mload(mload(add(add(var_s_mpos, shl(5, var_mpos)), 32))) let _2, _3 := storage_array_index_access_struct_S(var_mpos, var_mpos) sstore(_2, _1) if iszero(lt(0x01, mload(var_s_mpos))) { panic_error_0x32() } @@ -108,7 +108,7 @@ object "C_59" { if iszero(lt(var_mpos, 0x02)) { panic_error_0x32() } let slot := add(0x02, var_mpos) let _5 := sload(slot) - let shiftBits := mul(var_mpos, 8) + let shiftBits := shl(3, var_mpos) let mask := shl(shiftBits, not(0)) sstore(slot, or(and(_5, not(mask)), and(shl(shiftBits, _4), mask))) let _6, _7 := storage_array_index_access_struct_S(0x02, var_mpos) diff --git a/test/cmdlineTests/standard_optimizer_generatedSources/output.json b/test/cmdlineTests/standard_optimizer_generatedSources/output.json index 3cf78e730..dd61856f7 100644 --- a/test/cmdlineTests/standard_optimizer_generatedSources/output.json +++ b/test/cmdlineTests/standard_optimizer_generatedSources/output.json @@ -1,4 +1,4 @@ -{"contracts":{"a.sol":{"A":{"evm":{"bytecode":{"generatedSources":[],"object":""},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1502:1","statements":[{"nodeType":"YulBlock","src":"6:3:1","statements":[]},{"body":{"nodeType":"YulBlock","src":"109:1077:1","statements":[{"nodeType":"YulVariableDeclaration","src":"119:12:1","value":{"kind":"number","nodeType":"YulLiteral","src":"129:2:1","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"123:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"176:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"185:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"193:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"178:6:1"},"nodeType":"YulFunctionCall","src":"178:22:1"},"nodeType":"YulExpressionStatement","src":"178:22:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"151:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"160:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"147:3:1"},"nodeType":"YulFunctionCall","src":"147:23:1"},{"name":"_1","nodeType":"YulIdentifier","src":"172:2:1"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"143:3:1"},"nodeType":"YulFunctionCall","src":"143:32:1"},"nodeType":"YulIf","src":"140:2:1"},{"nodeType":"YulVariableDeclaration","src":"211:37:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"238:9:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"225:12:1"},"nodeType":"YulFunctionCall","src":"225:23:1"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"215:6:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"257:28:1","value":{"kind":"number","nodeType":"YulLiteral","src":"267:18:1","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"261:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"312:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"321:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"329:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:1"},"nodeType":"YulFunctionCall","src":"314:22:1"},"nodeType":"YulExpressionStatement","src":"314:22:1"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:1"},{"name":"_2","nodeType":"YulIdentifier","src":"308:2:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"297:2:1"},"nodeType":"YulFunctionCall","src":"297:14:1"},"nodeType":"YulIf","src":"294:2:1"},{"nodeType":"YulVariableDeclaration","src":"347:32:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"361:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"372:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"357:3:1"},"nodeType":"YulFunctionCall","src":"357:22:1"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"351:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"427:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"436:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"444:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"429:6:1"},"nodeType":"YulFunctionCall","src":"429:22:1"},"nodeType":"YulExpressionStatement","src":"429:22:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"406:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"410:4:1","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"402:3:1"},"nodeType":"YulFunctionCall","src":"402:13:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"417:7:1"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"398:3:1"},"nodeType":"YulFunctionCall","src":"398:27:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:1"},"nodeType":"YulFunctionCall","src":"391:35:1"},"nodeType":"YulIf","src":"388:2:1"},{"nodeType":"YulVariableDeclaration","src":"462:26:1","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"485:2:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"472:12:1"},"nodeType":"YulFunctionCall","src":"472:16:1"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"466:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"511:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"513:16:1"},"nodeType":"YulFunctionCall","src":"513:18:1"},"nodeType":"YulExpressionStatement","src":"513:18:1"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"503:2:1"},{"name":"_2","nodeType":"YulIdentifier","src":"507:2:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"500:2:1"},"nodeType":"YulFunctionCall","src":"500:10:1"},"nodeType":"YulIf","src":"497:2:1"},{"nodeType":"YulVariableDeclaration","src":"542:21:1","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"556:2:1"},{"name":"_1","nodeType":"YulIdentifier","src":"560:2:1"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"552:3:1"},"nodeType":"YulFunctionCall","src":"552:11:1"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"546:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"572:23:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"592:2:1","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"586:5:1"},"nodeType":"YulFunctionCall","src":"586:9:1"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"576:6:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"604:56:1","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"626:6:1"},{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"642:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"646:2:1","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"638:3:1"},"nodeType":"YulFunctionCall","src":"638:11:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"655:2:1","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"651:3:1"},"nodeType":"YulFunctionCall","src":"651:7:1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"634:3:1"},"nodeType":"YulFunctionCall","src":"634:25:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"622:3:1"},"nodeType":"YulFunctionCall","src":"622:38:1"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"608:10:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"719:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"721:16:1"},"nodeType":"YulFunctionCall","src":"721:18:1"},"nodeType":"YulExpressionStatement","src":"721:18:1"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"678:10:1"},{"name":"_2","nodeType":"YulIdentifier","src":"690:2:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"675:2:1"},"nodeType":"YulFunctionCall","src":"675:18:1"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"698:10:1"},{"name":"memPtr","nodeType":"YulIdentifier","src":"710:6:1"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"695:2:1"},"nodeType":"YulFunctionCall","src":"695:22:1"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"672:2:1"},"nodeType":"YulFunctionCall","src":"672:46:1"},"nodeType":"YulIf","src":"669:2:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"757:2:1","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"761:10:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"750:6:1"},"nodeType":"YulFunctionCall","src":"750:22:1"},"nodeType":"YulExpressionStatement","src":"750:22:1"},{"nodeType":"YulVariableDeclaration","src":"781:17:1","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"792:6:1"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"785:3:1","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"814:6:1"},{"name":"_4","nodeType":"YulIdentifier","src":"822:2:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"807:6:1"},"nodeType":"YulFunctionCall","src":"807:18:1"},"nodeType":"YulExpressionStatement","src":"807:18:1"},{"nodeType":"YulAssignment","src":"834:22:1","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"845:6:1"},{"name":"_1","nodeType":"YulIdentifier","src":"853:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"841:3:1"},"nodeType":"YulFunctionCall","src":"841:15:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"834:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"865:22:1","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"880:2:1"},{"name":"_1","nodeType":"YulIdentifier","src":"884:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"876:3:1"},"nodeType":"YulFunctionCall","src":"876:11:1"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"869:3:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"933:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"942:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"950:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"935:6:1"},"nodeType":"YulFunctionCall","src":"935:22:1"},"nodeType":"YulExpressionStatement","src":"935:22:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"910:2:1"},{"name":"_5","nodeType":"YulIdentifier","src":"914:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"906:3:1"},"nodeType":"YulFunctionCall","src":"906:11:1"},{"name":"_1","nodeType":"YulIdentifier","src":"919:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"902:3:1"},"nodeType":"YulFunctionCall","src":"902:20:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"924:7:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"899:2:1"},"nodeType":"YulFunctionCall","src":"899:33:1"},"nodeType":"YulIf","src":"896:2:1"},{"nodeType":"YulVariableDeclaration","src":"968:15:1","value":{"name":"value0","nodeType":"YulIdentifier","src":"977:6:1"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"972:1:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"1037:118:1","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1058:3:1"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1076:3:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1063:12:1"},"nodeType":"YulFunctionCall","src":"1063:17:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1051:6:1"},"nodeType":"YulFunctionCall","src":"1051:30:1"},"nodeType":"YulExpressionStatement","src":"1051:30:1"},{"nodeType":"YulAssignment","src":"1094:19:1","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1105:3:1"},{"name":"_1","nodeType":"YulIdentifier","src":"1110:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1101:3:1"},"nodeType":"YulFunctionCall","src":"1101:12:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1094:3:1"}]},{"nodeType":"YulAssignment","src":"1126:19:1","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1137:3:1"},{"name":"_1","nodeType":"YulIdentifier","src":"1142:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1133:3:1"},"nodeType":"YulFunctionCall","src":"1133:12:1"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"1126:3:1"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1003:1:1"},{"name":"_4","nodeType":"YulIdentifier","src":"1006:2:1"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1000:2:1"},"nodeType":"YulFunctionCall","src":"1000:9:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1010:18:1","statements":[{"nodeType":"YulAssignment","src":"1012:14:1","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1021:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"1024:1:1","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1017:3:1"},"nodeType":"YulFunctionCall","src":"1017:9:1"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1012:1:1"}]}]},"pre":{"nodeType":"YulBlock","src":"996:3:1","statements":[]},"src":"992:163:1"},{"nodeType":"YulAssignment","src":"1164:16:1","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1174:6:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1164:6:1"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"75:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"86:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"98:6:1","type":""}],"src":"14:1172:1"},{"body":{"nodeType":"YulBlock","src":"1292:76:1","statements":[{"nodeType":"YulAssignment","src":"1302:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1314:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1325:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1310:3:1"},"nodeType":"YulFunctionCall","src":"1310:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1302:4:1"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1344:9:1"},{"name":"value0","nodeType":"YulIdentifier","src":"1355:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1337:6:1"},"nodeType":"YulFunctionCall","src":"1337:25:1"},"nodeType":"YulExpressionStatement","src":"1337:25:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1261:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1272:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1283:4:1","type":""}],"src":"1191:177:1"},{"body":{"nodeType":"YulBlock","src":"1405:95:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1422:1:1","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1429:3:1","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1434:10:1","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1425:3:1"},"nodeType":"YulFunctionCall","src":"1425:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1415:6:1"},"nodeType":"YulFunctionCall","src":"1415:31:1"},"nodeType":"YulExpressionStatement","src":"1415:31:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1462:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1465:4:1","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1455:6:1"},"nodeType":"YulFunctionCall","src":"1455:15:1"},"nodeType":"YulExpressionStatement","src":"1455:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1486:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1489:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1479:6:1"},"nodeType":"YulFunctionCall","src":"1479:15:1"},"nodeType":"YulExpressionStatement","src":"1479:15:1"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1373:127:1"}]},"contents":"{ +{"contracts":{"a.sol":{"A":{"evm":{"bytecode":{"generatedSources":[],"object":""},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1501:1","statements":[{"nodeType":"YulBlock","src":"6:3:1","statements":[]},{"body":{"nodeType":"YulBlock","src":"109:1076:1","statements":[{"nodeType":"YulVariableDeclaration","src":"119:12:1","value":{"kind":"number","nodeType":"YulLiteral","src":"129:2:1","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"123:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"176:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"185:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"193:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"178:6:1"},"nodeType":"YulFunctionCall","src":"178:22:1"},"nodeType":"YulExpressionStatement","src":"178:22:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"151:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"160:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"147:3:1"},"nodeType":"YulFunctionCall","src":"147:23:1"},{"name":"_1","nodeType":"YulIdentifier","src":"172:2:1"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"143:3:1"},"nodeType":"YulFunctionCall","src":"143:32:1"},"nodeType":"YulIf","src":"140:2:1"},{"nodeType":"YulVariableDeclaration","src":"211:37:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"238:9:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"225:12:1"},"nodeType":"YulFunctionCall","src":"225:23:1"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"215:6:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"257:28:1","value":{"kind":"number","nodeType":"YulLiteral","src":"267:18:1","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"261:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"312:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"321:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"329:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:1"},"nodeType":"YulFunctionCall","src":"314:22:1"},"nodeType":"YulExpressionStatement","src":"314:22:1"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:1"},{"name":"_2","nodeType":"YulIdentifier","src":"308:2:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"297:2:1"},"nodeType":"YulFunctionCall","src":"297:14:1"},"nodeType":"YulIf","src":"294:2:1"},{"nodeType":"YulVariableDeclaration","src":"347:32:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"361:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"372:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"357:3:1"},"nodeType":"YulFunctionCall","src":"357:22:1"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"351:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"427:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"436:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"444:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"429:6:1"},"nodeType":"YulFunctionCall","src":"429:22:1"},"nodeType":"YulExpressionStatement","src":"429:22:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"406:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"410:4:1","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"402:3:1"},"nodeType":"YulFunctionCall","src":"402:13:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"417:7:1"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"398:3:1"},"nodeType":"YulFunctionCall","src":"398:27:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:1"},"nodeType":"YulFunctionCall","src":"391:35:1"},"nodeType":"YulIf","src":"388:2:1"},{"nodeType":"YulVariableDeclaration","src":"462:26:1","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"485:2:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"472:12:1"},"nodeType":"YulFunctionCall","src":"472:16:1"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"466:2:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"511:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"513:16:1"},"nodeType":"YulFunctionCall","src":"513:18:1"},"nodeType":"YulExpressionStatement","src":"513:18:1"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"503:2:1"},{"name":"_2","nodeType":"YulIdentifier","src":"507:2:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"500:2:1"},"nodeType":"YulFunctionCall","src":"500:10:1"},"nodeType":"YulIf","src":"497:2:1"},{"nodeType":"YulVariableDeclaration","src":"542:20:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"556:1:1","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"559:2:1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"552:3:1"},"nodeType":"YulFunctionCall","src":"552:10:1"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"546:2:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"571:23:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"591:2:1","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"585:5:1"},"nodeType":"YulFunctionCall","src":"585:9:1"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"575:6:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"603:56:1","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"625:6:1"},{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"641:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"645:2:1","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"637:3:1"},"nodeType":"YulFunctionCall","src":"637:11:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"654:2:1","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"650:3:1"},"nodeType":"YulFunctionCall","src":"650:7:1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"633:3:1"},"nodeType":"YulFunctionCall","src":"633:25:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"621:3:1"},"nodeType":"YulFunctionCall","src":"621:38:1"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"607:10:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"718:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"720:16:1"},"nodeType":"YulFunctionCall","src":"720:18:1"},"nodeType":"YulExpressionStatement","src":"720:18:1"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"677:10:1"},{"name":"_2","nodeType":"YulIdentifier","src":"689:2:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"674:2:1"},"nodeType":"YulFunctionCall","src":"674:18:1"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"697:10:1"},{"name":"memPtr","nodeType":"YulIdentifier","src":"709:6:1"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"694:2:1"},"nodeType":"YulFunctionCall","src":"694:22:1"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"671:2:1"},"nodeType":"YulFunctionCall","src":"671:46:1"},"nodeType":"YulIf","src":"668:2:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"756:2:1","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"760:10:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"749:6:1"},"nodeType":"YulFunctionCall","src":"749:22:1"},"nodeType":"YulExpressionStatement","src":"749:22:1"},{"nodeType":"YulVariableDeclaration","src":"780:17:1","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"791:6:1"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"784:3:1","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"813:6:1"},{"name":"_4","nodeType":"YulIdentifier","src":"821:2:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"806:6:1"},"nodeType":"YulFunctionCall","src":"806:18:1"},"nodeType":"YulExpressionStatement","src":"806:18:1"},{"nodeType":"YulAssignment","src":"833:22:1","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"844:6:1"},{"name":"_1","nodeType":"YulIdentifier","src":"852:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"840:3:1"},"nodeType":"YulFunctionCall","src":"840:15:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"833:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"864:22:1","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"879:2:1"},{"name":"_1","nodeType":"YulIdentifier","src":"883:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"875:3:1"},"nodeType":"YulFunctionCall","src":"875:11:1"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"868:3:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"932:26:1","statements":[{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"941:6:1"},{"name":"value0","nodeType":"YulIdentifier","src":"949:6:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"934:6:1"},"nodeType":"YulFunctionCall","src":"934:22:1"},"nodeType":"YulExpressionStatement","src":"934:22:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"909:2:1"},{"name":"_5","nodeType":"YulIdentifier","src":"913:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"905:3:1"},"nodeType":"YulFunctionCall","src":"905:11:1"},{"name":"_1","nodeType":"YulIdentifier","src":"918:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"901:3:1"},"nodeType":"YulFunctionCall","src":"901:20:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"923:7:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"898:2:1"},"nodeType":"YulFunctionCall","src":"898:33:1"},"nodeType":"YulIf","src":"895:2:1"},{"nodeType":"YulVariableDeclaration","src":"967:15:1","value":{"name":"value0","nodeType":"YulIdentifier","src":"976:6:1"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"971:1:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"1036:118:1","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1057:3:1"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1075:3:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1062:12:1"},"nodeType":"YulFunctionCall","src":"1062:17:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1050:6:1"},"nodeType":"YulFunctionCall","src":"1050:30:1"},"nodeType":"YulExpressionStatement","src":"1050:30:1"},{"nodeType":"YulAssignment","src":"1093:19:1","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1104:3:1"},{"name":"_1","nodeType":"YulIdentifier","src":"1109:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1100:3:1"},"nodeType":"YulFunctionCall","src":"1100:12:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1093:3:1"}]},{"nodeType":"YulAssignment","src":"1125:19:1","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1136:3:1"},{"name":"_1","nodeType":"YulIdentifier","src":"1141:2:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1132:3:1"},"nodeType":"YulFunctionCall","src":"1132:12:1"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"1125:3:1"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1002:1:1"},{"name":"_4","nodeType":"YulIdentifier","src":"1005:2:1"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"999:2:1"},"nodeType":"YulFunctionCall","src":"999:9:1"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1009:18:1","statements":[{"nodeType":"YulAssignment","src":"1011:14:1","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1020:1:1"},{"kind":"number","nodeType":"YulLiteral","src":"1023:1:1","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1016:3:1"},"nodeType":"YulFunctionCall","src":"1016:9:1"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1011:1:1"}]}]},"pre":{"nodeType":"YulBlock","src":"995:3:1","statements":[]},"src":"991:163:1"},{"nodeType":"YulAssignment","src":"1163:16:1","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1173:6:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1163:6:1"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"75:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"86:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"98:6:1","type":""}],"src":"14:1171:1"},{"body":{"nodeType":"YulBlock","src":"1291:76:1","statements":[{"nodeType":"YulAssignment","src":"1301:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1313:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1324:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1309:3:1"},"nodeType":"YulFunctionCall","src":"1309:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1301:4:1"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1343:9:1"},{"name":"value0","nodeType":"YulIdentifier","src":"1354:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1336:6:1"},"nodeType":"YulFunctionCall","src":"1336:25:1"},"nodeType":"YulExpressionStatement","src":"1336:25:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1260:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1271:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1282:4:1","type":""}],"src":"1190:177:1"},{"body":{"nodeType":"YulBlock","src":"1404:95:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1421:1:1","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1428:3:1","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1433:10:1","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1424:3:1"},"nodeType":"YulFunctionCall","src":"1424:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1414:6:1"},"nodeType":"YulFunctionCall","src":"1414:31:1"},"nodeType":"YulExpressionStatement","src":"1414:31:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1461:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1464:4:1","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1454:6:1"},"nodeType":"YulFunctionCall","src":"1454:15:1"},"nodeType":"YulExpressionStatement","src":"1454:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1485:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1488:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1478:6:1"},"nodeType":"YulFunctionCall","src":"1478:15:1"},"nodeType":"YulExpressionStatement","src":"1478:15:1"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1372:127:1"}]},"contents":"{ { } function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0 { @@ -11,7 +11,7 @@ if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(value0, value0) } let _4 := calldataload(_3) if gt(_4, _2) { panic_error_0x41() } - let _5 := mul(_4, _1) + let _5 := shl(5, _4) let memPtr := mload(64) let newFreePtr := add(memPtr, and(add(_5, 63), not(31))) if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() } diff --git a/test/formal/replace_mul_by_shift.py b/test/formal/replace_mul_by_shift.py new file mode 100644 index 000000000..5a2c2dc14 --- /dev/null +++ b/test/formal/replace_mul_by_shift.py @@ -0,0 +1,37 @@ +from rule import Rule +from opcodes import * + +""" +Rule: +MUL(X, A) -> SHL(k, X) +MUL(A, X) -> SHL(k, X) +DIV(X, A) -> SHR(k, X) +Requirements: +A == 1 << K +""" + +rule = Rule() + +n_bits = 32 + +# Input vars +X = BitVec('X', n_bits) +A = BitVec('A', n_bits) +K = BitVec('K', n_bits) + +# Requirements +rule.require(A == SHL(K, 1)) + +# Non optimized result +nonopt_1 = MUL(X, A) +nonopt_2 = MUL(A, X) +nonopt_3 = DIV(X, A) + +# Optimized result +opt_1 = SHL(K, X) +opt_2 = SHL(K, X) +opt_3 = SHR(K, X) + +rule.check(nonopt_1, opt_1) +rule.check(nonopt_2, opt_2) +rule.check(nonopt_3, opt_3) diff --git a/test/libsolidity/gasTests/abiv2_optimised.sol b/test/libsolidity/gasTests/abiv2_optimised.sol index 33e2bfb09..382a4d135 100644 --- a/test/libsolidity/gasTests/abiv2_optimised.sol +++ b/test/libsolidity/gasTests/abiv2_optimised.sol @@ -17,9 +17,9 @@ contract C { // optimize-yul: true // ---- // creation: -// codeDepositCost: 572600 +// codeDepositCost: 571400 // executionCost: 606 -// totalCost: 573206 +// totalCost: 572006 // external: // a(): 985 // b(uint256): 2052 diff --git a/test/libsolidity/semanticTests/abiEncoderV1/abi_decode_v2_storage.sol b/test/libsolidity/semanticTests/abiEncoderV1/abi_decode_v2_storage.sol index 89fb4f2d4..18cd81806 100644 --- a/test/libsolidity/semanticTests/abiEncoderV1/abi_decode_v2_storage.sol +++ b/test/libsolidity/semanticTests/abiEncoderV1/abi_decode_v2_storage.sol @@ -24,6 +24,6 @@ contract C { // compileViaYul: also // ---- // f() -> 0x20, 0x8, 0x40, 0x3, 0x9, 0xa, 0xb -// gas irOptimized: 194189 +// gas irOptimized: 194174 // gas legacy: 196426 -// gas legacyOptimized: 193424 +// gas legacyOptimized: 193425 diff --git a/test/libsolidity/semanticTests/abiEncoderV1/abi_encode_calldata_slice.sol b/test/libsolidity/semanticTests/abiEncoderV1/abi_encode_calldata_slice.sol index 7af329fec..a76565773 100644 --- a/test/libsolidity/semanticTests/abiEncoderV1/abi_encode_calldata_slice.sol +++ b/test/libsolidity/semanticTests/abiEncoderV1/abi_encode_calldata_slice.sol @@ -64,6 +64,6 @@ contract C { // gas legacy: 466763 // gas legacyOptimized: 374537 // test_uint256() -> -// gas irOptimized: 712790 +// gas irOptimized: 712564 // gas legacy: 634592 -// gas legacyOptimized: 499481 +// gas legacyOptimized: 499373 diff --git a/test/libsolidity/semanticTests/abiEncoderV1/struct/struct_storage_ptr.sol b/test/libsolidity/semanticTests/abiEncoderV1/struct/struct_storage_ptr.sol index 116501486..8e3ae7694 100644 --- a/test/libsolidity/semanticTests/abiEncoderV1/struct/struct_storage_ptr.sol +++ b/test/libsolidity/semanticTests/abiEncoderV1/struct/struct_storage_ptr.sol @@ -26,6 +26,6 @@ contract C { // ---- // library: L // f() -> 8, 7, 1, 2, 7, 12 -// gas irOptimized: 172153 +// gas irOptimized: 172123 // gas legacy: 164775 // gas legacyOptimized: 162697 diff --git a/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_calldata_slice.sol b/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_calldata_slice.sol index 139dc6419..a47013cd9 100644 --- a/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_calldata_slice.sol +++ b/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_calldata_slice.sol @@ -65,6 +65,6 @@ contract C { // gas legacy: 466763 // gas legacyOptimized: 374537 // test_uint256() -> -// gas irOptimized: 712790 +// gas irOptimized: 712564 // gas legacy: 634592 -// gas legacyOptimized: 499481 +// gas legacyOptimized: 499373 diff --git a/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_v2_in_function_inherited_in_v1_contract.sol b/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_v2_in_function_inherited_in_v1_contract.sol index e94601c57..9fcbdcf3c 100644 --- a/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_v2_in_function_inherited_in_v1_contract.sol +++ b/test/libsolidity/semanticTests/abiEncoderV2/abi_encode_v2_in_function_inherited_in_v1_contract.sol @@ -30,6 +30,6 @@ contract C is B { // compileViaYul: also // ---- // test() -> 77 -// gas irOptimized: 139834 +// gas irOptimized: 139828 // gas legacy: 156573 // gas legacyOptimized: 112983 diff --git a/test/libsolidity/semanticTests/abiEncoderV2/calldata_array.sol b/test/libsolidity/semanticTests/abiEncoderV2/calldata_array.sol index 8bd584d6c..c4cb3cda2 100644 --- a/test/libsolidity/semanticTests/abiEncoderV2/calldata_array.sol +++ b/test/libsolidity/semanticTests/abiEncoderV2/calldata_array.sol @@ -21,6 +21,6 @@ contract C { // f(uint256[][1]): 32, 32, 0 -> true // f(uint256[][1]): 32, 32, 1, 42 -> true // f(uint256[][1]): 32, 32, 8, 421, 422, 423, 424, 425, 426, 427, 428 -> true -// gas irOptimized: 227663 +// gas irOptimized: 227647 // gas legacy: 144300 -// gas legacyOptimized: 124199 +// gas legacyOptimized: 124189 diff --git a/test/libsolidity/semanticTests/abiEncoderV2/storage_array_encoding.sol b/test/libsolidity/semanticTests/abiEncoderV2/storage_array_encoding.sol index 878e6831e..630babe12 100644 --- a/test/libsolidity/semanticTests/abiEncoderV2/storage_array_encoding.sol +++ b/test/libsolidity/semanticTests/abiEncoderV2/storage_array_encoding.sol @@ -19,9 +19,9 @@ contract C { // compileViaYul: also // ---- // h(uint256[2][]): 0x20, 3, 123, 124, 223, 224, 323, 324 -> 32, 256, 0x20, 3, 123, 124, 223, 224, 323, 324 -// gas irOptimized: 172714 +// gas irOptimized: 172712 // gas legacy: 175929 -// gas legacyOptimized: 172506 +// gas legacyOptimized: 172504 // i(uint256[2][2]): 123, 124, 223, 224 -> 32, 128, 123, 124, 223, 224 // gas irOptimized: 107681 // gas legacy: 109868 diff --git a/test/libsolidity/semanticTests/abiencodedecode/abi_decode_simple_storage.sol b/test/libsolidity/semanticTests/abiencodedecode/abi_decode_simple_storage.sol index e416ab753..956da75e9 100644 --- a/test/libsolidity/semanticTests/abiencodedecode/abi_decode_simple_storage.sol +++ b/test/libsolidity/semanticTests/abiencodedecode/abi_decode_simple_storage.sol @@ -11,6 +11,6 @@ contract C { // compileViaYul: also // ---- // f(bytes): 0x20, 0x80, 0x21, 0x40, 0x7, "abcdefg" -> 0x21, 0x40, 0x7, "abcdefg" -// gas irOptimized: 130305 +// gas irOptimized: 130299 // gas legacy: 131690 -// gas legacyOptimized: 130574 +// gas legacyOptimized: 130577 diff --git a/test/libsolidity/semanticTests/array/arrays_complex_from_and_to_storage.sol b/test/libsolidity/semanticTests/array/arrays_complex_from_and_to_storage.sol index c88fa43e2..cbd79bfd2 100644 --- a/test/libsolidity/semanticTests/array/arrays_complex_from_and_to_storage.sol +++ b/test/libsolidity/semanticTests/array/arrays_complex_from_and_to_storage.sol @@ -14,9 +14,9 @@ contract Test { // compileViaYul: also // ---- // set(uint24[3][]): 0x20, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12 -> 0x06 -// gas irOptimized: 200205 +// gas irOptimized: 200167 // gas legacy: 278685 -// gas legacyOptimized: 273734 +// gas legacyOptimized: 273732 // data(uint256,uint256): 0x02, 0x02 -> 0x09 // data(uint256,uint256): 0x05, 0x01 -> 0x11 // data(uint256,uint256): 0x06, 0x00 -> FAILURE diff --git a/test/libsolidity/semanticTests/array/byte_array_storage_layout.sol b/test/libsolidity/semanticTests/array/byte_array_storage_layout.sol index c14e4479a..168a81734 100644 --- a/test/libsolidity/semanticTests/array/byte_array_storage_layout.sol +++ b/test/libsolidity/semanticTests/array/byte_array_storage_layout.sol @@ -44,14 +44,14 @@ contract c { // storage: empty // test_short() -> 1780731860627700044960722568376587075150542249149356309979516913770823710 // gas legacy: 110938 -// gas legacyOptimized: 109691 +// gas legacyOptimized: 109706 // storage: nonempty // test_long() -> 67 -// gas irOptimized: 134832 +// gas irOptimized: 134698 // gas legacy: 213590 -// gas legacyOptimized: 211011 +// gas legacyOptimized: 211044 // storage: nonempty // test_pop() -> 1780731860627700044960722568376592200742329637303199754547598369979433020 // gas legacy: 176030 -// gas legacyOptimized: 173470 +// gas legacyOptimized: 173504 // storage: nonempty diff --git a/test/libsolidity/semanticTests/array/byte_array_transitional_2.sol b/test/libsolidity/semanticTests/array/byte_array_transitional_2.sol index e568b796f..b9e7d6b8c 100644 --- a/test/libsolidity/semanticTests/array/byte_array_transitional_2.sol +++ b/test/libsolidity/semanticTests/array/byte_array_transitional_2.sol @@ -19,6 +19,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0 -// gas irOptimized: 312920 +// gas irOptimized: 312322 // gas legacy: 483915 -// gas legacyOptimized: 478508 +// gas legacyOptimized: 478673 diff --git a/test/libsolidity/semanticTests/array/bytes_length_member.sol b/test/libsolidity/semanticTests/array/bytes_length_member.sol index 9fa5c6507..91811da97 100644 --- a/test/libsolidity/semanticTests/array/bytes_length_member.sol +++ b/test/libsolidity/semanticTests/array/bytes_length_member.sol @@ -15,7 +15,7 @@ contract c { // ---- // getLength() -> 0 // set(): 1, 2 -> true -// gas irOptimized: 103213 +// gas irOptimized: 103207 // gas legacy: 103126 -// gas legacyOptimized: 102966 +// gas legacyOptimized: 102967 // getLength() -> 68 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_calldata_storage.sol b/test/libsolidity/semanticTests/array/copying/array_copy_calldata_storage.sol index 60c021672..f713f9e00 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_calldata_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_calldata_storage.sol @@ -22,7 +22,7 @@ contract c { // compileViaYul: also // ---- // store(uint256[9],uint8[3][]): 21, 22, 23, 24, 25, 26, 27, 28, 29, 0x140, 4, 1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33 -> 32 -// gas irOptimized: 629040 +// gas irOptimized: 628978 // gas legacy: 817315 // gas legacyOptimized: 816813 // retrieve() -> 9, 28, 9, 28, 4, 3, 32 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint128.sol b/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint128.sol index b27bcdf6d..7b9afb54b 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint128.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint128.sol @@ -23,6 +23,6 @@ contract C { // compileViaYul: also // ---- // f() -> true -// gas irOptimized: 112029 +// gas irOptimized: 111965 // gas legacy: 107335 // gas legacyOptimized: 105857 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint40.sol b/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint40.sol index c296d9cfa..03c12c72f 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint40.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_cleanup_uint40.sol @@ -48,6 +48,6 @@ contract C { // compileViaYul: also // ---- // f() -> true -// gas irOptimized: 253583 +// gas irOptimized: 253493 // gas legacy: 239061 // gas legacyOptimized: 235988 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage.sol b/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage.sol index 1079873f3..f6e21cc29 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage.sol @@ -15,6 +15,6 @@ contract C { // compileViaYul: also // ---- // f() -> 0 -// gas irOptimized: 150551 +// gas irOptimized: 150525 // gas legacy: 138913 // gas legacyOptimized: 137448 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage_packed.sol b/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage_packed.sol index de203891d..64cdc728b 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage_packed.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_clear_storage_packed.sol @@ -42,11 +42,11 @@ contract C { // compileViaYul: also // ---- // f() -> 0 -// gas irOptimized: 112032 +// gas irOptimized: 111968 // gas legacy: 107306 // gas legacyOptimized: 105861 // g() -> 0 // h() -> 0 -// gas irOptimized: 112057 +// gas irOptimized: 112011 // gas legacy: 107328 // gas legacyOptimized: 105903 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_different_packing.sol b/test/libsolidity/semanticTests/array/copying/array_copy_different_packing.sol index b157b0823..925b3b1a0 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_different_packing.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_different_packing.sol @@ -21,6 +21,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0x01000000000000000000000000000000000000000000000000, 0x02000000000000000000000000000000000000000000000000, 0x03000000000000000000000000000000000000000000000000, 0x04000000000000000000000000000000000000000000000000, 0x05000000000000000000000000000000000000000000000000 -// gas irOptimized: 247582 +// gas irOptimized: 247460 // gas legacy: 276683 // gas legacyOptimized: 275534 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_including_array.sol b/test/libsolidity/semanticTests/array/copying/array_copy_including_array.sol index 181104a09..5978a6adc 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_including_array.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_including_array.sol @@ -37,12 +37,12 @@ contract c { // compileViaYul: also // ---- // test() -> 0x02000202 -// gas irOptimized: 2481131 +// gas irOptimized: 2481119 // gas legacy: 2288641 // gas legacyOptimized: 2258654 // storage: empty // clear() -> 0, 0 -// gas irOptimized: 1856788 +// gas irOptimized: 1856784 // gas legacy: 1727169 // gas legacyOptimized: 1698931 // storage: empty diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_nested_array.sol b/test/libsolidity/semanticTests/array/copying/array_copy_nested_array.sol index b25fa2663..f5f48f710 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_nested_array.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_nested_array.sol @@ -15,6 +15,6 @@ contract c { // compileViaYul: also // ---- // test(uint256[2][]): 32, 3, 7, 8, 9, 10, 11, 12 -> 10 -// gas irOptimized: 611500 +// gas irOptimized: 611490 // gas legacy: 604268 -// gas legacyOptimized: 603690 +// gas legacyOptimized: 603688 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base.sol b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base.sol index 26de595a9..6427c5b9e 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base.sol @@ -19,6 +19,6 @@ contract c { // compileViaYul: also // ---- // test() -> 5, 4 -// gas irOptimized: 235646 +// gas irOptimized: 235594 // gas legacy: 237001 // gas legacyOptimized: 235316 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base_nested.sol b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base_nested.sol index 1eddf943e..5b9c1a6ff 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base_nested.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_different_base_nested.sol @@ -23,6 +23,6 @@ contract c { // compileViaYul: also // ---- // test() -> 3, 4 -// gas irOptimized: 195485 +// gas irOptimized: 195483 // gas legacy: 208853 // gas legacyOptimized: 200341 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_dynamic_dynamic.sol b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_dynamic_dynamic.sol index 26ee19f44..e645eedee 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_dynamic_dynamic.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_dynamic_dynamic.sol @@ -20,6 +20,6 @@ contract c { // compileViaYul: also // ---- // test() -> 5, 4 -// gas irOptimized: 276032 +// gas irOptimized: 276018 // gas legacy: 264734 // gas legacyOptimized: 263160 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_dynamic.sol b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_dynamic.sol index ce95fad9e..e9d877640 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_dynamic.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_dynamic.sol @@ -14,4 +14,4 @@ contract c { // compileViaYul: also // ---- // test() -> 9, 4 -// gas irOptimized: 100285 +// gas irOptimized: 100283 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_static.sol b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_static.sol index 4c04ce509..7761f10bd 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_static.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_static_static.sol @@ -18,6 +18,6 @@ contract c { // compileViaYul: also // ---- // test() -> 8, 0 -// gas irOptimized: 158935 +// gas irOptimized: 158923 // gas legacy: 153995 // gas legacyOptimized: 153403 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_struct.sol b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_struct.sol index 1d698d7d4..399732940 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_struct.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_storage_storage_struct.sol @@ -19,7 +19,7 @@ contract c { // compileViaYul: also // ---- // test() -> 4, 5 -// gas irOptimized: 282888 +// gas irOptimized: 282808 // gas legacy: 255936 // gas legacyOptimized: 254359 // storage: empty diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_storage_to_memory_nested.sol b/test/libsolidity/semanticTests/array/copying/array_copy_storage_to_memory_nested.sol index 0948ea08d..be8c70a23 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_storage_to_memory_nested.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_storage_to_memory_nested.sol @@ -17,6 +17,6 @@ contract C { // compileViaYul: also // ---- // f() -> 0x20, 2, 0x40, 0xa0, 2, 0, 1, 2, 2, 3 -// gas irOptimized: 170704 +// gas irOptimized: 170692 // gas legacy: 163978 -// gas legacyOptimized: 158152 +// gas legacyOptimized: 158150 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover.sol b/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover.sol index 5ac23d731..97ed1ef39 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover.sol @@ -19,6 +19,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0xffffffff, 0x0000000000000000000000000a00090008000700060005000400030002000100, 0x0000000000000000000000000000000000000000000000000000000000000000 -// gas irOptimized: 223456 +// gas irOptimized: 222905 // gas legacy: 328106 // gas legacyOptimized: 308072 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover2.sol b/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover2.sol index e3be4ed5d..9818f77dc 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover2.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_target_leftover2.sol @@ -21,6 +21,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0x04000000000000000000000000000000000000000000000000, 0x0, 0x0 -// gas irOptimized: 109240 +// gas irOptimized: 109180 // gas legacy: 116651 // gas legacyOptimized: 107000 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_target_simple.sol b/test/libsolidity/semanticTests/array/copying/array_copy_target_simple.sol index 1815870f3..4c6bd2b68 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_target_simple.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_target_simple.sol @@ -21,6 +21,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0x01000000000000000000000000000000000000000000000000, 0x02000000000000000000000000000000000000000000000000, 0x03000000000000000000000000000000000000000000000000, 0x04000000000000000000000000000000000000000000000000, 0x0 -// gas irOptimized: 290262 +// gas irOptimized: 290176 // gas legacy: 309353 // gas legacyOptimized: 307699 diff --git a/test/libsolidity/semanticTests/array/copying/array_copy_target_simple_2.sol b/test/libsolidity/semanticTests/array/copying/array_copy_target_simple_2.sol index 16dc5bbd6..a5ba42049 100644 --- a/test/libsolidity/semanticTests/array/copying/array_copy_target_simple_2.sol +++ b/test/libsolidity/semanticTests/array/copying/array_copy_target_simple_2.sol @@ -21,6 +21,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0x01000000000000000000000000000000000000000000000000, 0x02000000000000000000000000000000000000000000000000, 0x03000000000000000000000000000000000000000000000000, 0x04000000000000000000000000000000000000000000000000, 0x00 -// gas irOptimized: 269636 +// gas irOptimized: 269679 // gas legacy: 269681 // gas legacyOptimized: 268753 diff --git a/test/libsolidity/semanticTests/array/copying/array_nested_calldata_to_storage.sol b/test/libsolidity/semanticTests/array/copying/array_nested_calldata_to_storage.sol index 7363793be..453c075bf 100644 --- a/test/libsolidity/semanticTests/array/copying/array_nested_calldata_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_nested_calldata_to_storage.sol @@ -38,10 +38,10 @@ contract c { // compileViaYul: true // ---- // test1(uint256[][]): 0x20, 2, 0x40, 0x40, 2, 23, 42 -> 2, 65 -// gas irOptimized: 179776 +// gas irOptimized: 179750 // test2(uint256[][2]): 0x20, 0x40, 0x40, 2, 23, 42 -> 2, 65 -// gas irOptimized: 155253 +// gas irOptimized: 155229 // test3(uint256[2][]): 0x20, 2, 23, 42, 23, 42 -> 2, 65 -// gas irOptimized: 133521 +// gas irOptimized: 133495 // test4(uint256[2][2]): 23, 42, 23, 42 -> 65 -// gas irOptimized: 107882 +// gas irOptimized: 107858 diff --git a/test/libsolidity/semanticTests/array/copying/array_nested_memory_to_storage.sol b/test/libsolidity/semanticTests/array/copying/array_nested_memory_to_storage.sol index 104bc0050..7b5d03540 100644 --- a/test/libsolidity/semanticTests/array/copying/array_nested_memory_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_nested_memory_to_storage.sol @@ -40,12 +40,12 @@ contract Test { // compileViaYul: also // ---- // test() -> 24 -// gas irOptimized: 217774 +// gas irOptimized: 217724 // gas legacy: 215533 // gas legacyOptimized: 214947 // test1() -> 3 // test2() -> 6 // test3() -> 24 -// gas irOptimized: 124684 +// gas irOptimized: 124650 // gas legacy: 122795 // gas legacyOptimized: 121883 diff --git a/test/libsolidity/semanticTests/array/copying/array_of_struct_calldata_to_storage.sol b/test/libsolidity/semanticTests/array/copying/array_of_struct_calldata_to_storage.sol index 777013bbf..0f77fd960 100644 --- a/test/libsolidity/semanticTests/array/copying/array_of_struct_calldata_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_of_struct_calldata_to_storage.sol @@ -17,4 +17,4 @@ contract C { // compileViaYul: true // ---- // f((uint128,uint64,uint128)[]): 0x20, 3, 0, 0, 12, 0, 11, 0, 10, 0, 0 -> 10, 11, 12 -// gas irOptimized: 123327 +// gas irOptimized: 123321 diff --git a/test/libsolidity/semanticTests/array/copying/array_of_struct_memory_to_storage.sol b/test/libsolidity/semanticTests/array/copying/array_of_struct_memory_to_storage.sol index 42bbe7f95..9e7fc1041 100644 --- a/test/libsolidity/semanticTests/array/copying/array_of_struct_memory_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_of_struct_memory_to_storage.sol @@ -19,4 +19,4 @@ contract C { // compileViaYul: true // ---- // f() -> 10, 11, 12 -// gas irOptimized: 122695 +// gas irOptimized: 122679 diff --git a/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_calldata_to_storage.sol b/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_calldata_to_storage.sol index c6434502e..16eea0b55 100644 --- a/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_calldata_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_calldata_to_storage.sol @@ -23,4 +23,4 @@ contract C { // compileViaYul: true // ---- // f((uint256[])[]): 0x20, 3, 0x60, 0x60, 0x60, 0x20, 3, 1, 2, 3 -> 3, 1 -// gas irOptimized: 354585 +// gas irOptimized: 354491 diff --git a/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_memory_to_storage.sol b/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_memory_to_storage.sol index 3874d3a59..f908e8b42 100644 --- a/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_memory_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/array_of_structs_containing_arrays_memory_to_storage.sol @@ -26,4 +26,4 @@ contract C { // compileViaYul: true // ---- // f() -> 3, 3, 3, 1 -// gas irOptimized: 189829 +// gas irOptimized: 189735 diff --git a/test/libsolidity/semanticTests/array/copying/array_storage_multi_items_per_slot.sol b/test/libsolidity/semanticTests/array/copying/array_storage_multi_items_per_slot.sol index 26cd4cb15..31f54f591 100644 --- a/test/libsolidity/semanticTests/array/copying/array_storage_multi_items_per_slot.sol +++ b/test/libsolidity/semanticTests/array/copying/array_storage_multi_items_per_slot.sol @@ -15,6 +15,6 @@ contract C { // compileViaYul: also // ---- // f() -> 1, 2, 3 -// gas irOptimized: 135092 +// gas irOptimized: 135042 // gas legacy: 134419 // gas legacyOptimized: 125440 diff --git a/test/libsolidity/semanticTests/array/copying/arrays_from_and_to_storage.sol b/test/libsolidity/semanticTests/array/copying/arrays_from_and_to_storage.sol index 30b2fed23..b0b4b00df 100644 --- a/test/libsolidity/semanticTests/array/copying/arrays_from_and_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/arrays_from_and_to_storage.sol @@ -12,9 +12,9 @@ contract Test { // compileViaYul: also // ---- // set(uint24[]): 0x20, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 -> 18 -// gas irOptimized: 121147 +// gas irOptimized: 121109 // gas legacy: 125815 -// gas legacyOptimized: 123617 +// gas legacyOptimized: 123615 // data(uint256): 7 -> 8 // data(uint256): 15 -> 16 // data(uint256): 18 -> FAILURE diff --git a/test/libsolidity/semanticTests/array/copying/bytes_inside_mappings.sol b/test/libsolidity/semanticTests/array/copying/bytes_inside_mappings.sol index c8ab2717f..25d541f71 100644 --- a/test/libsolidity/semanticTests/array/copying/bytes_inside_mappings.sol +++ b/test/libsolidity/semanticTests/array/copying/bytes_inside_mappings.sol @@ -7,13 +7,13 @@ contract c { // compileViaYul: also // ---- // set(uint256): 1, 2 -> true -// gas irOptimized: 103365 +// gas irOptimized: 103359 // gas legacy: 103491 -// gas legacyOptimized: 103135 +// gas legacyOptimized: 103136 // set(uint256): 2, 2, 3, 4, 5 -> true -// gas irOptimized: 164052 +// gas irOptimized: 164046 // gas legacy: 164121 -// gas legacyOptimized: 163765 +// gas legacyOptimized: 163766 // storage: nonempty // copy(uint256,uint256): 1, 2 -> true // storage: nonempty diff --git a/test/libsolidity/semanticTests/array/copying/bytes_storage_to_storage.sol b/test/libsolidity/semanticTests/array/copying/bytes_storage_to_storage.sol index b0b4d9221..eec2b723d 100644 --- a/test/libsolidity/semanticTests/array/copying/bytes_storage_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/bytes_storage_to_storage.sol @@ -19,25 +19,25 @@ contract c { // ---- // f(uint256): 0 -> 0x20, 0x00 // f(uint256): 31 -> 0x20, 0x1f, 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e00 -// gas irOptimized: 222684 +// gas irOptimized: 222425 // gas legacy: 255464 -// gas legacyOptimized: 250931 +// gas legacyOptimized: 250998 // f(uint256): 32 -> 0x20, 0x20, 1780731860627700044960722568376592200742329637303199754547598369979440671 -// gas irOptimized: 233443 +// gas irOptimized: 233052 // gas legacy: 267931 -// gas legacyOptimized: 263260 +// gas legacyOptimized: 263329 // f(uint256): 33 -> 0x20, 33, 1780731860627700044960722568376592200742329637303199754547598369979440671, 0x2000000000000000000000000000000000000000000000000000000000000000 -// gas irOptimized: 242278 +// gas irOptimized: 241863 // gas legacy: 277538 -// gas legacyOptimized: 272747 +// gas legacyOptimized: 272818 // f(uint256): 63 -> 0x20, 0x3f, 1780731860627700044960722568376592200742329637303199754547598369979440671, 14532552714582660066924456880521368950258152170031413196862950297402215316992 -// gas irOptimized: 356428 +// gas irOptimized: 355653 // gas legacy: 423428 -// gas legacyOptimized: 414737 +// gas legacyOptimized: 414868 // f(uint256): 12 -> 0x20, 0x0c, 0x0102030405060708090a0b0000000000000000000000000000000000000000 // gas legacy: 106445 -// gas legacyOptimized: 104350 +// gas legacyOptimized: 104379 // f(uint256): 129 -> 0x20, 0x81, 1780731860627700044960722568376592200742329637303199754547598369979440671, 0x202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f, 29063324697304692433803953038474361308315562010425523193971352996434451193439, 0x606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f, -57896044618658097711785492504343953926634992332820282019728792003956564819968 -// gas irOptimized: 817738 +// gas irOptimized: 816179 // gas legacy: 954517 -// gas legacyOptimized: 937258 +// gas legacyOptimized: 937521 diff --git a/test/libsolidity/semanticTests/array/copying/calldata_array_dynamic_to_storage.sol b/test/libsolidity/semanticTests/array/copying/calldata_array_dynamic_to_storage.sol index 46272de63..d3afcdf24 100644 --- a/test/libsolidity/semanticTests/array/copying/calldata_array_dynamic_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/calldata_array_dynamic_to_storage.sol @@ -11,6 +11,6 @@ contract C { // compileViaYul: also // ---- // f(uint256[]): 0x20, 0x03, 0x1, 0x2, 0x3 -> 0x1 -// gas irOptimized: 108100 +// gas irOptimized: 108090 // gas legacy: 105365 -// gas legacyOptimized: 105149 +// gas legacyOptimized: 105147 diff --git a/test/libsolidity/semanticTests/array/copying/copy_byte_array_in_struct_to_storage.sol b/test/libsolidity/semanticTests/array/copying/copy_byte_array_in_struct_to_storage.sol index ca312ff45..e174dd38d 100644 --- a/test/libsolidity/semanticTests/array/copying/copy_byte_array_in_struct_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/copy_byte_array_in_struct_to_storage.sol @@ -37,9 +37,9 @@ contract C { // compileViaYul: also // ---- // f() -> 0x40, 0x80, 6, 0x6162636465660000000000000000000000000000000000000000000000000000, 0x49, 0x3132333435363738393031323334353637383930313233343536373839303120, 0x3132333435363738393031323334353637383930313233343536373839303120, 0x3132333435363738390000000000000000000000000000000000000000000000 -// gas irOptimized: 172892 +// gas irOptimized: 172876 // gas legacy: 174794 -// gas legacyOptimized: 174182 +// gas legacyOptimized: 174188 // g() -> 0x40, 0xc0, 0x49, 0x3132333435363738393031323334353637383930313233343536373839303120, 0x3132333435363738393031323334353637383930313233343536373839303120, 0x3132333435363738390000000000000000000000000000000000000000000000, 0x11, 0x3132333435363738393233343536373839000000000000000000000000000000 // gas legacy: 100595 // h() -> 0x40, 0x60, 0x00, 0x00 diff --git a/test/libsolidity/semanticTests/array/copying/copy_byte_array_to_storage.sol b/test/libsolidity/semanticTests/array/copying/copy_byte_array_to_storage.sol index ff7c1995f..7c98a96d5 100644 --- a/test/libsolidity/semanticTests/array/copying/copy_byte_array_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/copy_byte_array_to_storage.sol @@ -48,6 +48,6 @@ contract C { // compileViaYul: also // ---- // f() -> 0xff -// gas irOptimized: 137428 +// gas irOptimized: 137415 // gas legacy: 137645 -// gas legacyOptimized: 134372 +// gas legacyOptimized: 134377 diff --git a/test/libsolidity/semanticTests/array/copying/copy_function_storage_array.sol b/test/libsolidity/semanticTests/array/copying/copy_function_storage_array.sol index 6be752f81..846df6375 100644 --- a/test/libsolidity/semanticTests/array/copying/copy_function_storage_array.sol +++ b/test/libsolidity/semanticTests/array/copying/copy_function_storage_array.sol @@ -18,6 +18,6 @@ contract C { // compileViaYul: also // ---- // test() -> 7 -// gas irOptimized: 134482 +// gas irOptimized: 134680 // gas legacy: 211296 // gas legacyOptimized: 211087 diff --git a/test/libsolidity/semanticTests/array/copying/copy_removes_bytes_data.sol b/test/libsolidity/semanticTests/array/copying/copy_removes_bytes_data.sol index 17be94e13..61e30731b 100644 --- a/test/libsolidity/semanticTests/array/copying/copy_removes_bytes_data.sol +++ b/test/libsolidity/semanticTests/array/copying/copy_removes_bytes_data.sol @@ -9,9 +9,9 @@ contract c { // compileViaYul: also // ---- // set(): 1, 2, 3, 4, 5 -> true -// gas irOptimized: 163861 +// gas irOptimized: 163855 // gas legacy: 163756 -// gas legacyOptimized: 163595 +// gas legacyOptimized: 163596 // storage: nonempty // reset() -> true // storage: empty diff --git a/test/libsolidity/semanticTests/array/copying/memory_dyn_2d_bytes_to_storage.sol b/test/libsolidity/semanticTests/array/copying/memory_dyn_2d_bytes_to_storage.sol index 74818674c..03c2c813f 100644 --- a/test/libsolidity/semanticTests/array/copying/memory_dyn_2d_bytes_to_storage.sol +++ b/test/libsolidity/semanticTests/array/copying/memory_dyn_2d_bytes_to_storage.sol @@ -20,6 +20,6 @@ contract C { // compileViaYul: also // ---- // f() -> 3 -// gas irOptimized: 175292 +// gas irOptimized: 175175 // gas legacy: 179707 -// gas legacyOptimized: 178734 +// gas legacyOptimized: 178763 diff --git a/test/libsolidity/semanticTests/array/copying/storage_memory_nested.sol b/test/libsolidity/semanticTests/array/copying/storage_memory_nested.sol index fc37494c9..68e68e85a 100644 --- a/test/libsolidity/semanticTests/array/copying/storage_memory_nested.sol +++ b/test/libsolidity/semanticTests/array/copying/storage_memory_nested.sol @@ -19,6 +19,6 @@ contract C { // compileViaYul: also // ---- // f() -> 1, 2, 3, 4, 5, 6, 7 -// gas irOptimized: 218149 +// gas irOptimized: 218088 // gas legacy: 223725 // gas legacyOptimized: 222886 diff --git a/test/libsolidity/semanticTests/array/copying/storage_memory_nested_bytes.sol b/test/libsolidity/semanticTests/array/copying/storage_memory_nested_bytes.sol index 9ba9efc36..778d172c6 100644 --- a/test/libsolidity/semanticTests/array/copying/storage_memory_nested_bytes.sol +++ b/test/libsolidity/semanticTests/array/copying/storage_memory_nested_bytes.sol @@ -13,6 +13,6 @@ contract C { // compileViaYul: also // ---- // f() -> 0x20, 0x02, 0x40, 0x80, 3, 0x6162630000000000000000000000000000000000000000000000000000000000, 0x99, 44048183304486788312148433451363384677562265908331949128489393215789685032262, 32241931068525137014058842823026578386641954854143559838526554899205067598957, 49951309422467613961193228765530489307475214998374779756599339590522149884499, 0x54555658595a6162636465666768696a6b6c6d6e6f707172737475767778797a, 0x4142434445464748494a4b4c4d4e4f5051525354555658595a00000000000000 -// gas irOptimized: 198780 +// gas irOptimized: 198770 // gas legacy: 199159 -// gas legacyOptimized: 198128 +// gas legacyOptimized: 198132 diff --git a/test/libsolidity/semanticTests/array/copying/storage_memory_nested_from_pointer.sol b/test/libsolidity/semanticTests/array/copying/storage_memory_nested_from_pointer.sol index 13f2be4e9..69b80a2b4 100644 --- a/test/libsolidity/semanticTests/array/copying/storage_memory_nested_from_pointer.sol +++ b/test/libsolidity/semanticTests/array/copying/storage_memory_nested_from_pointer.sol @@ -20,6 +20,6 @@ contract C { // compileViaYul: also // ---- // f() -> 1, 2, 3, 4, 5, 6, 7 -// gas irOptimized: 218149 +// gas irOptimized: 218088 // gas legacy: 223730 // gas legacyOptimized: 222891 diff --git a/test/libsolidity/semanticTests/array/copying/storage_memory_nested_struct.sol b/test/libsolidity/semanticTests/array/copying/storage_memory_nested_struct.sol index 22c6fdbab..8fdd1bec9 100644 --- a/test/libsolidity/semanticTests/array/copying/storage_memory_nested_struct.sol +++ b/test/libsolidity/semanticTests/array/copying/storage_memory_nested_struct.sol @@ -26,6 +26,6 @@ contract C { // compileViaYul: also // ---- // f() -> 11, 0x0c, 1, 0x15, 22, 4 -// gas irOptimized: 292660 +// gas irOptimized: 292610 // gas legacy: 296916 // gas legacyOptimized: 283163 diff --git a/test/libsolidity/semanticTests/array/copying/storage_memory_packed_dyn.sol b/test/libsolidity/semanticTests/array/copying/storage_memory_packed_dyn.sol index 3b576388e..57a646419 100644 --- a/test/libsolidity/semanticTests/array/copying/storage_memory_packed_dyn.sol +++ b/test/libsolidity/semanticTests/array/copying/storage_memory_packed_dyn.sol @@ -15,6 +15,6 @@ contract C { // compileViaYul: also // ---- // f() -> 2, 3, 4 -// gas irOptimized: 240441 +// gas irOptimized: 240291 // gas legacy: 241549 // gas legacyOptimized: 236002 diff --git a/test/libsolidity/semanticTests/array/create_memory_array.sol b/test/libsolidity/semanticTests/array/create_memory_array.sol index 34f58b4bc..464da32ba 100644 --- a/test/libsolidity/semanticTests/array/create_memory_array.sol +++ b/test/libsolidity/semanticTests/array/create_memory_array.sol @@ -20,6 +20,6 @@ contract C { // compileViaYul: also // ---- // f() -> "A", 8, 4, "B" -// gas irOptimized: 170583 +// gas irOptimized: 170553 // gas legacy: 121398 // gas legacyOptimized: 115494 diff --git a/test/libsolidity/semanticTests/array/delete/bytes_delete_element.sol b/test/libsolidity/semanticTests/array/delete/bytes_delete_element.sol index 63f41d7cc..327c59f5d 100644 --- a/test/libsolidity/semanticTests/array/delete/bytes_delete_element.sol +++ b/test/libsolidity/semanticTests/array/delete/bytes_delete_element.sol @@ -18,6 +18,6 @@ contract c { // compileViaYul: also // ---- // test1() -> true -// gas irOptimized: 534222 +// gas irOptimized: 533377 // gas legacy: 613377 -// gas legacyOptimized: 606202 +// gas legacyOptimized: 606411 diff --git a/test/libsolidity/semanticTests/array/delete/delete_storage_array_packed.sol b/test/libsolidity/semanticTests/array/delete/delete_storage_array_packed.sol index 6e38b0c95..9811c27be 100644 --- a/test/libsolidity/semanticTests/array/delete/delete_storage_array_packed.sol +++ b/test/libsolidity/semanticTests/array/delete/delete_storage_array_packed.sol @@ -16,4 +16,4 @@ contract C { // compileViaYul: also // ---- // f() -> 0, 0, 0 -// gas irOptimized: 101935 +// gas irOptimized: 101909 diff --git a/test/libsolidity/semanticTests/array/dynamic_array_cleanup.sol b/test/libsolidity/semanticTests/array/dynamic_array_cleanup.sol index 0fb61f5d3..6942a8fa3 100644 --- a/test/libsolidity/semanticTests/array/dynamic_array_cleanup.sol +++ b/test/libsolidity/semanticTests/array/dynamic_array_cleanup.sol @@ -16,7 +16,7 @@ contract c { // ---- // storage: empty // fill() -> -// gas irOptimized: 536238 +// gas irOptimized: 536196 // gas legacy: 504373 // gas legacyOptimized: 499648 // storage: nonempty diff --git a/test/libsolidity/semanticTests/array/dynamic_arrays_in_storage.sol b/test/libsolidity/semanticTests/array/dynamic_arrays_in_storage.sol index b1e075421..c28cbf761 100644 --- a/test/libsolidity/semanticTests/array/dynamic_arrays_in_storage.sol +++ b/test/libsolidity/semanticTests/array/dynamic_arrays_in_storage.sol @@ -44,7 +44,7 @@ contract c { // ---- // getLengths() -> 0, 0 // setLengths(uint256,uint256): 48, 49 -> -// gas irOptimized: 276446 +// gas irOptimized: 276350 // gas legacy: 308271 // gas legacyOptimized: 300117 // getLengths() -> 48, 49 diff --git a/test/libsolidity/semanticTests/array/dynamic_multi_array_cleanup.sol b/test/libsolidity/semanticTests/array/dynamic_multi_array_cleanup.sol index 694e13f78..38d3e3c35 100644 --- a/test/libsolidity/semanticTests/array/dynamic_multi_array_cleanup.sol +++ b/test/libsolidity/semanticTests/array/dynamic_multi_array_cleanup.sol @@ -18,7 +18,7 @@ contract c { // ---- // storage: empty // fill() -> 8 -// gas irOptimized: 181164 +// gas irOptimized: 181160 // gas legacy: 165456 // gas legacyOptimized: 164387 // storage: nonempty diff --git a/test/libsolidity/semanticTests/array/fixed_arrays_as_return_type.sol b/test/libsolidity/semanticTests/array/fixed_arrays_as_return_type.sol index 738260026..cfa63486c 100644 --- a/test/libsolidity/semanticTests/array/fixed_arrays_as_return_type.sol +++ b/test/libsolidity/semanticTests/array/fixed_arrays_as_return_type.sol @@ -21,6 +21,6 @@ contract B { // compileViaYul: also // ---- // f() -> 2, 3, 4, 5, 6, 1000, 1001, 1002, 1003, 1004 -// gas irOptimized: 179491 +// gas irOptimized: 179451 // gas legacy: 264410 // gas legacyOptimized: 134899 diff --git a/test/libsolidity/semanticTests/array/function_array_cross_calls.sol b/test/libsolidity/semanticTests/array/function_array_cross_calls.sol index ba045d5cc..47f7c00a3 100644 --- a/test/libsolidity/semanticTests/array/function_array_cross_calls.sol +++ b/test/libsolidity/semanticTests/array/function_array_cross_calls.sol @@ -45,6 +45,6 @@ contract C { // compileViaYul: also // ---- // test() -> 5, 6, 7 -// gas irOptimized: 360048 +// gas irOptimized: 360198 // gas legacy: 500424 -// gas legacyOptimized: 307615 +// gas legacyOptimized: 307813 diff --git a/test/libsolidity/semanticTests/array/pop/array_pop_array_transition.sol b/test/libsolidity/semanticTests/array/pop/array_pop_array_transition.sol index f1ee80776..b75067cba 100644 --- a/test/libsolidity/semanticTests/array/pop/array_pop_array_transition.sol +++ b/test/libsolidity/semanticTests/array/pop/array_pop_array_transition.sol @@ -25,7 +25,7 @@ contract c { // compileViaYul: also // ---- // test() -> 1, 2, 3 -// gas irOptimized: 2556862 +// gas irOptimized: 2556747 // gas legacy: 2416722 // gas legacyOptimized: 2405396 // storage: empty diff --git a/test/libsolidity/semanticTests/array/pop/array_pop_uint16_transition.sol b/test/libsolidity/semanticTests/array/pop/array_pop_uint16_transition.sol index 649689ac9..22e2cdf12 100644 --- a/test/libsolidity/semanticTests/array/pop/array_pop_uint16_transition.sol +++ b/test/libsolidity/semanticTests/array/pop/array_pop_uint16_transition.sol @@ -20,7 +20,7 @@ contract c { // compileViaYul: also // ---- // test() -> 38, 28, 18 -// gas irOptimized: 539280 +// gas irOptimized: 538686 // gas legacy: 454080 // gas legacyOptimized: 443170 // storage: empty diff --git a/test/libsolidity/semanticTests/array/pop/array_pop_uint24_transition.sol b/test/libsolidity/semanticTests/array/pop/array_pop_uint24_transition.sol index 4f707555d..d40fa3058 100644 --- a/test/libsolidity/semanticTests/array/pop/array_pop_uint24_transition.sol +++ b/test/libsolidity/semanticTests/array/pop/array_pop_uint24_transition.sol @@ -20,7 +20,7 @@ contract c { // compileViaYul: also // ---- // test() -> 20, 10 -// gas irOptimized: 374378 +// gas irOptimized: 374254 // gas legacy: 320859 // gas legacyOptimized: 314681 // storage: empty diff --git a/test/libsolidity/semanticTests/array/pop/byte_array_pop_copy_long.sol b/test/libsolidity/semanticTests/array/pop/byte_array_pop_copy_long.sol index f62218a3c..76ef30302 100644 --- a/test/libsolidity/semanticTests/array/pop/byte_array_pop_copy_long.sol +++ b/test/libsolidity/semanticTests/array/pop/byte_array_pop_copy_long.sol @@ -12,6 +12,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0x20, 29, 0x0303030303030303030303030303030303030303030303030303030303000000 -// gas irOptimized: 163882 +// gas irOptimized: 163879 // gas legacy: 245809 -// gas legacyOptimized: 242597 +// gas legacyOptimized: 242636 diff --git a/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty.sol b/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty.sol index e6b33a734..349a50c64 100644 --- a/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty.sol +++ b/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty.sol @@ -18,7 +18,7 @@ contract c { // compileViaYul: also // ---- // test() -> true -// gas irOptimized: 461007 +// gas irOptimized: 460283 // gas legacy: 552064 -// gas legacyOptimized: 533000 +// gas legacyOptimized: 533164 // storage: empty diff --git a/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty_garbage_ref.sol b/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty_garbage_ref.sol index 57d58ef26..f9d1b6708 100644 --- a/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty_garbage_ref.sol +++ b/test/libsolidity/semanticTests/array/pop/byte_array_pop_long_storage_empty_garbage_ref.sol @@ -17,7 +17,7 @@ contract c { // compileViaYul: also // ---- // test() -> -// gas irOptimized: 302445 +// gas irOptimized: 302142 // gas legacy: 372763 -// gas legacyOptimized: 366764 +// gas legacyOptimized: 366846 // storage: empty diff --git a/test/libsolidity/semanticTests/array/pop/byte_array_pop_masking_long.sol b/test/libsolidity/semanticTests/array/pop/byte_array_pop_masking_long.sol index f7feb7ee9..e0206365d 100644 --- a/test/libsolidity/semanticTests/array/pop/byte_array_pop_masking_long.sol +++ b/test/libsolidity/semanticTests/array/pop/byte_array_pop_masking_long.sol @@ -12,6 +12,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0x20, 33, 0x303030303030303030303030303030303030303030303030303030303030303, 0x0300000000000000000000000000000000000000000000000000000000000000 -// gas irOptimized: 161233 +// gas irOptimized: 161236 // gas legacy: 243287 -// gas legacyOptimized: 240324 +// gas legacyOptimized: 240361 diff --git a/test/libsolidity/semanticTests/array/push/array_push.sol b/test/libsolidity/semanticTests/array/push/array_push.sol index eab685539..5f66b8437 100644 --- a/test/libsolidity/semanticTests/array/push/array_push.sol +++ b/test/libsolidity/semanticTests/array/push/array_push.sol @@ -18,6 +18,6 @@ contract c { // compileViaYul: also // ---- // test() -> 5, 4, 3, 3 -// gas irOptimized: 116397 +// gas irOptimized: 116387 // gas legacy: 111938 // gas legacyOptimized: 110528 diff --git a/test/libsolidity/semanticTests/array/push/array_push_nested_from_calldata.sol b/test/libsolidity/semanticTests/array/push/array_push_nested_from_calldata.sol index 9f8035d33..020466470 100644 --- a/test/libsolidity/semanticTests/array/push/array_push_nested_from_calldata.sol +++ b/test/libsolidity/semanticTests/array/push/array_push_nested_from_calldata.sol @@ -14,6 +14,6 @@ contract C { // compileViaYul: also // ---- // f(uint120[]): 0x20, 3, 1, 2, 3 -> 1 -// gas irOptimized: 116603 +// gas irOptimized: 116591 // gas legacy: 116886 -// gas legacyOptimized: 116701 +// gas legacyOptimized: 116699 diff --git a/test/libsolidity/semanticTests/array/push/array_push_packed_array.sol b/test/libsolidity/semanticTests/array/push/array_push_packed_array.sol index 280deaed1..c051e93b5 100644 --- a/test/libsolidity/semanticTests/array/push/array_push_packed_array.sol +++ b/test/libsolidity/semanticTests/array/push/array_push_packed_array.sol @@ -16,6 +16,6 @@ contract c { // compileViaYul: also // ---- // test() -> 1, 2, 3, 4 -// gas irOptimized: 112771 +// gas irOptimized: 112751 // gas legacy: 107098 // gas legacyOptimized: 106362 diff --git a/test/libsolidity/semanticTests/array/push/array_push_struct.sol b/test/libsolidity/semanticTests/array/push/array_push_struct.sol index 80af61a29..e13c0e79f 100644 --- a/test/libsolidity/semanticTests/array/push/array_push_struct.sol +++ b/test/libsolidity/semanticTests/array/push/array_push_struct.sol @@ -22,6 +22,6 @@ contract c { // compileViaYul: also // ---- // test() -> 2, 3, 4, 5 -// gas irOptimized: 147411 +// gas irOptimized: 147373 // gas legacy: 190684 // gas legacyOptimized: 188256 diff --git a/test/libsolidity/semanticTests/array/push/array_push_struct_from_calldata.sol b/test/libsolidity/semanticTests/array/push/array_push_struct_from_calldata.sol index d504d079d..7875d2c21 100644 --- a/test/libsolidity/semanticTests/array/push/array_push_struct_from_calldata.sol +++ b/test/libsolidity/semanticTests/array/push/array_push_struct_from_calldata.sol @@ -18,6 +18,6 @@ contract c { // compileViaYul: also // ---- // test((uint16,uint16,uint16[3],uint16[])): 0x20, 2, 3, 0, 0, 4, 0xC0, 4, 0, 0, 5, 0, 0 -> 2, 3, 4, 5 -// gas irOptimized: 148672 +// gas irOptimized: 148644 // gas legacy: 152444 -// gas legacyOptimized: 146666 +// gas legacyOptimized: 146671 diff --git a/test/libsolidity/semanticTests/array/push/byte_array_push_transition.sol b/test/libsolidity/semanticTests/array/push/byte_array_push_transition.sol index aa08bd513..bb4f87b6b 100644 --- a/test/libsolidity/semanticTests/array/push/byte_array_push_transition.sol +++ b/test/libsolidity/semanticTests/array/push/byte_array_push_transition.sol @@ -17,6 +17,6 @@ contract c { // compileViaYul: also // ---- // test() -> 0 -// gas irOptimized: 398636 +// gas irOptimized: 397892 // gas legacy: 565428 -// gas legacyOptimized: 552330 +// gas legacyOptimized: 552525 diff --git a/test/libsolidity/semanticTests/array/push/push_no_args_2d.sol b/test/libsolidity/semanticTests/array/push/push_no_args_2d.sol index 6a26db287..b3ddb2a24 100644 --- a/test/libsolidity/semanticTests/array/push/push_no_args_2d.sol +++ b/test/libsolidity/semanticTests/array/push/push_no_args_2d.sol @@ -29,14 +29,14 @@ contract C { // ---- // l() -> 0 // f(uint256,uint256): 42, 64 -> -// gas irOptimized: 202798 +// gas irOptimized: 202796 // gas legacy: 163034 // gas legacyOptimized: 157045 // l() -> 1 // ll(uint256): 0 -> 43 // a(uint256,uint256): 0, 42 -> 64 // f(uint256,uint256): 84, 128 -> -// gas irOptimized: 299014 +// gas irOptimized: 299012 // gas legacy: 222080 // gas legacyOptimized: 210631 // l() -> 2 diff --git a/test/libsolidity/semanticTests/array/push/push_no_args_bytes.sol b/test/libsolidity/semanticTests/array/push/push_no_args_bytes.sol index f73953add..f0c6b445b 100644 --- a/test/libsolidity/semanticTests/array/push/push_no_args_bytes.sol +++ b/test/libsolidity/semanticTests/array/push/push_no_args_bytes.sol @@ -23,9 +23,9 @@ contract C { // ---- // l() -> 0 // g(uint256): 70 -> -// gas irOptimized: 433788 +// gas irOptimized: 433438 // gas legacy: 419791 -// gas legacyOptimized: 415338 +// gas legacyOptimized: 415408 // l() -> 70 // a(uint256): 69 -> left(69) // f() -> diff --git a/test/libsolidity/semanticTests/constructor/arrays_in_constructors.sol b/test/libsolidity/semanticTests/constructor/arrays_in_constructors.sol index 33e372e01..86ffccea4 100644 --- a/test/libsolidity/semanticTests/constructor/arrays_in_constructors.sol +++ b/test/libsolidity/semanticTests/constructor/arrays_in_constructors.sol @@ -26,6 +26,6 @@ contract Creator { // compileViaYul: also // ---- // f(uint256,address[]): 7, 0x40, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -> 7, 8 -// gas irOptimized: 472538 +// gas irOptimized: 472714 // gas legacy: 570900 -// gas legacyOptimized: 436164 +// gas legacyOptimized: 436360 diff --git a/test/libsolidity/semanticTests/constructor/bytes_in_constructors_packer.sol b/test/libsolidity/semanticTests/constructor/bytes_in_constructors_packer.sol index 2cfee3ab0..4c12ee6aa 100644 --- a/test/libsolidity/semanticTests/constructor/bytes_in_constructors_packer.sol +++ b/test/libsolidity/semanticTests/constructor/bytes_in_constructors_packer.sol @@ -26,6 +26,6 @@ contract Creator { // compileViaYul: also // ---- // f(uint256,bytes): 7, 0x40, 78, "abcdefghijklmnopqrstuvwxyzabcdef", "ghijklmnopqrstuvwxyzabcdefghijkl", "mnopqrstuvwxyz" -> 7, "h" -// gas irOptimized: 335246 +// gas irOptimized: 335239 // gas legacy: 414850 -// gas legacyOptimized: 290276 +// gas legacyOptimized: 290278 diff --git a/test/libsolidity/semanticTests/externalContracts/deposit_contract.sol b/test/libsolidity/semanticTests/externalContracts/deposit_contract.sol index 3f19a8629..0349df2f4 100644 --- a/test/libsolidity/semanticTests/externalContracts/deposit_contract.sol +++ b/test/libsolidity/semanticTests/externalContracts/deposit_contract.sol @@ -178,7 +178,7 @@ contract DepositContract is IDepositContract, ERC165 { // compileViaYul: also // ---- // constructor() -// gas irOptimized: 1813459 +// gas irOptimized: 1813273 // gas legacy: 2558004 // gas legacyOptimized: 1806764 // supportsInterface(bytes4): 0x0 -> 0 @@ -186,25 +186,25 @@ contract DepositContract is IDepositContract, ERC165 { // supportsInterface(bytes4): 0x01ffc9a700000000000000000000000000000000000000000000000000000000 -> true # ERC-165 id # // supportsInterface(bytes4): 0x8564090700000000000000000000000000000000000000000000000000000000 -> true # the deposit interface id # // get_deposit_root() -> 0xd70a234731285c6804c2a4f56711ddb8c82c99740f207854891028af34e27e5e -// gas irOptimized: 107589 +// gas irOptimized: 107525 // gas legacy: 128065 // gas legacyOptimized: 100398 // get_deposit_count() -> 0x20, 8, 0 # TODO: check balance and logs after each deposit # // deposit(bytes,bytes,bytes,bytes32), 32 ether: 0 -> FAILURE # Empty input # // get_deposit_root() -> 0xd70a234731285c6804c2a4f56711ddb8c82c99740f207854891028af34e27e5e -// gas irOptimized: 107589 +// gas irOptimized: 107525 // gas legacy: 128065 // gas legacyOptimized: 100398 // get_deposit_count() -> 0x20, 8, 0 // deposit(bytes,bytes,bytes,bytes32), 1 ether: 0x80, 0xe0, 0x120, 0xaa4a8d0b7d9077248630f1a4701ae9764e42271d7f22b7838778411857fd349e, 0x30, 0x933ad9491b62059dd065b560d256d8957a8c402cc6e8d8ee7290ae11e8f73292, 0x67a8811c397529dac52ae1342ba58c9500000000000000000000000000000000, 0x20, 0x00f50428677c60f997aadeab24aabf7fceaef491c96a52b463ae91f95611cf71, 0x60, 0xa29d01cc8c6296a8150e515b5995390ef841dc18948aa3e79be6d7c1851b4cbb, 0x5d6ff49fa70b9c782399506a22a85193151b9b691245cebafd2063012443c132, 0x4b6c36debaedefb7b2d71b0503ffdc00150aaffd42e63358238ec888901738b8 -> # txhash: 0x7085c586686d666e8bb6e9477a0f0b09565b2060a11f1c4209d3a52295033832 # // get_deposit_root() -> 0x2089653123d9c721215120b6db6738ba273bbc5228ac093b1f983badcdc8a438 -// gas irOptimized: 107599 +// gas irOptimized: 107535 // gas legacy: 128075 // gas legacyOptimized: 100411 // get_deposit_count() -> 0x20, 8, 0x0100000000000000000000000000000000000000000000000000000000000000 // deposit(bytes,bytes,bytes,bytes32), 32 ether: 0x80, 0xe0, 0x120, 0xdbd986dc85ceb382708cf90a3500f500f0a393c5ece76963ac3ed72eccd2c301, 0x30, 0xb2ce0f79f90e7b3a113ca5783c65756f96c4b4673c2b5c1eb4efc22280259441, 0x06d601211e8866dc5b50dc48a244dd7c00000000000000000000000000000000, 0x20, 0x00344b6c73f71b11c56aba0d01b7d8ad83559f209d0a4101a515f6ad54c89771, 0x60, 0x945caaf82d18e78c033927d51f452ebcd76524497b91d7a11219cb3db6a1d369, 0x7595fc095ce489e46b2ef129591f2f6d079be4faaf345a02c5eb133c072e7c56, 0x0c6c3617eee66b4b878165c502357d49485326bc6b31bc96873f308c8f19c09d -> # txhash: 0x404d8e109822ce448e68f45216c12cb051b784d068fbe98317ab8e50c58304ac # // get_deposit_root() -> 0x40255975859377d912c53aa853245ebd939bdd2b33a28e084babdcc1ed8238ee -// gas irOptimized: 107599 +// gas irOptimized: 107535 // gas legacy: 128075 // gas legacyOptimized: 100411 // get_deposit_count() -> 0x20, 8, 0x0200000000000000000000000000000000000000000000000000000000000000 diff --git a/test/libsolidity/semanticTests/externalContracts/snark.sol b/test/libsolidity/semanticTests/externalContracts/snark.sol index 8f7722849..afc248e67 100644 --- a/test/libsolidity/semanticTests/externalContracts/snark.sol +++ b/test/libsolidity/semanticTests/externalContracts/snark.sol @@ -296,6 +296,6 @@ contract Test { // g() -> true // pair() -> true // verifyTx() -> true -// gas irOptimized: 146496 +// gas irOptimized: 145824 // gas legacy: 130571 // gas legacyOptimized: 100187 diff --git a/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_calldata_interface.sol b/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_calldata_interface.sol index 40a8b5f15..b6ff9dca9 100644 --- a/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_calldata_interface.sol +++ b/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_calldata_interface.sol @@ -25,5 +25,5 @@ contract B { // compileViaYul: also // ---- // g() -> 42 -// gas irOptimized: 107179 +// gas irOptimized: 107173 // gas legacy: 117797 diff --git a/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_memory_interface.sol b/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_memory_interface.sol index d121f1c20..ca6d32536 100644 --- a/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_memory_interface.sol +++ b/test/libsolidity/semanticTests/inheritance/inherited_function_calldata_memory_interface.sol @@ -25,6 +25,6 @@ contract B { // compileViaYul: also // ---- // g() -> 42 -// gas irOptimized: 127021 +// gas irOptimized: 127215 // gas legacy: 180597 -// gas legacyOptimized: 116153 +// gas legacyOptimized: 116351 diff --git a/test/libsolidity/semanticTests/structs/calldata/calldata_struct_with_nested_array_to_storage.sol b/test/libsolidity/semanticTests/structs/calldata/calldata_struct_with_nested_array_to_storage.sol index 7ce2654d6..42a314297 100644 --- a/test/libsolidity/semanticTests/structs/calldata/calldata_struct_with_nested_array_to_storage.sol +++ b/test/libsolidity/semanticTests/structs/calldata/calldata_struct_with_nested_array_to_storage.sol @@ -18,6 +18,6 @@ contract C { // compileViaYul: also // ---- // f(uint32,(uint128,uint256[][2],uint32)): 55, 0x40, 77, 0x60, 88, 0x40, 0x40, 2, 1, 2 -> 55, 77, 1, 2, 88 -// gas irOptimized: 202421 +// gas irOptimized: 202389 // gas legacy: 205149 -// gas legacyOptimized: 200516 +// gas legacyOptimized: 200512 diff --git a/test/libsolidity/semanticTests/structs/conversion/recursive_storage_memory.sol b/test/libsolidity/semanticTests/structs/conversion/recursive_storage_memory.sol index f785a2249..873cb5dff 100644 --- a/test/libsolidity/semanticTests/structs/conversion/recursive_storage_memory.sol +++ b/test/libsolidity/semanticTests/structs/conversion/recursive_storage_memory.sol @@ -25,4 +25,4 @@ contract CopyTest { // compileViaYul: also // ---- // run() -> 2, 23, 42 -// gas irOptimized: 114778 +// gas irOptimized: 114638 diff --git a/test/libsolidity/semanticTests/structs/memory_structs_nested_load.sol b/test/libsolidity/semanticTests/structs/memory_structs_nested_load.sol index 26d16f160..efff72da3 100644 --- a/test/libsolidity/semanticTests/structs/memory_structs_nested_load.sol +++ b/test/libsolidity/semanticTests/structs/memory_structs_nested_load.sol @@ -68,7 +68,7 @@ contract Test { // compileViaYul: also // ---- // load() -> 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 -// gas irOptimized: 112341 +// gas irOptimized: 112329 // gas legacy: 113999 // gas legacyOptimized: 106281 // store() -> 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 diff --git a/test/libsolidity/semanticTests/structs/struct_containing_bytes_copy_and_delete.sol b/test/libsolidity/semanticTests/structs/struct_containing_bytes_copy_and_delete.sol index 79acbd965..807e8ad6a 100644 --- a/test/libsolidity/semanticTests/structs/struct_containing_bytes_copy_and_delete.sol +++ b/test/libsolidity/semanticTests/structs/struct_containing_bytes_copy_and_delete.sol @@ -25,9 +25,9 @@ contract c { // ---- // storage: empty // set(uint256,bytes,uint256): 12, 0x60, 13, 33, "12345678901234567890123456789012", "3" -> true -// gas irOptimized: 124422 +// gas irOptimized: 124416 // gas legacy: 124736 -// gas legacyOptimized: 124178 +// gas legacyOptimized: 124179 // test(uint256): 32 -> "3" // storage: nonempty // copy() -> true diff --git a/test/libsolidity/semanticTests/structs/struct_delete_storage_nested_small.sol b/test/libsolidity/semanticTests/structs/struct_delete_storage_nested_small.sol index bff1470f3..86ed9512d 100644 --- a/test/libsolidity/semanticTests/structs/struct_delete_storage_nested_small.sol +++ b/test/libsolidity/semanticTests/structs/struct_delete_storage_nested_small.sol @@ -33,4 +33,4 @@ contract C { // compileViaYul: true // ---- // f() -> 0, 0, 0 -// gas irOptimized: 125251 +// gas irOptimized: 125239 diff --git a/test/libsolidity/semanticTests/structs/struct_delete_storage_with_array.sol b/test/libsolidity/semanticTests/structs/struct_delete_storage_with_array.sol index 01faf0e9a..f9203556c 100644 --- a/test/libsolidity/semanticTests/structs/struct_delete_storage_with_array.sol +++ b/test/libsolidity/semanticTests/structs/struct_delete_storage_with_array.sol @@ -44,7 +44,7 @@ contract C { // compileViaYul: also // ---- // f() -> -// gas irOptimized: 129606 +// gas irOptimized: 129594 // gas legacy: 126832 // gas legacyOptimized: 125500 // g() -> diff --git a/test/libsolidity/semanticTests/structs/struct_delete_storage_with_arrays_small.sol b/test/libsolidity/semanticTests/structs/struct_delete_storage_with_arrays_small.sol index b0a588a89..3eb7bd3de 100644 --- a/test/libsolidity/semanticTests/structs/struct_delete_storage_with_arrays_small.sol +++ b/test/libsolidity/semanticTests/structs/struct_delete_storage_with_arrays_small.sol @@ -27,4 +27,4 @@ contract C { // compileViaYul: true // ---- // f() -> 0 -// gas irOptimized: 118884 +// gas irOptimized: 118846 diff --git a/test/libsolidity/semanticTests/various/destructuring_assignment.sol b/test/libsolidity/semanticTests/various/destructuring_assignment.sol index ab322cb25..0e8ae6edf 100644 --- a/test/libsolidity/semanticTests/various/destructuring_assignment.sol +++ b/test/libsolidity/semanticTests/various/destructuring_assignment.sol @@ -36,6 +36,6 @@ contract C { // compileViaYul: also // ---- // f(bytes): 0x20, 0x5, "abcde" -> 0 -// gas irOptimized: 249042 +// gas irOptimized: 248997 // gas legacy: 239258 -// gas legacyOptimized: 238575 +// gas legacyOptimized: 238578 diff --git a/test/libsolidity/semanticTests/various/skip_dynamic_types_for_structs.sol b/test/libsolidity/semanticTests/various/skip_dynamic_types_for_structs.sol index 2f16b6b51..05e8fd9bc 100644 --- a/test/libsolidity/semanticTests/various/skip_dynamic_types_for_structs.sol +++ b/test/libsolidity/semanticTests/various/skip_dynamic_types_for_structs.sol @@ -22,6 +22,6 @@ contract C { // compileViaYul: also // ---- // g() -> 2, 6 -// gas irOptimized: 170427 +// gas irOptimized: 170422 // gas legacy: 172490 -// gas legacyOptimized: 171206 +// gas legacyOptimized: 171209 diff --git a/test/libsolidity/semanticTests/viaYul/array_memory_index_access.sol b/test/libsolidity/semanticTests/viaYul/array_memory_index_access.sol index cde08e90b..26b07df09 100644 --- a/test/libsolidity/semanticTests/viaYul/array_memory_index_access.sol +++ b/test/libsolidity/semanticTests/viaYul/array_memory_index_access.sol @@ -28,7 +28,7 @@ contract C { // index(uint256): 10 -> true // index(uint256): 20 -> true // index(uint256): 0xFF -> true -// gas irOptimized: 168557 +// gas irOptimized: 167533 // gas legacy: 248854 // gas legacyOptimized: 152640 // accessIndex(uint256,int256): 10, 1 -> 2 diff --git a/test/libsolidity/semanticTests/viaYul/array_storage_index_access.sol b/test/libsolidity/semanticTests/viaYul/array_storage_index_access.sol index 338376418..0df1d245e 100644 --- a/test/libsolidity/semanticTests/viaYul/array_storage_index_access.sol +++ b/test/libsolidity/semanticTests/viaYul/array_storage_index_access.sol @@ -18,33 +18,33 @@ contract C { // ---- // test_indices(uint256): 1 -> // test_indices(uint256): 129 -> -// gas irOptimized: 3572413 +// gas irOptimized: 3571897 // gas legacy: 3340105 // gas legacyOptimized: 3280773 // test_indices(uint256): 5 -> -// gas irOptimized: 684693 +// gas irOptimized: 684425 // gas legacy: 458941 // gas legacyOptimized: 455849 // test_indices(uint256): 10 -> // test_indices(uint256): 15 -> -// gas irOptimized: 115342 +// gas irOptimized: 115282 // test_indices(uint256): 0xFF -> -// gas irOptimized: 4554277 +// gas irOptimized: 4553257 // gas legacy: 4107867 // gas legacyOptimized: 3991807 // test_indices(uint256): 1000 -> -// gas irOptimized: 21917394 +// gas irOptimized: 21913394 // gas legacy: 20360399 // gas legacyOptimized: 19921344 // test_indices(uint256): 129 -> -// gas irOptimized: 5135327 +// gas irOptimized: 5133069 // gas legacy: 3472135 // gas legacyOptimized: 3415947 // test_indices(uint256): 128 -> -// gas irOptimized: 663783 +// gas irOptimized: 663269 // gas legacy: 556972 // gas legacyOptimized: 508124 // test_indices(uint256): 1 -> -// gas irOptimized: 680239 +// gas irOptimized: 679981 // gas legacy: 452407 // gas legacyOptimized: 450811 diff --git a/test/libsolidity/semanticTests/viaYul/array_storage_index_boundary_test.sol b/test/libsolidity/semanticTests/viaYul/array_storage_index_boundary_test.sol index 5dbe09465..e2992eede 100644 --- a/test/libsolidity/semanticTests/viaYul/array_storage_index_boundary_test.sol +++ b/test/libsolidity/semanticTests/viaYul/array_storage_index_boundary_test.sol @@ -22,7 +22,7 @@ contract C { // gas legacy: 648515 // gas legacyOptimized: 628739 // test_boundary_check(uint256,uint256): 256, 255 -> 0 -// gas irOptimized: 679610 +// gas irOptimized: 679608 // gas legacy: 649549 // gas legacyOptimized: 629633 // test_boundary_check(uint256,uint256): 256, 0xFFFF -> FAILURE, hex"4e487b71", 0x32 diff --git a/test/libsolidity/semanticTests/viaYul/array_storage_index_zeroed_test.sol b/test/libsolidity/semanticTests/viaYul/array_storage_index_zeroed_test.sol index 7519c47ff..debdee5cf 100644 --- a/test/libsolidity/semanticTests/viaYul/array_storage_index_zeroed_test.sol +++ b/test/libsolidity/semanticTests/viaYul/array_storage_index_zeroed_test.sol @@ -54,18 +54,18 @@ contract C { // ---- // test_zeroed_indicies(uint256): 1 -> // test_zeroed_indicies(uint256): 5 -> -// gas irOptimized: 222625 +// gas irOptimized: 222579 // gas legacy: 191267 // gas legacyOptimized: 188486 // test_zeroed_indicies(uint256): 10 -> -// gas irOptimized: 327375 +// gas irOptimized: 327289 // gas legacy: 276129 // gas legacyOptimized: 271024 // test_zeroed_indicies(uint256): 15 -> -// gas irOptimized: 409400 +// gas irOptimized: 409274 // gas legacy: 339254 // gas legacyOptimized: 331904 // test_zeroed_indicies(uint256): 0xFF -> -// gas irOptimized: 9686975 +// gas irOptimized: 9684929 // gas legacy: 8477449 // gas legacyOptimized: 8343774 diff --git a/test/libsolidity/semanticTests/viaYul/array_storage_push_empty.sol b/test/libsolidity/semanticTests/viaYul/array_storage_push_empty.sol index a03d950b8..9dc970435 100644 --- a/test/libsolidity/semanticTests/viaYul/array_storage_push_empty.sol +++ b/test/libsolidity/semanticTests/viaYul/array_storage_push_empty.sol @@ -13,11 +13,11 @@ contract C { // compileViaYul: also // ---- // pushEmpty(uint256): 128 -// gas irOptimized: 632037 +// gas irOptimized: 631781 // gas legacy: 607287 // gas legacyOptimized: 589048 // pushEmpty(uint256): 256 -// gas irOptimized: 862821 +// gas irOptimized: 862309 // gas legacy: 828983 // gas legacyOptimized: 802808 // pushEmpty(uint256): 32768 -> FAILURE # out-of-gas # diff --git a/test/libsolidity/semanticTests/viaYul/array_storage_push_empty_length_address.sol b/test/libsolidity/semanticTests/viaYul/array_storage_push_empty_length_address.sol index 70befff13..2a92def82 100644 --- a/test/libsolidity/semanticTests/viaYul/array_storage_push_empty_length_address.sol +++ b/test/libsolidity/semanticTests/viaYul/array_storage_push_empty_length_address.sol @@ -18,7 +18,7 @@ contract C { // set_get_length(uint256): 10 -> 10 // set_get_length(uint256): 20 -> 20 // set_get_length(uint256): 0 -> 0 -// gas irOptimized: 110296 +// gas irOptimized: 110256 // gas legacy: 107830 // gas legacyOptimized: 107262 // set_get_length(uint256): 0xFF -> 0xFF @@ -29,4 +29,4 @@ contract C { // gas irOptimized: 10238500 // gas legacy: 12945874 // gas legacyOptimized: 9462646 -// set_get_length(uint256): 0xFFFF -> FAILURE # Out-of-gas # \ No newline at end of file +// set_get_length(uint256): 0xFFFF -> FAILURE # Out-of-gas # diff --git a/test/libsolidity/semanticTests/viaYul/array_storage_push_pop.sol b/test/libsolidity/semanticTests/viaYul/array_storage_push_pop.sol index fc567c854..c7b9994a5 100644 --- a/test/libsolidity/semanticTests/viaYul/array_storage_push_pop.sol +++ b/test/libsolidity/semanticTests/viaYul/array_storage_push_pop.sol @@ -15,15 +15,15 @@ contract C { // set_get_length(uint256): 1 -> 0 // set_get_length(uint256): 10 -> 0 // set_get_length(uint256): 20 -> 0 -// gas irOptimized: 162779 +// gas irOptimized: 162739 // gas legacy: 141922 // gas legacyOptimized: 139708 // set_get_length(uint256): 0xFF -> 0 -// gas irOptimized: 1792504 +// gas irOptimized: 1791994 // gas legacy: 1524427 // gas legacyOptimized: 1500358 // set_get_length(uint256): 0xFFF -> 0 -// gas irOptimized: 28422916 +// gas irOptimized: 28414726 // gas legacy: 24115159 // gas legacyOptimized: 23733970 -// set_get_length(uint256): 0xFFFF -> FAILURE # Out-of-gas # \ No newline at end of file +// set_get_length(uint256): 0xFFFF -> FAILURE # Out-of-gas # diff --git a/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul b/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul index 69dfb946c..8e47a4afa 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul @@ -502,12 +502,12 @@ // let _2 := 0x20 // dst := add(array, _2) // let src := add(offset, _2) -// let _3 := 0x40 -// if gt(add(add(offset, mul(length, _3)), _2), end) { revert(0, 0) } +// if gt(add(add(offset, shl(6, length)), _2), end) { revert(0, 0) } // let i := 0 // for { } lt(i, length) { i := add(i, 1) } // { // if iszero(slt(add(src, _1), end)) { revert(0, 0) } +// let _3 := 64 // let dst_1 := allocateMemory(_3) // let dst_2 := dst_1 // let src_1 := src @@ -542,7 +542,7 @@ // mstore(dst, length) // dst := add(dst, _1) // let src := add(_3, _1) -// if gt(add(add(_3, mul(length, _1)), _1), dataEnd) { revert(value2, value2) } +// if gt(add(add(_3, shl(5, length)), _1), dataEnd) { revert(value2, value2) } // let i := value2 // for { } lt(i, length) { i := add(i, 1) } // { @@ -565,6 +565,6 @@ // function array_allocation_size_array_address_dyn_memory(length) -> size // { // if gt(length, 0xffffffffffffffff) { revert(size, size) } -// size := add(mul(length, 0x20), 0x20) +// size := add(shl(5, length), 0x20) // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/aztec.yul b/test/libyul/yulOptimizerTests/fullSuite/aztec.yul index 1076f349a..56a046c76 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/aztec.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/aztec.yul @@ -228,15 +228,17 @@ mstore(0x00, keccak256(0x300, mul(n, 0x80))) } } +// ==== +// EVMVersion: >=istanbul // ---- // step: fullSuite // // { // { -// let _1 := 0x80 -// mstore(_1, 7673901602397024137095011250362199966051872585513276903826533215767972925880) +// mstore(0x80, 7673901602397024137095011250362199966051872585513276903826533215767972925880) // mstore(0xa0, 8489654445897228341090914135473290831551238522473825886865492707826370766375) -// let notes := add(0x04, calldataload(0x04)) +// let _1 := calldataload(0x04) +// let notes := add(0x04, _1) // let m := calldataload(0x24) // let n := calldataload(notes) // let _2 := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 @@ -252,11 +254,11 @@ // mstore(0x2e0, m) // kn := mulmod(sub(_2, kn), challenge, _2) // hashCommitments(notes, n) -// let b := add(0x300, mul(n, _1)) +// let b := add(0x300, shl(7, n)) // let i := 0 // for { } lt(i, n) { i := add(i, 0x01) } // { -// let _3 := add(calldataload(0x04), mul(i, 0xc0)) +// let _3 := add(_1, mul(i, 0xc0)) // let noteIndex := add(_3, 0x24) // let k := 0 // let a := calldataload(add(_3, 0x44)) @@ -282,14 +284,17 @@ // let _5 := 0x40 // calldatacopy(0xe0, add(_3, 164), _5) // calldatacopy(0x20, add(_3, 100), _5) -// mstore(0x120, sub(_2, c)) -// mstore(0x60, k) +// let _6 := 0x120 +// mstore(_6, sub(_2, c)) +// let _7 := 0x60 +// mstore(_7, k) // mstore(0xc0, a) -// let result := call(gas(), 7, 0, 0xe0, 0x60, 0x1a0, _5) -// let result_1 := and(result, call(gas(), 7, 0, 0x20, 0x60, 0x120, _5)) -// let result_2 := and(result_1, call(gas(), 7, 0, _1, 0x60, 0x160, _5)) -// let result_3 := and(result_2, call(gas(), 6, 0, 0x120, _1, 0x160, _5)) -// result := and(result_3, call(gas(), 6, 0, 0x160, _1, b, _5)) +// let result := call(gas(), 7, 0, 0xe0, _7, 0x1a0, _5) +// let result_1 := and(result, call(gas(), 7, 0, 0x20, _7, _6, _5)) +// let _8 := 0x160 +// let result_2 := and(result_1, call(gas(), 7, 0, 0x80, _7, _8, _5)) +// let result_3 := and(result_2, call(gas(), 6, 0, _6, 0x80, _8, _5)) +// result := and(result_3, call(gas(), 6, 0, _8, 0x80, b, _5)) // if eq(i, m) // { // mstore(0x260, mload(0x20)) @@ -299,10 +304,10 @@ // } // if gt(i, m) // { -// mstore(0x60, c) -// let result_4 := and(result, call(gas(), 7, 0, 0x20, 0x60, 0x220, _5)) -// let result_5 := and(result_4, call(gas(), 6, 0, 0x220, _1, 0x260, _5)) -// result := and(result_5, call(gas(), 6, 0, 0x1a0, _1, 0x1e0, _5)) +// mstore(_7, c) +// let result_4 := and(result, call(gas(), 7, 0, 0x20, _7, 0x220, _5)) +// let result_5 := and(result_4, call(gas(), 6, 0, 0x220, 0x80, 0x260, _5)) +// result := and(result_5, call(gas(), 6, 0, 0x1a0, 0x80, 0x1e0, _5)) // } // if iszero(result) // { @@ -375,9 +380,8 @@ // let i := 0 // for { } lt(i, n) { i := add(i, 0x01) } // { -// let _1 := 0x80 -// calldatacopy(add(0x300, mul(i, _1)), add(add(notes, mul(i, 0xc0)), 0x60), _1) +// calldatacopy(add(0x300, shl(7, i)), add(add(notes, mul(i, 0xc0)), 0x60), 0x80) // } -// mstore(0, keccak256(0x300, mul(n, 0x80))) +// mstore(0, keccak256(0x300, shl(7, n))) // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul b/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul index c5cdf8104..9cdf20193 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul @@ -14,6 +14,8 @@ v := calldataload(add(data, mul(i, 0x20))) } } +// ==== +// EVMVersion: >=istanbul // ---- // step: fullSuite // @@ -25,8 +27,7 @@ // let i := sum // for { } lt(i, length) { i := add(i, 1) } // { -// let _2 := 0x20 -// sum := add(sum, calldataload(add(add(_1, mul(i, _2)), _2))) +// sum := add(sum, calldataload(add(add(_1, shl(5, i)), 0x20))) // } // sstore(0, sum) // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul b/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul index 3b30ac4f7..5bd34186e 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul @@ -17,6 +17,8 @@ v := add(v, calldataload(7)) } } +// ==== +// EVMVersion: >=istanbul // ---- // step: fullSuite // @@ -29,8 +31,7 @@ // let _2 := calldataload(7) // for { } lt(i, length) { i := add(i, 1) } // { -// let _3 := 0x20 -// sum := add(sum, add(calldataload(add(add(_1, mul(i, _3)), _3)), _2)) +// sum := add(sum, add(calldataload(add(add(_1, shl(5, i)), 0x20)), _2)) // } // sstore(0, sum) // }