diff --git a/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output b/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output index 0bd6285b785e..d5c02fc82151 100644 --- a/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output +++ b/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output @@ -428,8 +428,7 @@ object "D_27" { { /// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." let _1 := memoryguard(0x80) - let _2 := 64 - mstore(_2, _1) + mstore(64, _1) if iszero(lt(calldatasize(), 4)) { if eq(0x26121ff0, shr(224, calldataload(0))) @@ -437,10 +436,9 @@ object "D_27" { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } /// @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." - let _3 := datasize("C_2") - let _4 := add(_1, _3) - let _5 := 0xffffffffffffffff - if or(gt(_4, _5), lt(_4, _1)) + let _2 := datasize("C_2") + let _3 := add(_1, _2) + if or(gt(_3, 0xffffffffffffffff), lt(_3, _1)) { /// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." mstore(0, shl(224, 0x4e487b71)) @@ -448,45 +446,53 @@ object "D_27" { revert(0, 0x24) } /// @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." - datacopy(_1, dataoffset("C_2"), _3) - if iszero(create(/** @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." */ 0, /** @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." */ _1, sub(_4, _1))) + datacopy(_1, dataoffset("C_2"), _2) + if iszero(create(/** @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." */ 0, /** @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." */ _1, sub(_3, _1))) { /// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." - let pos := mload(_2) + let pos := mload(64) returndatacopy(pos, 0, returndatasize()) revert(pos, returndatasize()) } - let memPtr := mload(_2) - let newFreePtr := add(memPtr, _2) - if or(gt(newFreePtr, /** @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." */ _5), /** @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." */ lt(newFreePtr, memPtr)) + let memPtr := 0 + let size := 0 + size := 0 + let memPtr_1 := mload(64) + let newFreePtr := add(memPtr_1, 64) + if or(gt(newFreePtr, /** @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." */ 0xffffffffffffffff), /** @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." */ lt(newFreePtr, memPtr_1)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x41) revert(0, 0x24) } - mstore(_2, newFreePtr) - mstore(memPtr, 2) - mstore(add(memPtr, 32), "/*") - let memPtr_1 := mload(_2) - let newFreePtr_1 := add(memPtr_1, 96) - if or(gt(newFreePtr_1, /** @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." */ _5), /** @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." */ lt(newFreePtr_1, memPtr_1)) + mstore(64, newFreePtr) + memPtr := memPtr_1 + mstore(memPtr_1, 2) + mstore(add(memPtr_1, 32), "/*") + let memPtr_2 := 0 + let size_1 := 0 + size_1 := 0 + let memPtr_3 := mload(64) + let newFreePtr_1 := add(memPtr_3, 96) + if or(gt(newFreePtr_1, /** @src 0:446:491 "new /// @src 0:149:156 \"new C()\"..." */ 0xffffffffffffffff), /** @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." */ lt(newFreePtr_1, memPtr_3)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x41) revert(0, 0x24) } - mstore(_2, newFreePtr_1) - mstore(memPtr_1, 39) - let _6 := add(memPtr_1, 32) - mstore(_6, 0x2f2a2a204073726320303a39363a313635202022636f6e74726163742044207b) - mstore(add(memPtr_1, _2), shl(200, 0x2e2e2e22202a2f)) - let memPos := mload(_2) + mstore(64, newFreePtr_1) + memPtr_2 := memPtr_3 + mstore(memPtr_3, 39) + let _4 := add(memPtr_3, 32) + mstore(_4, 0x2f2a2a204073726320303a39363a313635202022636f6e74726163742044207b) + mstore(add(memPtr_3, 64), shl(200, 0x2e2e2e22202a2f)) + let memPos := mload(64) mstore(memPos, 32) - let length := mload(memPtr_1) + let length := mload(memPtr_3) mstore(add(memPos, 32), length) - mcopy(add(memPos, _2), _6, length) - mstore(add(add(memPos, length), _2), 0) - return(memPos, add(sub(add(memPos, and(add(length, 31), not(31))), memPos), _2)) + mcopy(add(memPos, 64), _4, length) + mstore(add(add(memPos, length), 64), 0) + return(memPos, add(sub(add(memPos, and(add(length, 31), not(31))), memPos), 64)) } } revert(0, 0) diff --git a/test/cmdlineTests/function_debug_info/output b/test/cmdlineTests/function_debug_info/output index bd7ba1197b96..c1346e33ab0c 100644 --- a/test/cmdlineTests/function_debug_info/output +++ b/test/cmdlineTests/function_debug_info/output @@ -31,7 +31,7 @@ "returnSlots": 2 }, "abi_decode_tuple_t_uint256": { - "entryPoint": 269, + "entryPoint": 271, "parameterSlots": 2, "returnSlots": 1 }, @@ -40,7 +40,7 @@ "returnSlots": 1 }, "panic_error_0x32": { - "entryPoint": 292, + "entryPoint": 294, "parameterSlots": 0, "returnSlots": 0 } diff --git a/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output b/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output index 2441357d97fb..170cdf1a7a3a 100644 --- a/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output +++ b/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output @@ -22,25 +22,24 @@ object "C_14" { { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let _2 := 64 - let newFreePtr := add(_1, _2) + let newFreePtr := add(_1, 64) if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, _1)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x41) revert(0, 36) } - mstore(_2, newFreePtr) + mstore(64, newFreePtr) mstore(_1, 5) - let _3 := add(_1, 0x20) - mstore(_3, "aaaaa") - let memPos := mload(_2) - mstore(memPos, 0x20) + let _2 := add(_1, 32) + mstore(_2, "aaaaa") + let memPos := mload(64) + mstore(memPos, 32) let length := mload(_1) - mstore(add(memPos, 0x20), length) - mcopy(add(memPos, _2), _3, length) - mstore(add(add(memPos, length), _2), 0) - return(memPos, add(sub(add(memPos, and(add(length, 31), not(31))), memPos), _2)) + mstore(add(memPos, 32), length) + mcopy(add(memPos, 64), _2, length) + mstore(add(add(memPos, length), 64), 0) + return(memPos, add(sub(add(memPos, and(add(length, 31), not(31))), memPos), 64)) } } revert(0, 0) diff --git a/test/cmdlineTests/mcopy_string_literal_returned_from_function/output b/test/cmdlineTests/mcopy_string_literal_returned_from_function/output index 02740ec0d6cb..548c34de8628 100644 --- a/test/cmdlineTests/mcopy_string_literal_returned_from_function/output +++ b/test/cmdlineTests/mcopy_string_literal_returned_from_function/output @@ -22,25 +22,24 @@ object "C_10" { { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let _2 := 64 - let newFreePtr := add(_1, _2) + let newFreePtr := add(_1, 64) if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, _1)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x41) revert(0, 0x24) } - mstore(_2, newFreePtr) + mstore(64, newFreePtr) mstore(_1, 25) - let _3 := add(_1, 0x20) - mstore(_3, "MCOPY on Cancun vacation.") - let memPos := mload(_2) - mstore(memPos, 0x20) + let _2 := add(_1, 32) + mstore(_2, "MCOPY on Cancun vacation.") + let memPos := mload(64) + mstore(memPos, 32) let length := mload(_1) - mstore(add(memPos, 0x20), length) - mcopy(add(memPos, _2), _3, length) - mstore(add(add(memPos, length), _2), 0) - return(memPos, add(sub(add(memPos, and(add(length, 31), not(31))), memPos), _2)) + mstore(add(memPos, 32), length) + mcopy(add(memPos, 64), _2, length) + mstore(add(add(memPos, length), 64), 0) + return(memPos, add(sub(add(memPos, and(add(length, 31), not(31))), memPos), 64)) } } revert(0, 0) diff --git a/test/cmdlineTests/name_simplifier/output b/test/cmdlineTests/name_simplifier/output index 0a461e3e4af4..04abaf600103 100644 --- a/test/cmdlineTests/name_simplifier/output +++ b/test/cmdlineTests/name_simplifier/output @@ -17,100 +17,104 @@ object "C_59" { code { { /// @src 0:346:625 "contract C {..." - let _1 := memoryguard(0x80) - let _2 := 4 - if iszero(lt(calldatasize(), _2)) + mstore(64, memoryguard(0x80)) + if iszero(lt(calldatasize(), 4)) { if eq(0xf8eddcc6, shr(224, calldataload(0))) { if callvalue() { revert(0, 0) } - let _3 := 32 - if slt(add(calldatasize(), not(3)), _3) { revert(0, 0) } - let offset := calldataload(_2) - let _4 := 0xffffffffffffffff - if gt(offset, _4) { revert(0, 0) } + if slt(add(calldatasize(), not(3)), 32) { revert(0, 0) } + let offset := calldataload(4) + if gt(offset, 0xffffffffffffffff) { revert(0, 0) } if iszero(slt(add(offset, 35), calldatasize())) { revert(0, 0) } - let _5 := calldataload(add(_2, offset)) - let _6 := 36 - if gt(_5, _4) + let length := calldataload(add(4, offset)) + if gt(length, 0xffffffffffffffff) { mstore(0, shl(224, 0x4e487b71)) - mstore(_2, 0x41) - revert(0, _6) + mstore(4, 0x41) + revert(0, 36) } - let _7 := shl(5, _5) - let _8 := not(31) - let newFreePtr := add(_1, and(add(_7, 63), _8)) - if or(gt(newFreePtr, _4), lt(newFreePtr, _1)) + let _1 := shl(5, length) + let memPtr := 0 + memPtr := mload(64) + let newFreePtr := add(memPtr, and(add(_1, 63), not(31))) + if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { mstore(0, shl(224, 0x4e487b71)) - mstore(_2, 0x41) - revert(0, _6) + mstore(4, 0x41) + revert(0, 36) } - let _9 := 64 - mstore(_9, newFreePtr) - let dst := _1 - mstore(_1, _5) - dst := add(_1, _3) + mstore(64, newFreePtr) + let dst := memPtr + mstore(memPtr, length) + dst := add(memPtr, 32) let dst_1 := dst - let srcEnd := add(add(offset, _7), _6) + let srcEnd := add(add(offset, _1), 36) if gt(srcEnd, calldatasize()) { revert(0, 0) } - let src := add(offset, _6) - for { } lt(src, srcEnd) { src := add(src, _3) } + let src := add(offset, 36) + for { } lt(src, srcEnd) { src := add(src, 32) } { - if slt(sub(calldatasize(), src), _3) { revert(0, 0) } - let memPtr := mload(_9) - let newFreePtr_1 := add(memPtr, _3) - if or(gt(newFreePtr_1, _4), lt(newFreePtr_1, memPtr)) + if slt(sub(calldatasize(), src), 32) { revert(0, 0) } + let memPtr_1 := 0 + memPtr_1 := mload(64) + let newFreePtr_1 := add(memPtr_1, 32) + if or(gt(newFreePtr_1, 0xffffffffffffffff), lt(newFreePtr_1, memPtr_1)) { mstore(0, shl(224, 0x4e487b71)) - mstore(_2, 0x41) - revert(0, _6) + mstore(4, 0x41) + revert(0, 36) } - mstore(_9, newFreePtr_1) - mstore(memPtr, calldataload(src)) - mstore(dst, memPtr) - dst := add(dst, _3) + mstore(64, newFreePtr_1) + mstore(memPtr_1, calldataload(src)) + mstore(dst, memPtr_1) + dst := add(dst, 32) } - if iszero(mload(_1)) + /// @src 0:469:474 "_s[0]" + let addr := /** @src 0:346:625 "contract C {..." */ 0 + if iszero(mload(memPtr)) { mstore(0, shl(224, 0x4e487b71)) - mstore(_2, 0x32) - revert(0, _6) + mstore(4, 0x32) + revert(0, 36) } + addr := dst_1 sstore(0, mload(/** @src 0:469:474 "_s[0]" */ mload(dst_1))) - /// @src 0:346:625 "contract C {..." - if iszero(lt(/** @src 0:492:493 "1" */ 0x01, /** @src 0:346:625 "contract C {..." */ mload(_1))) + /// @src 0:489:494 "_s[1]" + let addr_1 := /** @src 0:346:625 "contract C {..." */ 0 + if iszero(lt(/** @src 0:492:493 "1" */ 0x01, /** @src 0:346:625 "contract C {..." */ mload(memPtr))) { mstore(0, shl(224, 0x4e487b71)) - mstore(_2, 0x32) - revert(0, _6) + mstore(4, 0x32) + revert(0, 36) } - let _10 := mload(/** @src 0:489:494 "_s[1]" */ mload(/** @src 0:346:625 "contract C {..." */ add(_1, _9))) - sstore(0x02, _10) - let memPtr_1 := mload(_9) - let newFreePtr_2 := add(memPtr_1, 160) - if or(gt(newFreePtr_2, _4), lt(newFreePtr_2, memPtr_1)) + addr_1 := add(memPtr, 64) + let _2 := mload(/** @src 0:489:494 "_s[1]" */ mload(addr_1)) + /// @src 0:346:625 "contract C {..." + sstore(0x02, _2) + let memPtr_2 := 0 + memPtr_2 := mload(64) + let newFreePtr_2 := add(memPtr_2, 160) + if or(gt(newFreePtr_2, 0xffffffffffffffff), lt(newFreePtr_2, memPtr_2)) { mstore(0, shl(224, 0x4e487b71)) - mstore(_2, 0x41) - revert(0, _6) + mstore(4, 0x41) + revert(0, 36) } - mstore(_9, newFreePtr_2) - mstore(memPtr_1, 100) - let _11 := add(memPtr_1, _3) - mstore(_11, "longstringlongstringlongstringlo") - mstore(add(memPtr_1, _9), "ngstringlongstringlongstringlong") - mstore(add(memPtr_1, 96), "stringlongstringlongstringlongst") - mstore(add(memPtr_1, 128), "ring") - let memPos := mload(_9) - mstore(memPos, _10) - mstore(add(memPos, _3), _9) - let length := mload(memPtr_1) - mstore(add(memPos, _9), length) - mcopy(add(memPos, 96), _11, length) - mstore(add(add(memPos, length), 96), 0) - return(memPos, add(sub(add(memPos, and(add(length, 31), _8)), memPos), 96)) + mstore(64, newFreePtr_2) + mstore(memPtr_2, 100) + let _3 := add(memPtr_2, 32) + mstore(_3, "longstringlongstringlongstringlo") + mstore(add(memPtr_2, 64), "ngstringlongstringlongstringlong") + mstore(add(memPtr_2, 96), "stringlongstringlongstringlongst") + mstore(add(memPtr_2, 128), "ring") + let memPos := mload(64) + mstore(memPos, _2) + mstore(add(memPos, 32), 64) + let length_1 := mload(memPtr_2) + mstore(add(memPos, 64), length_1) + mcopy(add(memPos, 96), _3, length_1) + mstore(add(add(memPos, length_1), 96), 0) + return(memPos, add(sub(add(memPos, and(add(length_1, 0x1f), not(31))), memPos), 96)) } } revert(0, 0) diff --git a/test/cmdlineTests/optimizer_array_sload/output b/test/cmdlineTests/optimizer_array_sload/output index b32d421d0717..c1e0796f56fa 100644 --- a/test/cmdlineTests/optimizer_array_sload/output +++ b/test/cmdlineTests/optimizer_array_sload/output @@ -18,7 +18,6 @@ object "Arraysum_34" { { /// @src 0:80:429 "contract Arraysum {..." mstore(64, memoryguard(0x80)) - let _1 := 4 if iszero(lt(calldatasize(), 4)) { if eq(0x81d73423, shr(224, calldataload(0))) @@ -26,12 +25,14 @@ object "Arraysum_34" { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } let var_sum := 0 + /// @src 0:175:182 "sum = 0" + var_sum := /** @src 0:80:429 "contract Arraysum {..." */ 0 /// @src 0:368:378 "uint i = 0" let var_i := /** @src 0:80:429 "contract Arraysum {..." */ 0 - let _2 := sload(0) + let _1 := sload(0) /// @src 0:364:423 "for(uint i = 0; i < values.length; i++)..." for { } - /** @src 0:380:397 "i < values.length" */ lt(var_i, _2) + /** @src 0:80:429 "contract Arraysum {..." */ 1 /// @src 0:368:378 "uint i = 0" { /// @src 0:399:402 "i++" @@ -39,13 +40,17 @@ object "Arraysum_34" { } /// @src 0:399:402 "i++" { + /// @src 0:380:397 "i < values.length" + let _2 := iszero(lt(var_i, _1)) + if _2 { break } /// @src 0:80:429 "contract Arraysum {..." + _2 := 0 mstore(0, 0) let sum := add(var_sum, sload(add(18569430475105882587588266137607568536673111973893317399460219858819262702947, var_i))) if gt(var_sum, sum) { mstore(0, shl(224, 0x4e487b71)) - mstore(_1, 0x11) + mstore(4, 0x11) revert(0, 0x24) } /// @src 0:407:423 "sum += values[i]" @@ -54,7 +59,7 @@ object "Arraysum_34" { /// @src 0:80:429 "contract Arraysum {..." let memPos := mload(64) mstore(memPos, var_sum) - return(memPos, 32) + return(memPos, 0x20) } } revert(0, 0) diff --git a/test/cmdlineTests/optimizer_user_yul/output b/test/cmdlineTests/optimizer_user_yul/output index 602a7de95b96..689e82ddb4e4 100644 --- a/test/cmdlineTests/optimizer_user_yul/output +++ b/test/cmdlineTests/optimizer_user_yul/output @@ -42,7 +42,6 @@ tag_5: /* "optimizer_user_yul/input.sol":263:269 a := 2 */ swap1 pop - 0x00 /* "optimizer_user_yul/input.sol":369:370 3 */ 0x03 /* "optimizer_user_yul/input.sol":366:367 2 */ @@ -59,18 +58,10 @@ tag_6: /* "optimizer_user_yul/input.sol":384:392 sload(5) */ dup1 /* "optimizer_user_yul/input.sol":376:509 for { } sload(5) { } {... */ - tag_8 + iszero + tag_6 jumpi - /* "optimizer_user_yul/input.sol":495:504 exp(x, y) */ - 0x01 - /* "optimizer_user_yul/input.sol":490:504 z := exp(x, y) */ - swap2 - pop - /* "optimizer_user_yul/input.sol":376:509 for { } sload(5) { } {... */ - jump(tag_6) -tag_8: /* "optimizer_user_yul/input.sol":380:383 { } */ - pop pop /* "optimizer_user_yul/input.sol":340:513 {... */ pop diff --git a/test/cmdlineTests/standard_debug_info_in_evm_asm_via_ir_location/output.json b/test/cmdlineTests/standard_debug_info_in_evm_asm_via_ir_location/output.json index 642d07f49af2..4ef3c6df1873 100644 --- a/test/cmdlineTests/standard_debug_info_in_evm_asm_via_ir_location/output.json +++ b/test/cmdlineTests/standard_debug_info_in_evm_asm_via_ir_location/output.json @@ -76,25 +76,18 @@ stop sub_0: assembly { /* \"C\":79:503 contract C... */ - 0x80 - 0x40 - swap1 - dup1 - dup3 - mstore + mstore(0x40, 0x80) jumpi(tag_2, iszero(lt(calldatasize, 0x04))) 0x00 dup1 revert tag_2: shr(0xe0, calldataload(0x00)) - swap1 - dup2 + dup1 0x26121ff0 eq tag_4 jumpi - pop dup1 0x793816ec eq @@ -122,19 +115,17 @@ sub_0: assembly { dup2 swap1 sstore - dup2 - mload + mload(0x40) shl(0xe4, 0x026121ff) /* \"C\":475:483 this.f() */ dup2 mstore /* \"C\":79:503 contract C... */ - swap2 swap1 /* \"C\":475:483 this.f() */ 0x20 /* \"C\":79:503 contract C... */ - dup4 + dup3 0x04 dup2 /* \"C\":475:479 this */ @@ -142,50 +133,46 @@ sub_0: assembly { /* \"C\":475:483 this.f() */ gas staticcall - swap3 - dup4 + swap2 + dup3 iszero tag_16 jumpi /* \"C\":79:503 contract C... */ 0x00 /* \"C\":475:483 this.f() */ - swap4 + swap3 tag_18 jumpi /* \"C\":79:503 contract C... */ tag_19: - /* \"C\":464:483 stateVar + this.f() */ - pop - tag_20 /* \"C\":475:483 this.f() */ 0x20 - /* \"C\":464:483 stateVar + this.f() */ - swap4 /* \"C\":464:494 stateVar + this.f() + immutVar */ - tag_21 + tag_20 /* \"C\":464:483 stateVar + this.f() */ - swap3 + tag_21 + dup6 + dup6 tag_1 jump\t// in - tag_20: + tag_21: /* \"C\":486:494 immutVar */ immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\") /* \"C\":464:494 stateVar + this.f() + immutVar */ swap1 tag_1 jump\t// in - tag_21: + tag_20: /* \"C\":79:503 contract C... */ - swap1 - mload + mload(0x40) swap1 dup2 mstore return /* \"C\":475:483 this.f() */ tag_18: - swap3 + swap2 pop 0x20 jumpi(tag_22, gt(0x20, returndatasize)) @@ -196,12 +183,12 @@ sub_0: assembly { add not(0x1f) and - dup5 + dup4 add 0xffffffffffffffff dup2 gt - dup6 + dup5 dup3 lt or @@ -211,9 +198,9 @@ sub_0: assembly { 0x20 /* \"C\":79:503 contract C... */ swap2 - dup6 + dup5 swap2 - dup6 + 0x40 mstore /* \"C\":475:483 this.f() */ dup2 @@ -223,11 +210,11 @@ sub_0: assembly { slt tag_26 jumpi - swap2 + swap1 mload - swap2 + swap1 /* \"C\":464:483 stateVar + this.f() */ - tag_20 + tag_21 /* \"C\":475:483 this.f() */ jump(tag_19) /* \"C\":79:503 contract C... */ @@ -250,8 +237,7 @@ sub_0: assembly { jump(tag_23) tag_16: /* \"C\":79:503 contract C... */ - dup3 - mload + mload(0x40) returndatasize 0x00 dup3 @@ -278,14 +264,11 @@ sub_0: assembly { revert /* \"C\":79:503 contract C... */ tag_6: - pop jumpi(tag_26, callvalue) jumpi(tag_26, slt(add(not(0x03), calldatasize), 0x00)) 0x20 - swap1 sload(0x00) - swap1 - mload + mload(0x40) swap1 dup2 mstore @@ -296,12 +279,11 @@ sub_0: assembly { /* \"C\":326:334 immutVar */ immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\") /* \"C\":120:122 41 */ - swap1 - dup2 + dup1 0x29 add - swap2 - dup3 + swap1 + dup2 slt 0x01 and @@ -309,7 +291,9 @@ sub_0: assembly { jumpi /* \"C\":79:503 contract C... */ 0x20 - swap2 + swap1 + mload(0x40) + swap1 dup2 mstore return @@ -438,25 +422,18 @@ stop sub_0: assembly { /* \"D\":91:181 contract D is C(3)... */ - 0x80 - 0x40 - swap1 - dup1 - dup3 - mstore + mstore(0x40, 0x80) jumpi(tag_2, iszero(lt(calldatasize, 0x04))) 0x00 dup1 revert tag_2: shr(0xe0, calldataload(0x00)) - swap1 - dup2 + dup1 0x26121ff0 eq tag_4 jumpi - pop dup1 0x793816ec eq @@ -484,19 +461,17 @@ sub_0: assembly { dup2 swap1 sstore - dup2 - mload + mload(0x40) shl(0xe4, 0x026121ff) /* \"C\":475:483 this.f() */ dup2 mstore /* \"D\":91:181 contract D is C(3)... */ - swap2 swap1 /* \"C\":475:483 this.f() */ 0x20 /* \"D\":91:181 contract D is C(3)... */ - dup4 + dup3 0x04 dup2 /* \"C\":475:479 this */ @@ -504,50 +479,46 @@ sub_0: assembly { /* \"C\":475:483 this.f() */ gas staticcall - swap3 - dup4 + swap2 + dup3 iszero tag_16 jumpi /* \"D\":91:181 contract D is C(3)... */ 0x00 /* \"C\":475:483 this.f() */ - swap4 + swap3 tag_18 jumpi /* \"D\":91:181 contract D is C(3)... */ tag_19: - /* \"C\":464:483 stateVar + this.f() */ - pop - tag_20 /* \"C\":475:483 this.f() */ 0x20 - /* \"C\":464:483 stateVar + this.f() */ - swap4 /* \"C\":464:494 stateVar + this.f() + immutVar */ - tag_21 + tag_20 /* \"C\":464:483 stateVar + this.f() */ - swap3 + tag_21 + dup6 + dup6 tag_1 jump\t// in - tag_20: + tag_21: /* \"C\":486:494 immutVar */ immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\") /* \"C\":464:494 stateVar + this.f() + immutVar */ swap1 tag_1 jump\t// in - tag_21: + tag_20: /* \"D\":91:181 contract D is C(3)... */ - swap1 - mload + mload(0x40) swap1 dup2 mstore return /* \"C\":475:483 this.f() */ tag_18: - swap3 + swap2 pop 0x20 jumpi(tag_22, gt(0x20, returndatasize)) @@ -558,12 +529,12 @@ sub_0: assembly { add not(0x1f) and - dup5 + dup4 add 0xffffffffffffffff dup2 gt - dup6 + dup5 dup3 lt or @@ -573,9 +544,9 @@ sub_0: assembly { 0x20 /* \"D\":91:181 contract D is C(3)... */ swap2 - dup6 + dup5 swap2 - dup6 + 0x40 mstore /* \"C\":475:483 this.f() */ dup2 @@ -585,11 +556,11 @@ sub_0: assembly { slt tag_26 jumpi - swap2 + swap1 mload - swap2 + swap1 /* \"C\":464:483 stateVar + this.f() */ - tag_20 + tag_21 /* \"C\":475:483 this.f() */ jump(tag_19) /* \"D\":91:181 contract D is C(3)... */ @@ -612,8 +583,7 @@ sub_0: assembly { jump(tag_23) tag_16: /* \"D\":91:181 contract D is C(3)... */ - dup3 - mload + mload(0x40) returndatasize 0x00 dup3 @@ -640,14 +610,11 @@ sub_0: assembly { revert /* \"D\":91:181 contract D is C(3)... */ tag_6: - pop jumpi(tag_26, callvalue) jumpi(tag_26, slt(add(not(0x03), calldatasize), 0x00)) 0x20 - swap1 sload(0x00) - swap1 - mload + mload(0x40) swap1 dup2 mstore @@ -658,12 +625,11 @@ sub_0: assembly { /* \"C\":326:334 immutVar */ immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\") /* \"C\":120:122 41 */ - swap1 - dup2 + dup1 0x29 add - swap2 - dup3 + swap1 + dup2 slt 0x01 and @@ -671,7 +637,9 @@ sub_0: assembly { jumpi /* \"D\":91:181 contract D is C(3)... */ 0x20 - swap2 + swap1 + mload(0x40) + swap1 dup2 mstore return diff --git a/test/cmdlineTests/standard_debug_info_in_yul_location/output.json b/test/cmdlineTests/standard_debug_info_in_yul_location/output.json index 3e687cc1a0fc..8f0d5b5b5d6d 100644 --- a/test/cmdlineTests/standard_debug_info_in_yul_location/output.json +++ b/test/cmdlineTests/standard_debug_info_in_yul_location/output.json @@ -650,9 +650,7 @@ object \"C_54\" { code { { /// @src 0:79:510 \"contract C...\" - let _1 := memoryguard(0x80) - let _2 := 64 - mstore(_2, _1) + mstore(64, memoryguard(0x80)) if iszero(lt(calldatasize(), 4)) { switch shr(224, calldataload(0)) @@ -660,89 +658,91 @@ object \"C_54\" { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } /// @src 0:333:341 \"immutVar\" - let _3 := loadimmutable(\"8\") - /// @src 0:79:510 \"contract C...\" - let sum := add(/** @src 0:127:129 \"41\" */ 0x29, /** @src 0:79:510 \"contract C...\" */ _3) - if and(1, slt(sum, _3)) + let _1 := loadimmutable(\"8\") + /// @src 0:322:341 \"constVar + immutVar\" + let sum := /** @src 0:79:510 \"contract C...\" */ 0 + sum := add(/** @src 0:127:129 \"41\" */ 0x29, /** @src 0:79:510 \"contract C...\" */ _1) + if and(1, slt(sum, _1)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x11) revert(0, 0x24) } - mstore(_1, sum) - return(_1, 32) + let memPos := mload(64) + mstore(memPos, sum) + return(memPos, 32) } case 0x793816ec { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let _4 := sload(0) - let memPos := mload(_2) - mstore(memPos, _4) - return(memPos, 32) + let _2 := sload(0) + let memPos_1 := mload(64) + mstore(memPos_1, _2) + return(memPos_1, 32) } case 0x9942ec6f { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let _5 := sload(0) - if eq(_5, sub(shl(255, 1), 1)) + let _3 := sload(0) + if eq(_3, sub(shl(255, 1), 1)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x11) revert(0, 0x24) } - let ret := add(_5, 1) + let ret := add(_3, 1) sstore(0, ret) /// @src 0:482:490 \"this.f()\" - let _6 := /** @src 0:79:510 \"contract C...\" */ mload(_2) + let _4 := /** @src 0:79:510 \"contract C...\" */ mload(64) /// @src 0:482:490 \"this.f()\" - mstore(_6, /** @src 0:79:510 \"contract C...\" */ shl(228, 0x026121ff)) + mstore(_4, /** @src 0:79:510 \"contract C...\" */ shl(228, 0x026121ff)) /// @src 0:482:490 \"this.f()\" - let _7 := staticcall(gas(), /** @src 0:482:486 \"this\" */ address(), /** @src 0:482:490 \"this.f()\" */ _6, /** @src 0:79:510 \"contract C...\" */ 4, /** @src 0:482:490 \"this.f()\" */ _6, 32) - if iszero(_7) + let _5 := staticcall(gas(), /** @src 0:482:486 \"this\" */ address(), /** @src 0:482:490 \"this.f()\" */ _4, /** @src 0:79:510 \"contract C...\" */ 4, /** @src 0:482:490 \"this.f()\" */ _4, 32) + if iszero(_5) { /// @src 0:79:510 \"contract C...\" - let pos := mload(_2) + let pos := mload(64) returndatacopy(pos, 0, returndatasize()) revert(pos, returndatasize()) } /// @src 0:482:490 \"this.f()\" let expr := /** @src 0:79:510 \"contract C...\" */ 0 /// @src 0:482:490 \"this.f()\" - if _7 + if _5 { - let _8 := 32 - if gt(32, returndatasize()) { _8 := returndatasize() } + let _6 := 32 + if gt(32, returndatasize()) { _6 := returndatasize() } /// @src 0:79:510 \"contract C...\" - let newFreePtr := add(_6, and(add(_8, 31), not(31))) - if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, _6)) + let newFreePtr := add(_4, and(add(_6, 31), not(31))) + if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, _4)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x41) revert(0, 0x24) } - mstore(_2, newFreePtr) - if slt(sub(/** @src 0:482:490 \"this.f()\" */ add(_6, _8), /** @src 0:79:510 \"contract C...\" */ _6), /** @src 0:482:490 \"this.f()\" */ 32) + mstore(64, newFreePtr) + if slt(sub(/** @src 0:482:490 \"this.f()\" */ add(_4, _6), /** @src 0:79:510 \"contract C...\" */ _4), /** @src 0:482:490 \"this.f()\" */ 32) /// @src 0:79:510 \"contract C...\" { revert(0, 0) } /// @src 0:482:490 \"this.f()\" - expr := /** @src 0:79:510 \"contract C...\" */ mload(_6) + expr := /** @src 0:79:510 \"contract C...\" */ mload(_4) } /// @src 0:471:490 \"stateVar + this.f()\" let expr_1 := checked_add_int256(ret, expr) /// @src 0:464:501 \"return stateVar + this.f() + immutVar\" let var := /** @src 0:471:501 \"stateVar + this.f() + immutVar\" */ checked_add_int256(expr_1, /** @src 0:493:501 \"immutVar\" */ loadimmutable(\"8\")) /// @src 0:79:510 \"contract C...\" - let memPos_1 := mload(_2) - mstore(memPos_1, var) - return(memPos_1, /** @src 0:482:490 \"this.f()\" */ 32) + let memPos_2 := mload(64) + mstore(memPos_2, var) + return(memPos_2, /** @src 0:482:490 \"this.f()\" */ 32) } case /** @src 0:79:510 \"contract C...\" */ 0xa00b982b { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let memPos_2 := mload(_2) - mstore(memPos_2, /** @src 0:127:129 \"41\" */ 0x29) + let memPos_3 := mload(64) + mstore(memPos_3, /** @src 0:127:129 \"41\" */ 0x29) /// @src 0:79:510 \"contract C...\" - return(memPos_2, 32) + return(memPos_3, 32) } } revert(0, 0) @@ -1493,9 +1493,7 @@ object \"D_72\" { code { { /// @src 1:91:181 \"contract D is C(3)...\" - let _1 := memoryguard(0x80) - let _2 := 64 - mstore(_2, _1) + mstore(64, memoryguard(0x80)) if iszero(lt(calldatasize(), 4)) { switch shr(224, calldataload(0)) @@ -1503,89 +1501,91 @@ object \"D_72\" { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } /// @src 0:333:341 \"immutVar\" - let _3 := loadimmutable(\"8\") - /// @src 1:91:181 \"contract D is C(3)...\" - let sum := add(/** @src 0:127:129 \"41\" */ 0x29, /** @src 1:91:181 \"contract D is C(3)...\" */ _3) - if and(1, slt(sum, _3)) + let _1 := loadimmutable(\"8\") + /// @src 0:322:341 \"constVar + immutVar\" + let sum := /** @src 1:91:181 \"contract D is C(3)...\" */ 0 + sum := add(/** @src 0:127:129 \"41\" */ 0x29, /** @src 1:91:181 \"contract D is C(3)...\" */ _1) + if and(1, slt(sum, _1)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x11) revert(0, 0x24) } - mstore(_1, sum) - return(_1, 32) + let memPos := mload(64) + mstore(memPos, sum) + return(memPos, 32) } case 0x793816ec { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let _4 := sload(0) - let memPos := mload(_2) - mstore(memPos, _4) - return(memPos, 32) + let _2 := sload(0) + let memPos_1 := mload(64) + mstore(memPos_1, _2) + return(memPos_1, 32) } case 0x9942ec6f { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let _5 := sload(0) - if eq(_5, sub(shl(255, 1), 1)) + let _3 := sload(0) + if eq(_3, sub(shl(255, 1), 1)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x11) revert(0, 0x24) } - let ret := add(_5, 1) + let ret := add(_3, 1) sstore(0, ret) /// @src 0:482:490 \"this.f()\" - let _6 := /** @src 1:91:181 \"contract D is C(3)...\" */ mload(_2) + let _4 := /** @src 1:91:181 \"contract D is C(3)...\" */ mload(64) /// @src 0:482:490 \"this.f()\" - mstore(_6, /** @src 1:91:181 \"contract D is C(3)...\" */ shl(228, 0x026121ff)) + mstore(_4, /** @src 1:91:181 \"contract D is C(3)...\" */ shl(228, 0x026121ff)) /// @src 0:482:490 \"this.f()\" - let _7 := staticcall(gas(), /** @src 0:482:486 \"this\" */ address(), /** @src 0:482:490 \"this.f()\" */ _6, /** @src 1:91:181 \"contract D is C(3)...\" */ 4, /** @src 0:482:490 \"this.f()\" */ _6, 32) - if iszero(_7) + let _5 := staticcall(gas(), /** @src 0:482:486 \"this\" */ address(), /** @src 0:482:490 \"this.f()\" */ _4, /** @src 1:91:181 \"contract D is C(3)...\" */ 4, /** @src 0:482:490 \"this.f()\" */ _4, 32) + if iszero(_5) { /// @src 1:91:181 \"contract D is C(3)...\" - let pos := mload(_2) + let pos := mload(64) returndatacopy(pos, 0, returndatasize()) revert(pos, returndatasize()) } /// @src 0:482:490 \"this.f()\" let expr := /** @src 1:91:181 \"contract D is C(3)...\" */ 0 /// @src 0:482:490 \"this.f()\" - if _7 + if _5 { - let _8 := 32 - if gt(32, returndatasize()) { _8 := returndatasize() } + let _6 := 32 + if gt(32, returndatasize()) { _6 := returndatasize() } /// @src 1:91:181 \"contract D is C(3)...\" - let newFreePtr := add(_6, and(add(_8, 31), not(31))) - if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, _6)) + let newFreePtr := add(_4, and(add(_6, 31), not(31))) + if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, _4)) { mstore(0, shl(224, 0x4e487b71)) mstore(4, 0x41) revert(0, 0x24) } - mstore(_2, newFreePtr) - if slt(sub(/** @src 0:482:490 \"this.f()\" */ add(_6, _8), /** @src 1:91:181 \"contract D is C(3)...\" */ _6), /** @src 0:482:490 \"this.f()\" */ 32) + mstore(64, newFreePtr) + if slt(sub(/** @src 0:482:490 \"this.f()\" */ add(_4, _6), /** @src 1:91:181 \"contract D is C(3)...\" */ _4), /** @src 0:482:490 \"this.f()\" */ 32) /// @src 1:91:181 \"contract D is C(3)...\" { revert(0, 0) } /// @src 0:482:490 \"this.f()\" - expr := /** @src 1:91:181 \"contract D is C(3)...\" */ mload(_6) + expr := /** @src 1:91:181 \"contract D is C(3)...\" */ mload(_4) } /// @src 0:471:490 \"stateVar + this.f()\" let expr_1 := checked_add_int256(ret, expr) /// @src 0:464:501 \"return stateVar + this.f() + immutVar\" let var := /** @src 0:471:501 \"stateVar + this.f() + immutVar\" */ checked_add_int256(expr_1, /** @src 0:493:501 \"immutVar\" */ loadimmutable(\"8\")) /// @src 1:91:181 \"contract D is C(3)...\" - let memPos_1 := mload(_2) - mstore(memPos_1, var) - return(memPos_1, /** @src 0:482:490 \"this.f()\" */ 32) + let memPos_2 := mload(64) + mstore(memPos_2, var) + return(memPos_2, /** @src 0:482:490 \"this.f()\" */ 32) } case /** @src 1:91:181 \"contract D is C(3)...\" */ 0xa00b982b { if callvalue() { revert(0, 0) } if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) } - let memPos_2 := mload(_2) - mstore(memPos_2, /** @src 0:127:129 \"41\" */ 0x29) + let memPos_3 := mload(64) + mstore(memPos_3, /** @src 0:127:129 \"41\" */ 0x29) /// @src 1:91:181 \"contract D is C(3)...\" - return(memPos_2, 32) + return(memPos_3, 32) } } revert(0, 0) diff --git a/test/cmdlineTests/standard_optimizer_generatedSources/output.json b/test/cmdlineTests/standard_optimizer_generatedSources/output.json index 0f8c3d4eae55..e5b276b1b9b6 100644 --- a/test/cmdlineTests/standard_optimizer_generatedSources/output.json +++ b/test/cmdlineTests/standard_optimizer_generatedSources/output.json @@ -11,9 +11,9 @@ "generatedSources": [ { "ast": { - "nativeSrc": "0:1445:1", + "nativeSrc": "0:1505:1", "nodeType": "YulBlock", - "src": "0:1445:1", + "src": "0:1505:1", "statements": [ { "nativeSrc": "6:3:1", @@ -159,71 +159,49 @@ }, { "body": { - "nativeSrc": "241:1020:1", + "nativeSrc": "241:1080:1", "nodeType": "YulBlock", - "src": "241:1020:1", + "src": "241:1080:1", "statements": [ - { - "nativeSrc": "251:12:1", - "nodeType": "YulVariableDeclaration", - "src": "251:12:1", - "value": { - "kind": "number", - "nativeSrc": "261:2:1", - "nodeType": "YulLiteral", - "src": "261:2:1", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "255:2:1", - "nodeType": "YulTypedName", - "src": "255:2:1", - "type": "" - } - ] - }, { "body": { - "nativeSrc": "308:16:1", + "nativeSrc": "287:16:1", "nodeType": "YulBlock", - "src": "308:16:1", + "src": "287:16:1", "statements": [ { "expression": { "arguments": [ { "kind": "number", - "nativeSrc": "317:1:1", + "nativeSrc": "296:1:1", "nodeType": "YulLiteral", - "src": "317:1:1", + "src": "296:1:1", "type": "", "value": "0" }, { "kind": "number", - "nativeSrc": "320:1:1", + "nativeSrc": "299:1:1", "nodeType": "YulLiteral", - "src": "320:1:1", + "src": "299:1:1", "type": "", "value": "0" } ], "functionName": { "name": "revert", - "nativeSrc": "310:6:1", + "nativeSrc": "289:6:1", "nodeType": "YulIdentifier", - "src": "310:6:1" + "src": "289:6:1" }, - "nativeSrc": "310:12:1", + "nativeSrc": "289:12:1", "nodeType": "YulFunctionCall", - "src": "310:12:1" + "src": "289:12:1" }, - "nativeSrc": "310:12:1", + "nativeSrc": "289:12:1", "nodeType": "YulExpressionStatement", - "src": "310:12:1" + "src": "289:12:1" } ] }, @@ -233,142 +211,122 @@ "arguments": [ { "name": "dataEnd", - "nativeSrc": "283:7:1", + "nativeSrc": "262:7:1", "nodeType": "YulIdentifier", - "src": "283:7:1" + "src": "262:7:1" }, { "name": "headStart", - "nativeSrc": "292:9:1", + "nativeSrc": "271:9:1", "nodeType": "YulIdentifier", - "src": "292:9:1" + "src": "271:9:1" } ], "functionName": { "name": "sub", - "nativeSrc": "279:3:1", + "nativeSrc": "258:3:1", "nodeType": "YulIdentifier", - "src": "279:3:1" + "src": "258:3:1" }, - "nativeSrc": "279:23:1", + "nativeSrc": "258:23:1", "nodeType": "YulFunctionCall", - "src": "279:23:1" + "src": "258:23:1" }, { - "name": "_1", - "nativeSrc": "304:2:1", - "nodeType": "YulIdentifier", - "src": "304:2:1" + "kind": "number", + "nativeSrc": "283:2:1", + "nodeType": "YulLiteral", + "src": "283:2:1", + "type": "", + "value": "32" } ], "functionName": { "name": "slt", - "nativeSrc": "275:3:1", + "nativeSrc": "254:3:1", "nodeType": "YulIdentifier", - "src": "275:3:1" + "src": "254:3:1" }, - "nativeSrc": "275:32:1", + "nativeSrc": "254:32:1", "nodeType": "YulFunctionCall", - "src": "275:32:1" + "src": "254:32:1" }, - "nativeSrc": "272:52:1", + "nativeSrc": "251:52:1", "nodeType": "YulIf", - "src": "272:52:1" + "src": "251:52:1" }, { - "nativeSrc": "333:37:1", + "nativeSrc": "312:37:1", "nodeType": "YulVariableDeclaration", - "src": "333:37:1", + "src": "312:37:1", "value": { "arguments": [ { "name": "headStart", - "nativeSrc": "360:9:1", + "nativeSrc": "339:9:1", "nodeType": "YulIdentifier", - "src": "360:9:1" + "src": "339:9:1" } ], "functionName": { "name": "calldataload", - "nativeSrc": "347:12:1", + "nativeSrc": "326:12:1", "nodeType": "YulIdentifier", - "src": "347:12:1" + "src": "326:12:1" }, - "nativeSrc": "347:23:1", + "nativeSrc": "326:23:1", "nodeType": "YulFunctionCall", - "src": "347:23:1" + "src": "326:23:1" }, "variables": [ { "name": "offset", - "nativeSrc": "337:6:1", - "nodeType": "YulTypedName", - "src": "337:6:1", - "type": "" - } - ] - }, - { - "nativeSrc": "379:28:1", - "nodeType": "YulVariableDeclaration", - "src": "379:28:1", - "value": { - "kind": "number", - "nativeSrc": "389:18:1", - "nodeType": "YulLiteral", - "src": "389:18:1", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "383:2:1", + "nativeSrc": "316:6:1", "nodeType": "YulTypedName", - "src": "383:2:1", + "src": "316:6:1", "type": "" } ] }, { "body": { - "nativeSrc": "434:16:1", + "nativeSrc": "392:16:1", "nodeType": "YulBlock", - "src": "434:16:1", + "src": "392:16:1", "statements": [ { "expression": { "arguments": [ { "kind": "number", - "nativeSrc": "443:1:1", + "nativeSrc": "401:1:1", "nodeType": "YulLiteral", - "src": "443:1:1", + "src": "401:1:1", "type": "", "value": "0" }, { "kind": "number", - "nativeSrc": "446:1:1", + "nativeSrc": "404:1:1", "nodeType": "YulLiteral", - "src": "446:1:1", + "src": "404:1:1", "type": "", "value": "0" } ], "functionName": { "name": "revert", - "nativeSrc": "436:6:1", + "nativeSrc": "394:6:1", "nodeType": "YulIdentifier", - "src": "436:6:1" + "src": "394:6:1" }, - "nativeSrc": "436:12:1", + "nativeSrc": "394:12:1", "nodeType": "YulFunctionCall", - "src": "436:12:1" + "src": "394:12:1" }, - "nativeSrc": "436:12:1", + "nativeSrc": "394:12:1", "nodeType": "YulExpressionStatement", - "src": "436:12:1" + "src": "394:12:1" } ] }, @@ -376,109 +334,111 @@ "arguments": [ { "name": "offset", - "nativeSrc": "422:6:1", + "nativeSrc": "364:6:1", "nodeType": "YulIdentifier", - "src": "422:6:1" + "src": "364:6:1" }, { - "name": "_2", - "nativeSrc": "430:2:1", - "nodeType": "YulIdentifier", - "src": "430:2:1" + "kind": "number", + "nativeSrc": "372:18:1", + "nodeType": "YulLiteral", + "src": "372:18:1", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { "name": "gt", - "nativeSrc": "419:2:1", + "nativeSrc": "361:2:1", "nodeType": "YulIdentifier", - "src": "419:2:1" + "src": "361:2:1" }, - "nativeSrc": "419:14:1", + "nativeSrc": "361:30:1", "nodeType": "YulFunctionCall", - "src": "419:14:1" + "src": "361:30:1" }, - "nativeSrc": "416:34:1", + "nativeSrc": "358:50:1", "nodeType": "YulIf", - "src": "416:34:1" + "src": "358:50:1" }, { - "nativeSrc": "459:32:1", + "nativeSrc": "417:32:1", "nodeType": "YulVariableDeclaration", - "src": "459:32:1", + "src": "417:32:1", "value": { "arguments": [ { "name": "headStart", - "nativeSrc": "473:9:1", + "nativeSrc": "431:9:1", "nodeType": "YulIdentifier", - "src": "473:9:1" + "src": "431:9:1" }, { "name": "offset", - "nativeSrc": "484:6:1", + "nativeSrc": "442:6:1", "nodeType": "YulIdentifier", - "src": "484:6:1" + "src": "442:6:1" } ], "functionName": { "name": "add", - "nativeSrc": "469:3:1", + "nativeSrc": "427:3:1", "nodeType": "YulIdentifier", - "src": "469:3:1" + "src": "427:3:1" }, - "nativeSrc": "469:22:1", + "nativeSrc": "427:22:1", "nodeType": "YulFunctionCall", - "src": "469:22:1" + "src": "427:22:1" }, "variables": [ { - "name": "_3", - "nativeSrc": "463:2:1", + "name": "_1", + "nativeSrc": "421:2:1", "nodeType": "YulTypedName", - "src": "463:2:1", + "src": "421:2:1", "type": "" } ] }, { "body": { - "nativeSrc": "539:16:1", + "nativeSrc": "497:16:1", "nodeType": "YulBlock", - "src": "539:16:1", + "src": "497:16:1", "statements": [ { "expression": { "arguments": [ { "kind": "number", - "nativeSrc": "548:1:1", + "nativeSrc": "506:1:1", "nodeType": "YulLiteral", - "src": "548:1:1", + "src": "506:1:1", "type": "", "value": "0" }, { "kind": "number", - "nativeSrc": "551:1:1", + "nativeSrc": "509:1:1", "nodeType": "YulLiteral", - "src": "551:1:1", + "src": "509:1:1", "type": "", "value": "0" } ], "functionName": { "name": "revert", - "nativeSrc": "541:6:1", + "nativeSrc": "499:6:1", "nodeType": "YulIdentifier", - "src": "541:6:1" + "src": "499:6:1" }, - "nativeSrc": "541:12:1", + "nativeSrc": "499:12:1", "nodeType": "YulFunctionCall", - "src": "541:12:1" + "src": "499:12:1" }, - "nativeSrc": "541:12:1", + "nativeSrc": "499:12:1", "nodeType": "YulExpressionStatement", - "src": "541:12:1" + "src": "499:12:1" } ] }, @@ -489,341 +449,343 @@ { "arguments": [ { - "name": "_3", - "nativeSrc": "518:2:1", + "name": "_1", + "nativeSrc": "476:2:1", "nodeType": "YulIdentifier", - "src": "518:2:1" + "src": "476:2:1" }, { "kind": "number", - "nativeSrc": "522:4:1", + "nativeSrc": "480:4:1", "nodeType": "YulLiteral", - "src": "522:4:1", + "src": "480:4:1", "type": "", "value": "0x1f" } ], "functionName": { "name": "add", - "nativeSrc": "514:3:1", + "nativeSrc": "472:3:1", "nodeType": "YulIdentifier", - "src": "514:3:1" + "src": "472:3:1" }, - "nativeSrc": "514:13:1", + "nativeSrc": "472:13:1", "nodeType": "YulFunctionCall", - "src": "514:13:1" + "src": "472:13:1" }, { "name": "dataEnd", - "nativeSrc": "529:7:1", + "nativeSrc": "487:7:1", "nodeType": "YulIdentifier", - "src": "529:7:1" + "src": "487:7:1" } ], "functionName": { "name": "slt", - "nativeSrc": "510:3:1", + "nativeSrc": "468:3:1", "nodeType": "YulIdentifier", - "src": "510:3:1" + "src": "468:3:1" }, - "nativeSrc": "510:27:1", + "nativeSrc": "468:27:1", "nodeType": "YulFunctionCall", - "src": "510:27:1" + "src": "468:27:1" } ], "functionName": { "name": "iszero", - "nativeSrc": "503:6:1", + "nativeSrc": "461:6:1", "nodeType": "YulIdentifier", - "src": "503:6:1" + "src": "461:6:1" }, - "nativeSrc": "503:35:1", + "nativeSrc": "461:35:1", "nodeType": "YulFunctionCall", - "src": "503:35:1" + "src": "461:35:1" }, - "nativeSrc": "500:55:1", + "nativeSrc": "458:55:1", "nodeType": "YulIf", - "src": "500:55:1" + "src": "458:55:1" }, { - "nativeSrc": "564:26:1", + "nativeSrc": "522:30:1", "nodeType": "YulVariableDeclaration", - "src": "564:26:1", + "src": "522:30:1", "value": { "arguments": [ { - "name": "_3", - "nativeSrc": "587:2:1", + "name": "_1", + "nativeSrc": "549:2:1", "nodeType": "YulIdentifier", - "src": "587:2:1" + "src": "549:2:1" } ], "functionName": { "name": "calldataload", - "nativeSrc": "574:12:1", + "nativeSrc": "536:12:1", "nodeType": "YulIdentifier", - "src": "574:12:1" + "src": "536:12:1" }, - "nativeSrc": "574:16:1", + "nativeSrc": "536:16:1", "nodeType": "YulFunctionCall", - "src": "574:16:1" + "src": "536:16:1" }, "variables": [ { - "name": "_4", - "nativeSrc": "568:2:1", + "name": "length", + "nativeSrc": "526:6:1", "nodeType": "YulTypedName", - "src": "568:2:1", + "src": "526:6:1", "type": "" } ] }, { "body": { - "nativeSrc": "613:22:1", + "nativeSrc": "595:22:1", "nodeType": "YulBlock", - "src": "613:22:1", + "src": "595:22:1", "statements": [ { "expression": { "arguments": [], "functionName": { "name": "panic_error_0x41", - "nativeSrc": "615:16:1", + "nativeSrc": "597:16:1", "nodeType": "YulIdentifier", - "src": "615:16:1" + "src": "597:16:1" }, - "nativeSrc": "615:18:1", + "nativeSrc": "597:18:1", "nodeType": "YulFunctionCall", - "src": "615:18:1" + "src": "597:18:1" }, - "nativeSrc": "615:18:1", + "nativeSrc": "597:18:1", "nodeType": "YulExpressionStatement", - "src": "615:18:1" + "src": "597:18:1" } ] }, "condition": { "arguments": [ { - "name": "_4", - "nativeSrc": "605:2:1", + "name": "length", + "nativeSrc": "567:6:1", "nodeType": "YulIdentifier", - "src": "605:2:1" + "src": "567:6:1" }, { - "name": "_2", - "nativeSrc": "609:2:1", - "nodeType": "YulIdentifier", - "src": "609:2:1" + "kind": "number", + "nativeSrc": "575:18:1", + "nodeType": "YulLiteral", + "src": "575:18:1", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { "name": "gt", - "nativeSrc": "602:2:1", + "nativeSrc": "564:2:1", "nodeType": "YulIdentifier", - "src": "602:2:1" + "src": "564:2:1" }, - "nativeSrc": "602:10:1", + "nativeSrc": "564:30:1", "nodeType": "YulFunctionCall", - "src": "602:10:1" + "src": "564:30:1" }, - "nativeSrc": "599:36:1", + "nativeSrc": "561:56:1", "nodeType": "YulIf", - "src": "599:36:1" + "src": "561:56:1" }, { - "nativeSrc": "644:20:1", + "nativeSrc": "626:24:1", "nodeType": "YulVariableDeclaration", - "src": "644:20:1", + "src": "626:24:1", "value": { "arguments": [ { "kind": "number", - "nativeSrc": "658:1:1", + "nativeSrc": "640:1:1", "nodeType": "YulLiteral", - "src": "658:1:1", + "src": "640:1:1", "type": "", "value": "5" }, { - "name": "_4", - "nativeSrc": "661:2:1", + "name": "length", + "nativeSrc": "643:6:1", "nodeType": "YulIdentifier", - "src": "661:2:1" + "src": "643:6:1" } ], "functionName": { "name": "shl", - "nativeSrc": "654:3:1", + "nativeSrc": "636:3:1", "nodeType": "YulIdentifier", - "src": "654:3:1" + "src": "636:3:1" }, - "nativeSrc": "654:10:1", + "nativeSrc": "636:14:1", "nodeType": "YulFunctionCall", - "src": "654:10:1" + "src": "636:14:1" }, "variables": [ { - "name": "_5", - "nativeSrc": "648:2:1", + "name": "_2", + "nativeSrc": "630:2:1", "nodeType": "YulTypedName", - "src": "648:2:1", + "src": "630:2:1", "type": "" } ] }, { - "nativeSrc": "673:23:1", + "nativeSrc": "659:23:1", "nodeType": "YulVariableDeclaration", - "src": "673:23:1", + "src": "659:23:1", "value": { "arguments": [ { "kind": "number", - "nativeSrc": "693:2:1", + "nativeSrc": "679:2:1", "nodeType": "YulLiteral", - "src": "693:2:1", + "src": "679:2:1", "type": "", "value": "64" } ], "functionName": { "name": "mload", - "nativeSrc": "687:5:1", + "nativeSrc": "673:5:1", "nodeType": "YulIdentifier", - "src": "687:5:1" + "src": "673:5:1" }, - "nativeSrc": "687:9:1", + "nativeSrc": "673:9:1", "nodeType": "YulFunctionCall", - "src": "687:9:1" + "src": "673:9:1" }, "variables": [ { "name": "memPtr", - "nativeSrc": "677:6:1", + "nativeSrc": "663:6:1", "nodeType": "YulTypedName", - "src": "677:6:1", + "src": "663:6:1", "type": "" } ] }, { - "nativeSrc": "705:56:1", + "nativeSrc": "691:56:1", "nodeType": "YulVariableDeclaration", - "src": "705:56:1", + "src": "691:56:1", "value": { "arguments": [ { "name": "memPtr", - "nativeSrc": "727:6:1", + "nativeSrc": "713:6:1", "nodeType": "YulIdentifier", - "src": "727:6:1" + "src": "713:6:1" }, { "arguments": [ { "arguments": [ { - "name": "_5", - "nativeSrc": "743:2:1", + "name": "_2", + "nativeSrc": "729:2:1", "nodeType": "YulIdentifier", - "src": "743:2:1" + "src": "729:2:1" }, { "kind": "number", - "nativeSrc": "747:2:1", + "nativeSrc": "733:2:1", "nodeType": "YulLiteral", - "src": "747:2:1", + "src": "733:2:1", "type": "", "value": "63" } ], "functionName": { "name": "add", - "nativeSrc": "739:3:1", + "nativeSrc": "725:3:1", "nodeType": "YulIdentifier", - "src": "739:3:1" + "src": "725:3:1" }, - "nativeSrc": "739:11:1", + "nativeSrc": "725:11:1", "nodeType": "YulFunctionCall", - "src": "739:11:1" + "src": "725:11:1" }, { "arguments": [ { "kind": "number", - "nativeSrc": "756:2:1", + "nativeSrc": "742:2:1", "nodeType": "YulLiteral", - "src": "756:2:1", + "src": "742:2:1", "type": "", "value": "31" } ], "functionName": { "name": "not", - "nativeSrc": "752:3:1", + "nativeSrc": "738:3:1", "nodeType": "YulIdentifier", - "src": "752:3:1" + "src": "738:3:1" }, - "nativeSrc": "752:7:1", + "nativeSrc": "738:7:1", "nodeType": "YulFunctionCall", - "src": "752:7:1" + "src": "738:7:1" } ], "functionName": { "name": "and", - "nativeSrc": "735:3:1", + "nativeSrc": "721:3:1", "nodeType": "YulIdentifier", - "src": "735:3:1" + "src": "721:3:1" }, - "nativeSrc": "735:25:1", + "nativeSrc": "721:25:1", "nodeType": "YulFunctionCall", - "src": "735:25:1" + "src": "721:25:1" } ], "functionName": { "name": "add", - "nativeSrc": "723:3:1", + "nativeSrc": "709:3:1", "nodeType": "YulIdentifier", - "src": "723:3:1" + "src": "709:3:1" }, - "nativeSrc": "723:38:1", + "nativeSrc": "709:38:1", "nodeType": "YulFunctionCall", - "src": "723:38:1" + "src": "709:38:1" }, "variables": [ { "name": "newFreePtr", - "nativeSrc": "709:10:1", + "nativeSrc": "695:10:1", "nodeType": "YulTypedName", - "src": "709:10:1", + "src": "695:10:1", "type": "" } ] }, { "body": { - "nativeSrc": "820:22:1", + "nativeSrc": "822:22:1", "nodeType": "YulBlock", - "src": "820:22:1", + "src": "822:22:1", "statements": [ { "expression": { "arguments": [], "functionName": { "name": "panic_error_0x41", - "nativeSrc": "822:16:1", + "nativeSrc": "824:16:1", "nodeType": "YulIdentifier", - "src": "822:16:1" + "src": "824:16:1" }, - "nativeSrc": "822:18:1", + "nativeSrc": "824:18:1", "nodeType": "YulFunctionCall", - "src": "822:18:1" + "src": "824:18:1" }, - "nativeSrc": "822:18:1", + "nativeSrc": "824:18:1", "nodeType": "YulExpressionStatement", - "src": "822:18:1" + "src": "824:18:1" } ] }, @@ -833,115 +795,117 @@ "arguments": [ { "name": "newFreePtr", - "nativeSrc": "779:10:1", + "nativeSrc": "765:10:1", "nodeType": "YulIdentifier", - "src": "779:10:1" + "src": "765:10:1" }, { - "name": "_2", - "nativeSrc": "791:2:1", - "nodeType": "YulIdentifier", - "src": "791:2:1" + "kind": "number", + "nativeSrc": "777:18:1", + "nodeType": "YulLiteral", + "src": "777:18:1", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { "name": "gt", - "nativeSrc": "776:2:1", + "nativeSrc": "762:2:1", "nodeType": "YulIdentifier", - "src": "776:2:1" + "src": "762:2:1" }, - "nativeSrc": "776:18:1", + "nativeSrc": "762:34:1", "nodeType": "YulFunctionCall", - "src": "776:18:1" + "src": "762:34:1" }, { "arguments": [ { "name": "newFreePtr", - "nativeSrc": "799:10:1", + "nativeSrc": "801:10:1", "nodeType": "YulIdentifier", - "src": "799:10:1" + "src": "801:10:1" }, { "name": "memPtr", - "nativeSrc": "811:6:1", + "nativeSrc": "813:6:1", "nodeType": "YulIdentifier", - "src": "811:6:1" + "src": "813:6:1" } ], "functionName": { "name": "lt", - "nativeSrc": "796:2:1", + "nativeSrc": "798:2:1", "nodeType": "YulIdentifier", - "src": "796:2:1" + "src": "798:2:1" }, - "nativeSrc": "796:22:1", + "nativeSrc": "798:22:1", "nodeType": "YulFunctionCall", - "src": "796:22:1" + "src": "798:22:1" } ], "functionName": { "name": "or", - "nativeSrc": "773:2:1", + "nativeSrc": "759:2:1", "nodeType": "YulIdentifier", - "src": "773:2:1" + "src": "759:2:1" }, - "nativeSrc": "773:46:1", + "nativeSrc": "759:62:1", "nodeType": "YulFunctionCall", - "src": "773:46:1" + "src": "759:62:1" }, - "nativeSrc": "770:72:1", + "nativeSrc": "756:88:1", "nodeType": "YulIf", - "src": "770:72:1" + "src": "756:88:1" }, { "expression": { "arguments": [ { "kind": "number", - "nativeSrc": "858:2:1", + "nativeSrc": "860:2:1", "nodeType": "YulLiteral", - "src": "858:2:1", + "src": "860:2:1", "type": "", "value": "64" }, { "name": "newFreePtr", - "nativeSrc": "862:10:1", + "nativeSrc": "864:10:1", "nodeType": "YulIdentifier", - "src": "862:10:1" + "src": "864:10:1" } ], "functionName": { "name": "mstore", - "nativeSrc": "851:6:1", + "nativeSrc": "853:6:1", "nodeType": "YulIdentifier", - "src": "851:6:1" + "src": "853:6:1" }, - "nativeSrc": "851:22:1", + "nativeSrc": "853:22:1", "nodeType": "YulFunctionCall", - "src": "851:22:1" + "src": "853:22:1" }, - "nativeSrc": "851:22:1", + "nativeSrc": "853:22:1", "nodeType": "YulExpressionStatement", - "src": "851:22:1" + "src": "853:22:1" }, { - "nativeSrc": "882:17:1", + "nativeSrc": "884:17:1", "nodeType": "YulVariableDeclaration", - "src": "882:17:1", + "src": "884:17:1", "value": { "name": "memPtr", - "nativeSrc": "893:6:1", + "nativeSrc": "895:6:1", "nodeType": "YulIdentifier", - "src": "893:6:1" + "src": "895:6:1" }, "variables": [ { "name": "dst", - "nativeSrc": "886:3:1", + "nativeSrc": "888:3:1", "nodeType": "YulTypedName", - "src": "886:3:1", + "src": "888:3:1", "type": "" } ] @@ -951,166 +915,170 @@ "arguments": [ { "name": "memPtr", - "nativeSrc": "915:6:1", + "nativeSrc": "917:6:1", "nodeType": "YulIdentifier", - "src": "915:6:1" + "src": "917:6:1" }, { - "name": "_4", - "nativeSrc": "923:2:1", + "name": "length", + "nativeSrc": "925:6:1", "nodeType": "YulIdentifier", - "src": "923:2:1" + "src": "925:6:1" } ], "functionName": { "name": "mstore", - "nativeSrc": "908:6:1", + "nativeSrc": "910:6:1", "nodeType": "YulIdentifier", - "src": "908:6:1" + "src": "910:6:1" }, - "nativeSrc": "908:18:1", + "nativeSrc": "910:22:1", "nodeType": "YulFunctionCall", - "src": "908:18:1" + "src": "910:22:1" }, - "nativeSrc": "908:18:1", + "nativeSrc": "910:22:1", "nodeType": "YulExpressionStatement", - "src": "908:18:1" + "src": "910:22:1" }, { - "nativeSrc": "935:22:1", + "nativeSrc": "941:22:1", "nodeType": "YulAssignment", - "src": "935:22:1", + "src": "941:22:1", "value": { "arguments": [ { "name": "memPtr", - "nativeSrc": "946:6:1", + "nativeSrc": "952:6:1", "nodeType": "YulIdentifier", - "src": "946:6:1" + "src": "952:6:1" }, { - "name": "_1", - "nativeSrc": "954:2:1", - "nodeType": "YulIdentifier", - "src": "954:2:1" + "kind": "number", + "nativeSrc": "960:2:1", + "nodeType": "YulLiteral", + "src": "960:2:1", + "type": "", + "value": "32" } ], "functionName": { "name": "add", - "nativeSrc": "942:3:1", + "nativeSrc": "948:3:1", "nodeType": "YulIdentifier", - "src": "942:3:1" + "src": "948:3:1" }, - "nativeSrc": "942:15:1", + "nativeSrc": "948:15:1", "nodeType": "YulFunctionCall", - "src": "942:15:1" + "src": "948:15:1" }, "variableNames": [ { "name": "dst", - "nativeSrc": "935:3:1", + "nativeSrc": "941:3:1", "nodeType": "YulIdentifier", - "src": "935:3:1" + "src": "941:3:1" } ] }, { - "nativeSrc": "966:34:1", + "nativeSrc": "972:34:1", "nodeType": "YulVariableDeclaration", - "src": "966:34:1", + "src": "972:34:1", "value": { "arguments": [ { "arguments": [ { - "name": "_3", - "nativeSrc": "988:2:1", + "name": "_1", + "nativeSrc": "994:2:1", "nodeType": "YulIdentifier", - "src": "988:2:1" + "src": "994:2:1" }, { - "name": "_5", - "nativeSrc": "992:2:1", + "name": "_2", + "nativeSrc": "998:2:1", "nodeType": "YulIdentifier", - "src": "992:2:1" + "src": "998:2:1" } ], "functionName": { "name": "add", - "nativeSrc": "984:3:1", + "nativeSrc": "990:3:1", "nodeType": "YulIdentifier", - "src": "984:3:1" + "src": "990:3:1" }, - "nativeSrc": "984:11:1", + "nativeSrc": "990:11:1", "nodeType": "YulFunctionCall", - "src": "984:11:1" + "src": "990:11:1" }, { - "name": "_1", - "nativeSrc": "997:2:1", - "nodeType": "YulIdentifier", - "src": "997:2:1" + "kind": "number", + "nativeSrc": "1003:2:1", + "nodeType": "YulLiteral", + "src": "1003:2:1", + "type": "", + "value": "32" } ], "functionName": { "name": "add", - "nativeSrc": "980:3:1", + "nativeSrc": "986:3:1", "nodeType": "YulIdentifier", - "src": "980:3:1" + "src": "986:3:1" }, - "nativeSrc": "980:20:1", + "nativeSrc": "986:20:1", "nodeType": "YulFunctionCall", - "src": "980:20:1" + "src": "986:20:1" }, "variables": [ { "name": "srcEnd", - "nativeSrc": "970:6:1", + "nativeSrc": "976:6:1", "nodeType": "YulTypedName", - "src": "970:6:1", + "src": "976:6:1", "type": "" } ] }, { "body": { - "nativeSrc": "1032:16:1", + "nativeSrc": "1038:16:1", "nodeType": "YulBlock", - "src": "1032:16:1", + "src": "1038:16:1", "statements": [ { "expression": { "arguments": [ { "kind": "number", - "nativeSrc": "1041:1:1", + "nativeSrc": "1047:1:1", "nodeType": "YulLiteral", - "src": "1041:1:1", + "src": "1047:1:1", "type": "", "value": "0" }, { "kind": "number", - "nativeSrc": "1044:1:1", + "nativeSrc": "1050:1:1", "nodeType": "YulLiteral", - "src": "1044:1:1", + "src": "1050:1:1", "type": "", "value": "0" } ], "functionName": { "name": "revert", - "nativeSrc": "1034:6:1", + "nativeSrc": "1040:6:1", "nodeType": "YulIdentifier", - "src": "1034:6:1" + "src": "1040:6:1" }, - "nativeSrc": "1034:12:1", + "nativeSrc": "1040:12:1", "nodeType": "YulFunctionCall", - "src": "1034:12:1" + "src": "1040:12:1" }, - "nativeSrc": "1034:12:1", + "nativeSrc": "1040:12:1", "nodeType": "YulExpressionStatement", - "src": "1034:12:1" + "src": "1040:12:1" } ] }, @@ -1118,154 +1086,199 @@ "arguments": [ { "name": "srcEnd", - "nativeSrc": "1015:6:1", + "nativeSrc": "1021:6:1", "nodeType": "YulIdentifier", - "src": "1015:6:1" + "src": "1021:6:1" }, { "name": "dataEnd", - "nativeSrc": "1023:7:1", + "nativeSrc": "1029:7:1", "nodeType": "YulIdentifier", - "src": "1023:7:1" + "src": "1029:7:1" } ], "functionName": { "name": "gt", - "nativeSrc": "1012:2:1", + "nativeSrc": "1018:2:1", "nodeType": "YulIdentifier", - "src": "1012:2:1" + "src": "1018:2:1" }, - "nativeSrc": "1012:19:1", + "nativeSrc": "1018:19:1", "nodeType": "YulFunctionCall", - "src": "1012:19:1" + "src": "1018:19:1" }, - "nativeSrc": "1009:39:1", + "nativeSrc": "1015:39:1", "nodeType": "YulIf", - "src": "1009:39:1" + "src": "1015:39:1" }, { - "nativeSrc": "1057:22:1", + "nativeSrc": "1063:22:1", "nodeType": "YulVariableDeclaration", - "src": "1057:22:1", + "src": "1063:22:1", "value": { "arguments": [ { - "name": "_3", - "nativeSrc": "1072:2:1", + "name": "_1", + "nativeSrc": "1078:2:1", "nodeType": "YulIdentifier", - "src": "1072:2:1" + "src": "1078:2:1" }, { - "name": "_1", - "nativeSrc": "1076:2:1", - "nodeType": "YulIdentifier", - "src": "1076:2:1" + "kind": "number", + "nativeSrc": "1082:2:1", + "nodeType": "YulLiteral", + "src": "1082:2:1", + "type": "", + "value": "32" } ], "functionName": { "name": "add", - "nativeSrc": "1068:3:1", + "nativeSrc": "1074:3:1", "nodeType": "YulIdentifier", - "src": "1068:3:1" + "src": "1074:3:1" }, - "nativeSrc": "1068:11:1", + "nativeSrc": "1074:11:1", "nodeType": "YulFunctionCall", - "src": "1068:11:1" + "src": "1074:11:1" }, "variables": [ { "name": "src", - "nativeSrc": "1061:3:1", + "nativeSrc": "1067:3:1", "nodeType": "YulTypedName", - "src": "1061:3:1", + "src": "1067:3:1", "type": "" } ] }, { "body": { - "nativeSrc": "1144:86:1", + "nativeSrc": "1150:140:1", "nodeType": "YulBlock", - "src": "1144:86:1", + "src": "1150:140:1", "statements": [ + { + "nativeSrc": "1164:14:1", + "nodeType": "YulVariableDeclaration", + "src": "1164:14:1", + "value": { + "kind": "number", + "nativeSrc": "1177:1:1", + "nodeType": "YulLiteral", + "src": "1177:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1168:5:1", + "nodeType": "YulTypedName", + "src": "1168:5:1", + "type": "" + } + ] + }, + { + "nativeSrc": "1191:26:1", + "nodeType": "YulAssignment", + "src": "1191:26:1", + "value": { + "arguments": [ + { + "name": "src", + "nativeSrc": "1213:3:1", + "nodeType": "YulIdentifier", + "src": "1213:3:1" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1200:12:1", + "nodeType": "YulIdentifier", + "src": "1200:12:1" + }, + "nativeSrc": "1200:17:1", + "nodeType": "YulFunctionCall", + "src": "1200:17:1" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "1191:5:1", + "nodeType": "YulIdentifier", + "src": "1191:5:1" + } + ] + }, { "expression": { "arguments": [ { "name": "dst", - "nativeSrc": "1165:3:1", + "nativeSrc": "1237:3:1", "nodeType": "YulIdentifier", - "src": "1165:3:1" + "src": "1237:3:1" }, { - "arguments": [ - { - "name": "src", - "nativeSrc": "1183:3:1", - "nodeType": "YulIdentifier", - "src": "1183:3:1" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "1170:12:1", - "nodeType": "YulIdentifier", - "src": "1170:12:1" - }, - "nativeSrc": "1170:17:1", - "nodeType": "YulFunctionCall", - "src": "1170:17:1" + "name": "value", + "nativeSrc": "1242:5:1", + "nodeType": "YulIdentifier", + "src": "1242:5:1" } ], "functionName": { "name": "mstore", - "nativeSrc": "1158:6:1", + "nativeSrc": "1230:6:1", "nodeType": "YulIdentifier", - "src": "1158:6:1" + "src": "1230:6:1" }, - "nativeSrc": "1158:30:1", + "nativeSrc": "1230:18:1", "nodeType": "YulFunctionCall", - "src": "1158:30:1" + "src": "1230:18:1" }, - "nativeSrc": "1158:30:1", + "nativeSrc": "1230:18:1", "nodeType": "YulExpressionStatement", - "src": "1158:30:1" + "src": "1230:18:1" }, { - "nativeSrc": "1201:19:1", + "nativeSrc": "1261:19:1", "nodeType": "YulAssignment", - "src": "1201:19:1", + "src": "1261:19:1", "value": { "arguments": [ { "name": "dst", - "nativeSrc": "1212:3:1", + "nativeSrc": "1272:3:1", "nodeType": "YulIdentifier", - "src": "1212:3:1" + "src": "1272:3:1" }, { - "name": "_1", - "nativeSrc": "1217:2:1", - "nodeType": "YulIdentifier", - "src": "1217:2:1" + "kind": "number", + "nativeSrc": "1277:2:1", + "nodeType": "YulLiteral", + "src": "1277:2:1", + "type": "", + "value": "32" } ], "functionName": { "name": "add", - "nativeSrc": "1208:3:1", + "nativeSrc": "1268:3:1", "nodeType": "YulIdentifier", - "src": "1208:3:1" + "src": "1268:3:1" }, - "nativeSrc": "1208:12:1", + "nativeSrc": "1268:12:1", "nodeType": "YulFunctionCall", - "src": "1208:12:1" + "src": "1268:12:1" }, "variableNames": [ { "name": "dst", - "nativeSrc": "1201:3:1", + "nativeSrc": "1261:3:1", "nodeType": "YulIdentifier", - "src": "1201:3:1" + "src": "1261:3:1" } ] } @@ -1275,105 +1288,107 @@ "arguments": [ { "name": "src", - "nativeSrc": "1099:3:1", + "nativeSrc": "1105:3:1", "nodeType": "YulIdentifier", - "src": "1099:3:1" + "src": "1105:3:1" }, { "name": "srcEnd", - "nativeSrc": "1104:6:1", + "nativeSrc": "1110:6:1", "nodeType": "YulIdentifier", - "src": "1104:6:1" + "src": "1110:6:1" } ], "functionName": { "name": "lt", - "nativeSrc": "1096:2:1", + "nativeSrc": "1102:2:1", "nodeType": "YulIdentifier", - "src": "1096:2:1" + "src": "1102:2:1" }, - "nativeSrc": "1096:15:1", + "nativeSrc": "1102:15:1", "nodeType": "YulFunctionCall", - "src": "1096:15:1" + "src": "1102:15:1" }, - "nativeSrc": "1088:142:1", + "nativeSrc": "1094:196:1", "nodeType": "YulForLoop", "post": { - "nativeSrc": "1112:23:1", + "nativeSrc": "1118:23:1", "nodeType": "YulBlock", - "src": "1112:23:1", + "src": "1118:23:1", "statements": [ { - "nativeSrc": "1114:19:1", + "nativeSrc": "1120:19:1", "nodeType": "YulAssignment", - "src": "1114:19:1", + "src": "1120:19:1", "value": { "arguments": [ { "name": "src", - "nativeSrc": "1125:3:1", + "nativeSrc": "1131:3:1", "nodeType": "YulIdentifier", - "src": "1125:3:1" + "src": "1131:3:1" }, { - "name": "_1", - "nativeSrc": "1130:2:1", - "nodeType": "YulIdentifier", - "src": "1130:2:1" + "kind": "number", + "nativeSrc": "1136:2:1", + "nodeType": "YulLiteral", + "src": "1136:2:1", + "type": "", + "value": "32" } ], "functionName": { "name": "add", - "nativeSrc": "1121:3:1", + "nativeSrc": "1127:3:1", "nodeType": "YulIdentifier", - "src": "1121:3:1" + "src": "1127:3:1" }, - "nativeSrc": "1121:12:1", + "nativeSrc": "1127:12:1", "nodeType": "YulFunctionCall", - "src": "1121:12:1" + "src": "1127:12:1" }, "variableNames": [ { "name": "src", - "nativeSrc": "1114:3:1", + "nativeSrc": "1120:3:1", "nodeType": "YulIdentifier", - "src": "1114:3:1" + "src": "1120:3:1" } ] } ] }, "pre": { - "nativeSrc": "1092:3:1", + "nativeSrc": "1098:3:1", "nodeType": "YulBlock", - "src": "1092:3:1", + "src": "1098:3:1", "statements": [] }, - "src": "1088:142:1" + "src": "1094:196:1" }, { - "nativeSrc": "1239:16:1", + "nativeSrc": "1299:16:1", "nodeType": "YulAssignment", - "src": "1239:16:1", + "src": "1299:16:1", "value": { "name": "memPtr", - "nativeSrc": "1249:6:1", + "nativeSrc": "1309:6:1", "nodeType": "YulIdentifier", - "src": "1249:6:1" + "src": "1309:6:1" }, "variableNames": [ { "name": "value0", - "nativeSrc": "1239:6:1", + "nativeSrc": "1299:6:1", "nodeType": "YulIdentifier", - "src": "1239:6:1" + "src": "1299:6:1" } ] } ] }, "name": "abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr", - "nativeSrc": "146:1115:1", + "nativeSrc": "146:1175:1", "nodeType": "YulFunctionDefinition", "parameters": [ { @@ -1400,51 +1415,51 @@ "type": "" } ], - "src": "146:1115:1" + "src": "146:1175:1" }, { "body": { - "nativeSrc": "1367:76:1", + "nativeSrc": "1427:76:1", "nodeType": "YulBlock", - "src": "1367:76:1", + "src": "1427:76:1", "statements": [ { - "nativeSrc": "1377:26:1", + "nativeSrc": "1437:26:1", "nodeType": "YulAssignment", - "src": "1377:26:1", + "src": "1437:26:1", "value": { "arguments": [ { "name": "headStart", - "nativeSrc": "1389:9:1", + "nativeSrc": "1449:9:1", "nodeType": "YulIdentifier", - "src": "1389:9:1" + "src": "1449:9:1" }, { "kind": "number", - "nativeSrc": "1400:2:1", + "nativeSrc": "1460:2:1", "nodeType": "YulLiteral", - "src": "1400:2:1", + "src": "1460:2:1", "type": "", "value": "32" } ], "functionName": { "name": "add", - "nativeSrc": "1385:3:1", + "nativeSrc": "1445:3:1", "nodeType": "YulIdentifier", - "src": "1385:3:1" + "src": "1445:3:1" }, - "nativeSrc": "1385:18:1", + "nativeSrc": "1445:18:1", "nodeType": "YulFunctionCall", - "src": "1385:18:1" + "src": "1445:18:1" }, "variableNames": [ { "name": "tail", - "nativeSrc": "1377:4:1", + "nativeSrc": "1437:4:1", "nodeType": "YulIdentifier", - "src": "1377:4:1" + "src": "1437:4:1" } ] }, @@ -1453,62 +1468,62 @@ "arguments": [ { "name": "headStart", - "nativeSrc": "1419:9:1", + "nativeSrc": "1479:9:1", "nodeType": "YulIdentifier", - "src": "1419:9:1" + "src": "1479:9:1" }, { "name": "value0", - "nativeSrc": "1430:6:1", + "nativeSrc": "1490:6:1", "nodeType": "YulIdentifier", - "src": "1430:6:1" + "src": "1490:6:1" } ], "functionName": { "name": "mstore", - "nativeSrc": "1412:6:1", + "nativeSrc": "1472:6:1", "nodeType": "YulIdentifier", - "src": "1412:6:1" + "src": "1472:6:1" }, - "nativeSrc": "1412:25:1", + "nativeSrc": "1472:25:1", "nodeType": "YulFunctionCall", - "src": "1412:25:1" + "src": "1472:25:1" }, - "nativeSrc": "1412:25:1", + "nativeSrc": "1472:25:1", "nodeType": "YulExpressionStatement", - "src": "1412:25:1" + "src": "1472:25:1" } ] }, "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nativeSrc": "1266:177:1", + "nativeSrc": "1326:177:1", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", - "nativeSrc": "1336:9:1", + "nativeSrc": "1396:9:1", "nodeType": "YulTypedName", - "src": "1336:9:1", + "src": "1396:9:1", "type": "" }, { "name": "value0", - "nativeSrc": "1347:6:1", + "nativeSrc": "1407:6:1", "nodeType": "YulTypedName", - "src": "1347:6:1", + "src": "1407:6:1", "type": "" } ], "returnVariables": [ { "name": "tail", - "nativeSrc": "1358:4:1", + "nativeSrc": "1418:4:1", "nodeType": "YulTypedName", - "src": "1358:4:1", + "src": "1418:4:1", "type": "" } ], - "src": "1266:177:1" + "src": "1326:177:1" } ] }, @@ -1522,30 +1537,30 @@ } function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0 { - let _1 := 32 - if slt(sub(dataEnd, headStart), _1) { revert(0, 0) } + if slt(sub(dataEnd, headStart), 32) { revert(0, 0) } let offset := calldataload(headStart) - let _2 := 0xffffffffffffffff - if gt(offset, _2) { revert(0, 0) } - let _3 := add(headStart, offset) - if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) } - let _4 := calldataload(_3) - if gt(_4, _2) { panic_error_0x41() } - let _5 := shl(5, _4) + if gt(offset, 0xffffffffffffffff) { revert(0, 0) } + let _1 := add(headStart, offset) + if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) } + let length := calldataload(_1) + if gt(length, 0xffffffffffffffff) { panic_error_0x41() } + let _2 := shl(5, length) 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() } + let newFreePtr := add(memPtr, and(add(_2, 63), not(31))) + if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() } mstore(64, newFreePtr) let dst := memPtr - mstore(memPtr, _4) - dst := add(memPtr, _1) - let srcEnd := add(add(_3, _5), _1) + mstore(memPtr, length) + dst := add(memPtr, 32) + let srcEnd := add(add(_1, _2), 32) if gt(srcEnd, dataEnd) { revert(0, 0) } - let src := add(_3, _1) - for { } lt(src, srcEnd) { src := add(src, _1) } + let src := add(_1, 32) + for { } lt(src, srcEnd) { src := add(src, 32) } { - mstore(dst, calldataload(src)) - dst := add(dst, _1) + let value := 0 + value := calldataload(src) + mstore(dst, value) + dst := add(dst, 32) } value0 := memPtr } diff --git a/test/cmdlineTests/viair_subobject_optimization/output b/test/cmdlineTests/viair_subobject_optimization/output index 5090c282bb24..dafba2771c5d 100644 --- a/test/cmdlineTests/viair_subobject_optimization/output +++ b/test/cmdlineTests/viair_subobject_optimization/output @@ -119,53 +119,50 @@ sub_0: assembly { jumpi(tag_7, slt(add(not(0x03), calldatasize), 0x00)) /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ dataSize(sub_0) - /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ - swap1 - not(0x1f) swap1 - dup2 + /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ 0x3f - dup5 + dup3 add + not(0x1f) and dup2 add - swap2 + swap1 + 0xffffffffffffffff + dup3 + gt dup2 dup4 lt - 0xffffffffffffffff - dup5 - gt or tag_9 jumpi 0x40 - swap3 - dup4 + swap2 + dup3 mstore /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ - dup4 dup3 + dup2 mstore 0x20 - dup3 + dup2 add - swap4 + swap3 dataOffset(sub_0) - dup6 + dup5 codecopy /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ - 0x1f - dup4 + dup2 mload - swap5 - dup6 - swap4 + swap3 + dup4 + swap2 /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ 0x20 /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ - dup6 + dup4 mstore mload dup1 @@ -174,21 +171,23 @@ sub_0: assembly { /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ 0x20 /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ - dup8 + dup6 add mstore - dup7 - dup7 + dup5 + dup5 add mcopy 0x00 - dup6 dup3 - dup7 + dup3 add + dup5 add mstore + 0x1f add + not(0x1f) and dup2 add diff --git a/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_paris.sol b/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_paris.sol index 0a97c87dfa9c..82a3415d0cbe 100644 --- a/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_paris.sol +++ b/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_paris.sol @@ -26,6 +26,6 @@ contract test { // ==== // EVMVersion: =paris // ---- -// Warning 5574: (0-27130): Contract code size is 27193 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. -// Warning 5574: (27132-27224): Contract code size is 27219 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. -// Warning 5574: (27226-27319): Contract code size is 27219 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 5574: (0-27130): Contract code size is 27192 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 5574: (27132-27224): Contract code size is 27218 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 5574: (27226-27319): Contract code size is 27218 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. diff --git a/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_shanghai.sol b/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_shanghai.sol index 32e8d9133be2..dd0122971d8e 100644 --- a/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_shanghai.sol +++ b/test/libsolidity/syntaxTests/sizeLimits/combined_too_large_shanghai.sol @@ -26,7 +26,7 @@ contract test { // ==== // EVMVersion: =shanghai // ---- -// Warning 5574: (0-27130): Contract code size is 27187 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. -// Warning 5574: (27132-27224): Contract code size is 27213 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. -// Warning 5574: (27226-27319): Contract code size is 27212 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. -// Warning 3860: (27321-27398): Contract initcode size is 54618 bytes and exceeds 49152 bytes (a limit introduced in Shanghai). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 5574: (0-27130): Contract code size is 27186 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 5574: (27132-27224): Contract code size is 27212 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 5574: (27226-27319): Contract code size is 27211 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 3860: (27321-27398): Contract initcode size is 54616 bytes and exceeds 49152 bytes (a limit introduced in Shanghai). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. diff --git a/test/libsolidity/syntaxTests/sizeLimits/initcode_too_large_shanghai.sol b/test/libsolidity/syntaxTests/sizeLimits/initcode_too_large_shanghai.sol index d48693db05b1..15273c66a7c0 100644 --- a/test/libsolidity/syntaxTests/sizeLimits/initcode_too_large_shanghai.sol +++ b/test/libsolidity/syntaxTests/sizeLimits/initcode_too_large_shanghai.sol @@ -27,4 +27,4 @@ contract test { // ==== // EVMVersion: =shanghai // ---- -// Warning 3860: (20321-20415): Contract initcode size is 60882 bytes and exceeds 49152 bytes (a limit introduced in Shanghai). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. +// Warning 3860: (20321-20415): Contract initcode size is 60879 bytes and exceeds 49152 bytes (a limit introduced in Shanghai). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries. diff --git a/test/libyul/yulOptimizerTests/fullSuite/abi2.yul b/test/libyul/yulOptimizerTests/fullSuite/abi2.yul index d8c8e90558ef..2f2e060be089 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/abi2.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/abi2.yul @@ -1093,25 +1093,21 @@ // value0 := and(calldataload(headStart), sub(shl(160, 1), 1)) // value1 := calldataload(add(headStart, 32)) // let offset := calldataload(add(headStart, 64)) -// let _1 := 0xffffffffffffffff -// if gt(offset, _1) { revert(0, 0) } -// let _2 := add(headStart, offset) -// if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) } -// let length := calldataload(_2) -// if gt(length, _1) { revert(0, 0) } -// if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) } -// value2 := add(_2, 32) +// if gt(offset, 0xffffffffffffffff) { revert(0, 0) } +// let _1 := add(headStart, offset) +// if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) } +// let length := calldataload(_1) +// if gt(length, 0xffffffffffffffff) { revert(0, 0) } +// if gt(add(add(_1, length), 32), dataEnd) { revert(0, 0) } +// value2 := add(_1, 32) // value3 := length -// let _3 := calldataload(add(headStart, 96)) -// if iszero(lt(_3, 3)) { revert(0, 0) } -// value4 := _3 +// value4 := cleanup_revert_enum_Operation(calldataload(add(headStart, 96))) // } // function abi_encode_bytes32_address_uint256_bytes32_enum_Operation_uint256_uint256_uint256_address_address_uint256(headStart, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail // { // tail := add(headStart, 352) // mstore(headStart, value0) -// let _1 := sub(shl(160, 1), 1) -// mstore(add(headStart, 32), and(value1, _1)) +// mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1))) // mstore(add(headStart, 64), value2) // mstore(add(headStart, 96), value3) // if iszero(lt(value4, 3)) { invalid() } @@ -1119,8 +1115,13 @@ // mstore(add(headStart, 160), value5) // mstore(add(headStart, 192), value6) // mstore(add(headStart, 224), value7) -// mstore(add(headStart, 256), and(value8, _1)) -// mstore(add(headStart, 288), and(value9, _1)) +// mstore(add(headStart, 256), and(value8, sub(shl(160, 1), 1))) +// mstore(add(headStart, 288), and(value9, sub(shl(160, 1), 1))) // mstore(add(headStart, 320), value10) // } +// function cleanup_revert_enum_Operation(value) -> cleaned +// { +// if iszero(lt(value, 3)) { revert(0, 0) } +// cleaned := value +// } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul b/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul index 2abdf6d9c283..dbb87439f637 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul @@ -492,68 +492,64 @@ // } // function abi_decode_array_array_uint256_memory_dyn(offset, end) -> array // { -// let _1 := 0x1f // if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) } // let length := calldataload(offset) // array := allocateMemory(array_allocation_size_array_address_dyn_memory(length)) // let dst := array // mstore(array, length) -// let _2 := 0x20 -// dst := add(array, _2) -// let src := add(offset, _2) -// if gt(add(add(offset, shl(6, length)), _2), end) { revert(0, 0) } +// dst := add(array, 0x20) +// let src := add(offset, 0x20) +// if gt(add(add(offset, shl(6, length)), 0x20), 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 dst_1 := allocateMemory_967() -// let dst_2 := dst_1 +// if iszero(slt(add(src, 0x1f), end)) { revert(0, 0) } +// let dst_1 := allocateMemory_823() +// let array_1 := dst_1 // let src_1 := src -// let _3 := add(src, 64) -// if gt(_3, end) { revert(0, 0) } +// let _1 := add(src, 64) +// if gt(_1, end) { revert(0, 0) } // let i_1 := 0 // for { } lt(i_1, 0x2) { i_1 := add(i_1, 1) } // { // mstore(dst_1, calldataload(src_1)) -// dst_1 := add(dst_1, _2) -// src_1 := add(src_1, _2) +// dst_1 := add(dst_1, 0x20) +// src_1 := add(src_1, 0x20) // } -// mstore(dst, dst_2) -// dst := add(dst, _2) -// src := _3 +// mstore(dst, array_1) +// dst := add(dst, 0x20) +// src := _1 // } // } // function abi_decode_uint256t_uint256t_array_uint256_dynt_array_array_uint256_memory_dyn(headStart, dataEnd) -> value0, value1, value2, value3 // { // if slt(sub(dataEnd, headStart), 128) { revert(0, 0) } // value0 := calldataload(headStart) -// let _1 := 32 -// value1 := calldataload(add(headStart, _1)) +// value1 := calldataload(add(headStart, 32)) // let offset := calldataload(add(headStart, 64)) -// let _2 := 0xffffffffffffffff -// if gt(offset, _2) { revert(0, 0) } -// let _3 := add(headStart, offset) -// if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) } -// let length := calldataload(_3) +// if gt(offset, 0xffffffffffffffff) { revert(0, 0) } +// let _1 := add(headStart, offset) +// if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) } +// let length := calldataload(_1) // let dst := allocateMemory(array_allocation_size_array_address_dyn_memory(length)) -// let dst_1 := dst +// let array := dst // mstore(dst, length) -// dst := add(dst, _1) -// let src := add(_3, _1) -// if gt(add(add(_3, shl(5, length)), _1), dataEnd) { revert(0, 0) } +// dst := add(dst, 32) +// let src := add(_1, 32) +// if gt(add(add(_1, shl(5, length)), 32), dataEnd) { revert(0, 0) } // let i := 0 // for { } lt(i, length) { i := add(i, 1) } // { // mstore(dst, calldataload(src)) -// dst := add(dst, _1) -// src := add(src, _1) +// dst := add(dst, 32) +// src := add(src, 32) // } -// value2 := dst_1 +// value2 := array // let offset_1 := calldataload(add(headStart, 96)) -// if gt(offset_1, _2) { revert(0, 0) } +// if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) } // value3 := abi_decode_array_array_uint256_memory_dyn(add(headStart, offset_1), dataEnd) // } -// function allocateMemory_967() -> memPtr +// function allocateMemory_823() -> memPtr // { // memPtr := mload(64) // let newFreePtr := add(memPtr, 64) diff --git a/test/libyul/yulOptimizerTests/fullSuite/ackermann_function.yul b/test/libyul/yulOptimizerTests/fullSuite/ackermann_function.yul index dd5facaf0315..bf419017bf15 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/ackermann_function.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/ackermann_function.yul @@ -36,8 +36,7 @@ // switch n // case 0 { ret := A(add(m, not(0)), 1) } // default { -// let _1 := not(0) -// ret := A(add(m, _1), A(m, add(n, _1))) +// ret := A(add(m, not(0)), A(m, add(n, not(0)))) // } // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/ackermann_function_if.yul b/test/libyul/yulOptimizerTests/fullSuite/ackermann_function_if.yul index 005c58778b87..edf1a086faaa 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/ackermann_function_if.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/ackermann_function_if.yul @@ -45,7 +45,6 @@ // ret := A(add(m, not(0)), 1) // leave // } -// let _1 := not(0) -// ret := A(add(m, _1), A(m, add(n, _1))) +// ret := A(add(m, not(0)), A(m, add(n, not(0)))) // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/aztec.yul b/test/libyul/yulOptimizerTests/fullSuite/aztec.yul index 2b22055794c6..8b26a7ba3723 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/aztec.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/aztec.yul @@ -237,53 +237,56 @@ // { // 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) -// if gt(calldataload(0x24), n) +// let challenge := mod(calldataload(0x44), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) +// if gt(m, n) // { // mstore(0x00, 404) // revert(0x00, 0x20) // } // let kn := calldataload(add(calldatasize(), not(191))) -// let _1 := 0x2a0 -// mstore(_1, caller()) +// mstore(0x2a0, caller()) // mstore(0x2c0, kn) -// mstore(0x2e0, calldataload(0x24)) -// kn := mulmod(sub(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001, kn), mod(calldataload(0x44), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) +// mstore(0x2e0, m) +// kn := mulmod(sub(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001, kn), challenge, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) // hashCommitments(notes, n) // let b := add(0x300, shl(7, n)) // let i := 0 // for { } lt(i, n) { i := add(i, 0x01) } // { -// let noteIndex := add(add(calldataload(0x04), mul(i, 0xc0)), 0x24) +// let _2 := add(_1, mul(i, 0xc0)) +// let noteIndex := add(_2, 0x24) // let k := 0 -// let a := calldataload(add(add(calldataload(0x04), mul(i, 0xc0)), 0x44)) -// let c := mod(calldataload(0x44), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) -// let _2 := add(i, 0x01) -// switch eq(_2, n) +// let a := calldataload(add(_2, 0x44)) +// let c := challenge +// let _3 := add(i, 0x01) +// switch eq(_3, n) // case 1 { // k := kn -// if eq(calldataload(0x24), n) +// if eq(m, n) // { // k := sub(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001, kn) // } // } // case 0 { k := calldataload(noteIndex) } // validateCommitment(noteIndex, k, a) -// switch gt(_2, calldataload(0x24)) +// switch gt(_3, m) // case 1 { // kn := addmod(kn, sub(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001, k), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) // let x := mod(mload(0), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) // k := mulmod(k, x, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) // a := mulmod(a, x, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) -// c := mulmod(mod(calldataload(0x44), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001), x, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) +// c := mulmod(challenge, x, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) // mstore(0, keccak256(0, 0x20)) // } // case 0 { // kn := addmod(kn, k, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001) // } -// calldatacopy(0xe0, add(add(calldataload(0x04), mul(i, 0xc0)), 164), 0x40) -// calldatacopy(0x20, add(add(calldataload(0x04), mul(i, 0xc0)), 100), 0x40) +// calldatacopy(0xe0, add(_2, 164), 0x40) +// calldatacopy(0x20, add(_2, 100), 0x40) // mstore(0x120, sub(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001, c)) // mstore(0x60, k) // mstore(0xc0, a) @@ -292,19 +295,18 @@ // let result_2 := and(result_1, call(gas(), 7, 0, 0x80, 0x60, 0x160, 0x40)) // let result_3 := and(result_2, call(gas(), 6, 0, 0x120, 0x80, 0x160, 0x40)) // result := and(result_3, call(gas(), 6, 0, 0x160, 0x80, b, 0x40)) -// if eq(i, calldataload(0x24)) +// if eq(i, m) // { // mstore(0x260, mload(0x20)) // mstore(0x280, mload(0x40)) // mstore(0x1e0, mload(0xe0)) // mstore(0x200, sub(0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47, mload(0x100))) // } -// if gt(i, calldataload(0x24)) +// if gt(i, m) // { // mstore(0x60, c) -// let _3 := 0x220 -// let result_4 := and(result, call(gas(), 7, 0, 0x20, 0x60, _3, 0x40)) -// let result_5 := and(result_4, call(gas(), 6, 0, _3, 0x80, 0x260, 0x40)) +// let result_4 := and(result, call(gas(), 7, 0, 0x20, 0x60, 0x220, 0x40)) +// let result_5 := and(result_4, call(gas(), 6, 0, 0x220, 0x80, 0x260, 0x40)) // result := and(result_5, call(gas(), 6, 0, 0x1a0, 0x80, 0x1e0, 0x40)) // } // if iszero(result) @@ -314,8 +316,8 @@ // } // b := add(b, 0x40) // } -// if lt(calldataload(0x24), n) { validatePairing() } -// if iszero(eq(mod(keccak256(_1, add(b, not(671))), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001), mod(calldataload(0x44), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001))) +// if lt(m, n) { validatePairing() } +// if iszero(eq(mod(keccak256(0x2a0, add(b, not(671))), 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001), challenge)) // { // mstore(0, 404) // revert(0, 0x20) @@ -329,35 +331,28 @@ // let t2_x_1 := calldataload(132) // let t2_y := calldataload(164) // let t2_y_1 := calldataload(196) -// let _1 := 0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b -// let _2 := 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa -// let _3 := 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 -// let _4 := 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed -// if or(or(or(or(or(or(or(iszero(t2_x), iszero(t2_x_1)), iszero(t2_y)), iszero(t2_y_1)), eq(t2_x, _4)), eq(t2_x_1, _3)), eq(t2_y, _2)), eq(t2_y_1, _1)) +// if or(or(or(or(or(or(or(iszero(t2_x), iszero(t2_x_1)), iszero(t2_y)), iszero(t2_y_1)), eq(t2_x, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed)), eq(t2_x_1, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2)), eq(t2_y, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa)), eq(t2_y_1, 0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b)) // { // mstore(0x00, 400) // revert(0x00, 0x20) // } -// let _5 := mload(0x1e0) -// let _6 := 0x20 -// mstore(_6, _5) +// mstore(0x20, mload(0x1e0)) // mstore(0x40, mload(0x200)) -// mstore(0x80, _4) -// mstore(0x60, _3) -// mstore(0xc0, _2) -// mstore(0xa0, _1) +// mstore(0x80, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) +// mstore(0x60, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) +// mstore(0xc0, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) +// mstore(0xa0, 0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) // mstore(0xe0, mload(0x260)) // mstore(0x100, mload(0x280)) // mstore(0x140, t2_x) // mstore(0x120, t2_x_1) -// let _7 := 0x180 -// mstore(_7, t2_y) +// mstore(0x180, t2_y) // mstore(0x160, t2_y_1) -// let success := call(gas(), 8, 0, _6, _7, _6, _6) -// if or(iszero(success), iszero(mload(_6))) +// let success := call(gas(), 8, 0, 0x20, 0x180, 0x20, 0x20) +// if or(iszero(success), iszero(mload(0x20))) // { // mstore(0, 400) -// revert(0, _6) +// revert(0, 0x20) // } // } // function validateCommitment(note, k, a) @@ -366,9 +361,7 @@ // let gammaY := calldataload(add(note, 0x60)) // let sigmaX := calldataload(add(note, 0x80)) // let sigmaY := calldataload(add(note, 0xa0)) -// let _1 := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 -// let _2 := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 -// if iszero(and(and(and(eq(mod(a, _2), a), gt(a, 1)), and(eq(mod(k, _2), k), gt(k, 1))), and(eq(addmod(mulmod(mulmod(sigmaX, sigmaX, _1), sigmaX, _1), 3, _1), mulmod(sigmaY, sigmaY, _1)), eq(addmod(mulmod(mulmod(gammaX, gammaX, _1), gammaX, _1), 3, _1), mulmod(gammaY, gammaY, _1))))) +// if iszero(and(and(and(eq(mod(a, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001), a), gt(a, 1)), and(eq(mod(k, 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001), k), gt(k, 1))), and(eq(addmod(mulmod(mulmod(sigmaX, sigmaX, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47), sigmaX, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47), 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47), mulmod(sigmaY, sigmaY, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47)), eq(addmod(mulmod(mulmod(gammaX, gammaX, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47), gammaX, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47), 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47), mulmod(gammaY, gammaY, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47))))) // { // mstore(0x00, 400) // revert(0x00, 0x20) diff --git a/test/libyul/yulOptimizerTests/fullSuite/call_arguments_without_side_effects.yul b/test/libyul/yulOptimizerTests/fullSuite/call_arguments_without_side_effects.yul index fc36bdfa37a0..5f42470f65a4 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/call_arguments_without_side_effects.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/call_arguments_without_side_effects.yul @@ -28,21 +28,20 @@ // // { // { -// let _1 := 1 -// mstore(_1, _1) -// mstore(2, _1) -// mstore(3, _1) -// mstore(4, _1) -// mstore(5, _1) -// mstore(6, _1) -// let _2 := sload(8) -// mstore(mload(7), _1) -// mstore(_2, _1) -// mstore(calldataload(9), _1) -// let _3 := mload(13) -// mstore(11, _1) -// mstore(12, _1) -// mstore(_3, _1) +// mstore(1, 1) +// mstore(2, 1) +// mstore(3, 1) +// mstore(4, 1) +// mstore(5, 1) +// mstore(6, 1) +// let _1 := sload(8) +// mstore(mload(7), 1) +// mstore(_1, 1) +// mstore(calldataload(9), 1) +// let _2 := mload(13) +// mstore(11, 1) +// mstore(12, 1) +// mstore(_2, 1) // return(0, 32) // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/create2_and_mask.yul b/test/libyul/yulOptimizerTests/fullSuite/create2_and_mask.yul index f9d248e2feeb..6ebca20f5bbb 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/create2_and_mask.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/create2_and_mask.yul @@ -13,8 +13,7 @@ // // { // { -// let _1 := sub(shl(160, 1), 1) -// let a := and(create2(0, 0, 0x20, 0), _1) -// sstore(a, and(_1, create2(0, 0, 0x20, 0))) +// let a := and(create2(0, 0, 0x20, 0), sub(shl(160, 1), 1)) +// sstore(a, and(sub(shl(160, 1), 1), create2(0, 0, 0x20, 0))) // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/create_and_mask.yul b/test/libyul/yulOptimizerTests/fullSuite/create_and_mask.yul index c89c620bb52d..078616bb3b7e 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/create_and_mask.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/create_and_mask.yul @@ -13,8 +13,7 @@ // // { // { -// let _1 := sub(shl(160, 1), 1) -// let a := and(create(0, 0, 0x20), _1) -// sstore(a, and(_1, create(0, 0, 0x20))) +// let a := and(create(0, 0, 0x20), sub(shl(160, 1), 1)) +// sstore(a, and(sub(shl(160, 1), 1), create(0, 0, 0x20))) // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul b/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul index fe06f1629bc3..fca4a6366bdf 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/devcon_example.yul @@ -25,8 +25,11 @@ // let sum := 0 // let length := calldataload(_1) // let i := 0 -// for { } lt(i, length) { i := add(i, 1) } +// for { } true { i := add(i, 1) } // { +// let _2 := iszero(lt(i, length)) +// if _2 { break } +// _2 := 0 // sum := add(sum, calldataload(add(add(_1, shl(5, i)), 0x20))) // } // sstore(0, sum) diff --git a/test/libyul/yulOptimizerTests/fullSuite/extcodelength.yul b/test/libyul/yulOptimizerTests/fullSuite/extcodelength.yul index 436f5d5fafc4..dd6cdc0e44c4 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/extcodelength.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/extcodelength.yul @@ -26,12 +26,10 @@ // let value := calldataload(4) // if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) } // let length := extcodesize(value) -// let _1 := 0xffffffffffffffff -// if gt(length, _1) { revert(0, 0) } +// if gt(length, 0xffffffffffffffff) { revert(0, 0) } // let memPtr := mload(64) -// let _2 := not(31) -// let newFreePtr := add(memPtr, and(add(and(add(length, 31), _2), 63), _2)) -// if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { revert(0, 0) } +// let newFreePtr := add(memPtr, and(add(and(add(length, 31), not(31)), 63), not(31))) +// if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { revert(0, 0) } // mstore(64, newFreePtr) // mstore(memPtr, length) // extcodecopy(value, add(memPtr, 32), 0, length) diff --git a/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul b/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul index 86329c3275f0..76d671bfc3e2 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/loopInvariantCodeMotion.yul @@ -29,8 +29,11 @@ // let length := calldataload(_1) // let i := 0 // let _2 := calldataload(7) -// for { } lt(i, length) { i := add(i, 1) } +// for { } true { i := add(i, 1) } // { +// let _3 := iszero(lt(i, length)) +// if _3 { break } +// _3 := 0 // sum := add(sum, add(calldataload(add(add(_1, shl(5, i)), 0x20)), _2)) // } // sstore(0, sum) diff --git a/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_1_pre_shanghai.yul b/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_1_pre_shanghai.yul index d041cff1041f..4d3ed471b4e1 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_1_pre_shanghai.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_1_pre_shanghai.yul @@ -33,14 +33,13 @@ // { // { // let a := 0 -// let a_1 := 0 -// for { } a_1 { } +// for { } a { } // { -// let _1 := add(a_1, a_1) +// let _1 := add(a, a) // let var := add(_1, _1) -// switch a_1 -// case 0 { a_1 := var } -// default { sstore(a, var) } +// switch a +// case 0 { a := var } +// default { sstore(0, var) } // } // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_2_pre_shanghai.yul b/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_2_pre_shanghai.yul index 06965e3ca695..3161dc2efac4 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_2_pre_shanghai.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/name_dependent_cse_bug_part_2_pre_shanghai.yul @@ -33,14 +33,13 @@ // { // { // let a := 0 -// let a_1 := 0 -// for { } a_1 { } +// for { } a { } // { -// let _1 := add(a_1, a_1) +// let _1 := add(a, a) // let var := add(_1, _1) -// switch a_1 -// case 0 { a_1 := var } -// default { sstore(a, var) } +// switch a +// case 0 { a := var } +// default { sstore(0, var) } // } // } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/stack_compressor_msize.yul b/test/libyul/yulOptimizerTests/fullSuite/stack_compressor_msize.yul index 75e2ff4c2010..5fbe8d22e615 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/stack_compressor_msize.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/stack_compressor_msize.yul @@ -40,22 +40,18 @@ // // { // { -// let _1 := 1 -// let _2 := 15 -// let _3 := 10 -// let _4 := gt(not(gcd(_3, _2)), _1) -// let _5 := gcd(_3, _2) -// let _6 := not(0) -// let _7 := lt(or(_1, add(gcd(_3, _2), _6)), _1) -// let _8 := gcd(_3, _2) -// let _9 := gcd(_3, _2) -// pop(keccak256(gcd(_3, _2), or(gt(not(gcd(_3, _2)), _1), _1))) -// mstore(lt(or(gt(_1, or(or(gt(or(or(or(gt(or(gt(_6, _9), _1), _8), _7), _5), _1), _1), _4), _1)), _1), _1), _1) -// sstore(not(gcd(_3, _2)), _1) -// sstore(2, _1) -// extcodecopy(_1, msize(), _1, _1) +// let _1 := gt(not(gcd(10, 15)), 1) +// let _2 := gcd(10, 15) +// let _3 := lt(or(1, add(gcd(10, 15), not(0))), 1) +// let _4 := gcd(10, 15) +// let _5 := gcd(10, 15) +// pop(keccak256(gcd(10, 15), or(gt(not(gcd(10, 15)), 1), 1))) +// mstore(lt(or(gt(1, or(or(gt(or(or(or(gt(or(gt(not(0), _5), 1), _4), _3), _2), 1), 1), _1), 1)), 1), 1), 1) +// sstore(not(gcd(10, 15)), 1) +// sstore(2, 1) +// foo_singlereturn() // sstore(0, 0) -// sstore(3, _1) +// sstore(3, 1) // } // function gcd(_a, _b) -> out // { @@ -63,4 +59,6 @@ // case 0 { out := _a } // default { out := gcd(_b, mod(_a, _b)) } // } +// function foo_singlereturn() +// { extcodecopy(1, msize(), 1, 1) } // } diff --git a/test/libyul/yulOptimizerTests/fullSuite/structural_simplification.yul b/test/libyul/yulOptimizerTests/fullSuite/structural_simplification.yul index 85a975fde188..aabc14f15106 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/structural_simplification.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/structural_simplification.yul @@ -8,4 +8,11 @@ // ---- // step: fullSuite // -// { { sstore(1, 0x20) } } +// { +// { +// mstore(0x40, 0x20) +// for { } iszero(1) { } +// { } +// sstore(1, mload(0x40)) +// } +// } diff --git a/test/libyul/yulOptimizerTests/fullSuite/unusedFunctionParameterPruner_loop.yul b/test/libyul/yulOptimizerTests/fullSuite/unusedFunctionParameterPruner_loop.yul index 148f4a1e7ea0..f0b7546d0592 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/unusedFunctionParameterPruner_loop.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/unusedFunctionParameterPruner_loop.yul @@ -20,46 +20,18 @@ // { // { // f() -// f_72() -// f_73() +// f() +// f() // sstore(0, 1) // } // function f() // { -// let a := 1 -// let b := 10 -// let a_1 := calldataload(0) -// let _1 := iszero(a_1) -// for { } iszero(b) { b := add(b, not(0)) } -// { -// a := a_1 -// mstore(a_1, 0) -// if _1 { leave } -// } -// } -// function f_72() -// { -// let a := 2 -// let b := 10 -// let a_1 := calldataload(0) -// let _1 := iszero(a_1) -// for { } iszero(b) { b := add(b, not(0)) } -// { -// a := a_1 -// mstore(a_1, 0) -// if _1 { leave } -// } -// } -// function f_73() -// { -// let a := 3 // let b := 10 -// let a_1 := calldataload(0) -// let _1 := iszero(a_1) +// let a := calldataload(0) +// let _1 := iszero(a) // for { } iszero(b) { b := add(b, not(0)) } // { -// a := a_1 -// mstore(a_1, 0) +// mstore(a, 0) // if _1 { leave } // } // }