mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Handle "leaf functions" first in full inliner.
This commit is contained in:
@@ -9,22 +9,25 @@
|
||||
// {
|
||||
// {
|
||||
// let _1 := 7
|
||||
// let a_6 := 3
|
||||
// let x_7 := 0
|
||||
// x_7 := add(a_6, a_6)
|
||||
// let b_8 := x_7
|
||||
// let c_9 := _1
|
||||
// let y_10 := 0
|
||||
// y_10 := mul(mload(c_9), f(b_8))
|
||||
// let y_1 := y_10
|
||||
// let a_8 := 3
|
||||
// let x_9 := 0
|
||||
// x_9 := add(a_8, a_8)
|
||||
// let b_10 := x_9
|
||||
// let c_11 := _1
|
||||
// let y_12 := 0
|
||||
// let a_6_13 := b_10
|
||||
// let x_7_14 := 0
|
||||
// x_7_14 := add(a_6_13, a_6_13)
|
||||
// y_12 := mul(mload(c_11), x_7_14)
|
||||
// let y_1 := y_12
|
||||
// }
|
||||
// function f(a) -> x
|
||||
// { x := add(a, a) }
|
||||
// function g(b, c) -> y
|
||||
// {
|
||||
// let a_13 := b
|
||||
// let x_14 := 0
|
||||
// x_14 := add(a_13, a_13)
|
||||
// y := mul(mload(c), x_14)
|
||||
// let a_6 := b
|
||||
// let x_7 := 0
|
||||
// x_7 := add(a_6, a_6)
|
||||
// y := mul(mload(c), x_7)
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -26,20 +26,14 @@
|
||||
// step: fullInliner
|
||||
//
|
||||
// {
|
||||
// {
|
||||
// let x_8 := 100
|
||||
// mstore(0, x_8)
|
||||
// mstore(7, h())
|
||||
// g(10)
|
||||
// mstore(1, x_8)
|
||||
// }
|
||||
// { f(100) }
|
||||
// function f(x)
|
||||
// {
|
||||
// mstore(0, x)
|
||||
// let t_14 := 0
|
||||
// t_14 := 2
|
||||
// mstore(7, t_14)
|
||||
// let x_1_15 := 10
|
||||
// let t_8 := 0
|
||||
// t_8 := 2
|
||||
// mstore(7, t_8)
|
||||
// let x_1_9 := 10
|
||||
// f(1)
|
||||
// mstore(1, x)
|
||||
// }
|
||||
|
||||
@@ -473,22 +473,22 @@
|
||||
// let i := _1
|
||||
// for { } lt(i, length) { i := add(i, 1) }
|
||||
// {
|
||||
// abi_encode_t_array$_C_memory(mload(srcPtr), pos)
|
||||
// let _3 := mload(srcPtr)
|
||||
// let pos_1 := pos
|
||||
// let srcPtr_1 := _3
|
||||
// let i_1 := _1
|
||||
// for { } lt(i_1, 0x3) { i_1 := add(i_1, 1) }
|
||||
// {
|
||||
// mstore(pos_1, and(mload(srcPtr_1), sub(shl(160, 1), 1)))
|
||||
// srcPtr_1 := add(srcPtr_1, 0x20)
|
||||
// pos_1 := add(pos_1, 0x20)
|
||||
// }
|
||||
// srcPtr := add(srcPtr, 0x20)
|
||||
// pos := add(pos, 0x60)
|
||||
// }
|
||||
// let _3 := mload(64)
|
||||
// let _4 := mload(0x20)
|
||||
// if slt(sub(_3, _4), 128) { revert(_1, _1) }
|
||||
// let offset := calldataload(add(_4, 64))
|
||||
// let _5 := 0xffffffffffffffff
|
||||
// if gt(offset, _5) { revert(_1, _1) }
|
||||
// let value2 := abi_decode_t_array$_t_uint256_$dyn(add(_4, offset), _3)
|
||||
// let offset_1 := calldataload(add(_4, 0x60))
|
||||
// if gt(offset_1, _5) { revert(_1, _1) }
|
||||
// let value3 := abi_decode_t_array$_t_array$_t_uint256_memory_$dyn(add(_4, offset_1), _3)
|
||||
// sstore(calldataload(_4), calldataload(add(_4, 0x20)))
|
||||
// sstore(value2, value3)
|
||||
// let a, b, c, d := abi_decode_uint256t_uint256t_array$_t_uint256_$dynt_array$_t_array$_t_uint256_memory_$dyn(mload(0x20), mload(64))
|
||||
// sstore(a, b)
|
||||
// sstore(c, d)
|
||||
// sstore(_1, pos)
|
||||
// }
|
||||
// function abi_decode_t_array$_t_array$_t_uint256_memory_$dyn(offset, end) -> array
|
||||
@@ -508,14 +508,13 @@
|
||||
// for { } lt(i, length) { i := add(i, 1) }
|
||||
// {
|
||||
// if iszero(slt(add(src, _1), end)) { revert(0, 0) }
|
||||
// let _4 := 0x2
|
||||
// let dst_1 := allocateMemory(array_allocation_size_t_array$_t_uint256_memory(_4))
|
||||
// let dst_1 := allocateMemory(_3)
|
||||
// let dst_2 := dst_1
|
||||
// let src_1 := src
|
||||
// let _5 := add(src, _3)
|
||||
// if gt(_5, end) { revert(0, 0) }
|
||||
// let _4 := add(src, _3)
|
||||
// if gt(_4, end) { revert(0, 0) }
|
||||
// let i_1 := 0
|
||||
// for { } lt(i_1, _4) { i_1 := add(i_1, 1) }
|
||||
// for { } lt(i_1, 0x2) { i_1 := add(i_1, 1) }
|
||||
// {
|
||||
// mstore(dst_1, calldataload(src_1))
|
||||
// dst_1 := add(dst_1, _2)
|
||||
@@ -523,39 +522,38 @@
|
||||
// }
|
||||
// mstore(dst, dst_2)
|
||||
// dst := add(dst, _2)
|
||||
// src := _5
|
||||
// src := _4
|
||||
// }
|
||||
// }
|
||||
// function abi_decode_t_array$_t_uint256_$dyn(offset, end) -> array
|
||||
// function abi_decode_uint256t_uint256t_array$_t_uint256_$dynt_array$_t_array$_t_uint256_memory_$dyn(headStart, dataEnd) -> value0, value1, value2, value3
|
||||
// {
|
||||
// if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
|
||||
// let length := calldataload(offset)
|
||||
// array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory(length))
|
||||
// let dst := array
|
||||
// mstore(array, length)
|
||||
// let _1 := 0x20
|
||||
// dst := add(array, _1)
|
||||
// let src := add(offset, _1)
|
||||
// if gt(add(add(offset, mul(length, _1)), _1), end) { revert(0, 0) }
|
||||
// let i := 0
|
||||
// if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }
|
||||
// value0 := calldataload(headStart)
|
||||
// let _1 := 32
|
||||
// value1 := calldataload(add(headStart, _1))
|
||||
// let offset := calldataload(add(headStart, 64))
|
||||
// let _2 := 0xffffffffffffffff
|
||||
// if gt(offset, _2) { revert(value2, value2) }
|
||||
// let _3 := add(headStart, offset)
|
||||
// if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(value2, value2) }
|
||||
// let length := calldataload(_3)
|
||||
// let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory(length))
|
||||
// let dst_1 := dst
|
||||
// mstore(dst, length)
|
||||
// dst := add(dst, _1)
|
||||
// let src := add(_3, _1)
|
||||
// if gt(add(add(_3, mul(length, _1)), _1), dataEnd) { revert(value2, value2) }
|
||||
// let i := value2
|
||||
// for { } lt(i, length) { i := add(i, 1) }
|
||||
// {
|
||||
// mstore(dst, calldataload(src))
|
||||
// dst := add(dst, _1)
|
||||
// src := add(src, _1)
|
||||
// }
|
||||
// }
|
||||
// function abi_encode_t_array$_C_memory(value, pos)
|
||||
// {
|
||||
// let srcPtr := value
|
||||
// let i := 0
|
||||
// for { } lt(i, 0x3) { i := add(i, 1) }
|
||||
// {
|
||||
// mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))
|
||||
// let _1 := 0x20
|
||||
// srcPtr := add(srcPtr, _1)
|
||||
// pos := add(pos, _1)
|
||||
// }
|
||||
// value2 := dst_1
|
||||
// let offset_1 := calldataload(add(headStart, 96))
|
||||
// if gt(offset_1, _2) { revert(value3, value3) }
|
||||
// value3 := abi_decode_t_array$_t_array$_t_uint256_memory_$dyn(add(headStart, offset_1), dataEnd)
|
||||
// }
|
||||
// function allocateMemory(size) -> memPtr
|
||||
// {
|
||||
@@ -569,9 +567,4 @@
|
||||
// if gt(length, 0xffffffffffffffff) { revert(size, size) }
|
||||
// size := add(mul(length, 0x20), 0x20)
|
||||
// }
|
||||
// function array_allocation_size_t_array$_t_uint256_memory(length) -> size
|
||||
// {
|
||||
// if gt(length, 0xffffffffffffffff) { revert(size, size) }
|
||||
// size := mul(length, 0x20)
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
// sstore(not(gcd(10, 15)), 1)
|
||||
// sstore(0, 0)
|
||||
// sstore(2, 1)
|
||||
// extcodecopy(1, msize(), 1, 1)
|
||||
// pop(foo_singlereturn_1_78_308(calldataload(0), calldataload(3)))
|
||||
// sstore(0, 0)
|
||||
// sstore(3, 1)
|
||||
// }
|
||||
@@ -59,4 +59,6 @@
|
||||
// case 0 { out := _a }
|
||||
// default { out := gcd(_b, mod(_a, _b)) }
|
||||
// }
|
||||
// function foo_singlereturn_1_78_308(in, in_1) -> out
|
||||
// { extcodecopy(1, msize(), 1, 1) }
|
||||
// }
|
||||
|
||||
@@ -17,15 +17,18 @@
|
||||
//
|
||||
// {
|
||||
// {
|
||||
// let out1, out2 := foo(sload(32))
|
||||
// sstore(0, out1)
|
||||
// sstore(0, out2)
|
||||
// let out1_1, out2_1 := foo(sload(8))
|
||||
// let _1 := sload(32)
|
||||
// let x, y := foo_21_70(sload(0), _1)
|
||||
// sstore(0, x)
|
||||
// sstore(0, y)
|
||||
// let x_1, y_1 := foo_21_70(_1, sload(8))
|
||||
// }
|
||||
// function foo(b) -> out1, out2
|
||||
// function foo_21_70(a, b) -> out1, out2
|
||||
// {
|
||||
// out1 := sload(mload(32))
|
||||
// out2 := add(out1, 1)
|
||||
// extcodecopy(out1, out2, 1, b)
|
||||
// let out1_1 := sload(mload(32))
|
||||
// let out2_1 := add(out1_1, 1)
|
||||
// extcodecopy(out1_1, out2_1, 1, b)
|
||||
// out1 := out1_1
|
||||
// out2 := out2_1
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -15,19 +15,15 @@
|
||||
//
|
||||
// {
|
||||
// {
|
||||
// f()
|
||||
// sstore(0, 1)
|
||||
// f()
|
||||
// sstore(0, 1)
|
||||
// f()
|
||||
// sstore(0, 1)
|
||||
// sstore(f_23_88(1), 1)
|
||||
// sstore(f_23_88(2), 1)
|
||||
// sstore(f_23_88(3), 1)
|
||||
// }
|
||||
// function f()
|
||||
// function f_23_88(a) -> x
|
||||
// {
|
||||
// let b := 10
|
||||
// let _1 := 0
|
||||
// let a := calldataload(_1)
|
||||
// let a_1 := calldataload(x)
|
||||
// for { } iszero(b) { b := add(b, not(0)) }
|
||||
// { mstore(a, _1) }
|
||||
// { mstore(a_1, x) }
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -19,16 +19,18 @@
|
||||
//
|
||||
// {
|
||||
// {
|
||||
// let out1, out2 := foo(sload(32))
|
||||
// sstore(0, out1)
|
||||
// sstore(0, out2)
|
||||
// sstore(0, 0)
|
||||
// let out1_1, out2_1 := foo(sload(8))
|
||||
// let _1 := sload(32)
|
||||
// let x, y, z := foo_24_75(sload(0), _1)
|
||||
// sstore(0, x)
|
||||
// sstore(0, y)
|
||||
// sstore(0, z)
|
||||
// let x_1, y_1, z_1 := foo_24_75(_1, sload(8))
|
||||
// }
|
||||
// function foo(b) -> out1, out2
|
||||
// function foo_24_75(a, b) -> out1, out2, out3
|
||||
// {
|
||||
// out1 := sload(mload(32))
|
||||
// out2 := add(out1, 1)
|
||||
// extcodecopy(out1, out1, 1, b)
|
||||
// let out1_1 := sload(mload(32))
|
||||
// extcodecopy(out1_1, out1_1, 1, b)
|
||||
// out1 := out1_1
|
||||
// out2 := add(out1_1, 1)
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -18,19 +18,28 @@
|
||||
//
|
||||
// {
|
||||
// {
|
||||
// f()
|
||||
// sstore(0, 1)
|
||||
// f()
|
||||
// sstore(0, 1)
|
||||
// f()
|
||||
// sstore(0, 1)
|
||||
// }
|
||||
// function f()
|
||||
// {
|
||||
// mstore(calldataload(0), 0)
|
||||
// sstore(1, 1)
|
||||
// sstore(2, 2)
|
||||
// sstore(3, 3)
|
||||
// sstore(3, 3)
|
||||
// let _1 := 0
|
||||
// let _2 := calldataload(_1)
|
||||
// mstore(_2, _1)
|
||||
// let _3 := 1
|
||||
// sstore(_3, _3)
|
||||
// let _4 := 2
|
||||
// sstore(_4, _4)
|
||||
// let _5 := 3
|
||||
// sstore(_5, _5)
|
||||
// sstore(_5, _5)
|
||||
// sstore(_1, _3)
|
||||
// mstore(_2, _1)
|
||||
// sstore(_3, _3)
|
||||
// sstore(_4, _4)
|
||||
// sstore(_5, _5)
|
||||
// sstore(_5, _5)
|
||||
// sstore(_1, _3)
|
||||
// mstore(_2, _1)
|
||||
// sstore(_3, _3)
|
||||
// sstore(_4, _4)
|
||||
// sstore(_5, _5)
|
||||
// sstore(_5, _5)
|
||||
// sstore(_1, _3)
|
||||
// }
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user