mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #11328 from ethereum/respectMemoryModelForInit
Respect memory model for init
This commit is contained in:
commit
f1d58c549b
@ -802,29 +802,24 @@ void IRGenerator::generateImplicitConstructors(ContractDefinition const& _contra
|
||||
string IRGenerator::deployCode(ContractDefinition const& _contract)
|
||||
{
|
||||
Whiskers t(R"X(
|
||||
<#loadImmutables>
|
||||
let <var> := mload(<memoryOffset>)
|
||||
</loadImmutables>
|
||||
|
||||
codecopy(0, dataoffset("<object>"), datasize("<object>"))
|
||||
|
||||
<#storeImmutables>
|
||||
setimmutable(0, "<immutableName>", <var>)
|
||||
</storeImmutables>
|
||||
|
||||
return(0, datasize("<object>"))
|
||||
let <codeOffset> := <allocateUnbounded>()
|
||||
codecopy(<codeOffset>, dataoffset("<object>"), datasize("<object>"))
|
||||
<#immutables>
|
||||
setimmutable(<codeOffset>, "<immutableName>", <value>)
|
||||
</immutables>
|
||||
return(<codeOffset>, datasize("<object>"))
|
||||
)X");
|
||||
t("allocateUnbounded", m_utils.allocateUnboundedFunction());
|
||||
t("codeOffset", m_context.newYulVariable());
|
||||
t("object", IRNames::deployedObject(_contract));
|
||||
|
||||
vector<map<string, string>> loadImmutables;
|
||||
vector<map<string, string>> storeImmutables;
|
||||
|
||||
vector<map<string, string>> immutables;
|
||||
if (_contract.isLibrary())
|
||||
{
|
||||
solAssert(ContractType(_contract).immutableVariables().empty(), "");
|
||||
storeImmutables.emplace_back(map<string, string>{
|
||||
{"var"s, "address()"},
|
||||
{"immutableName"s, IRNames::libraryAddressImmutable()}
|
||||
immutables.emplace_back(map<string, string>{
|
||||
{"immutableName"s, IRNames::libraryAddressImmutable()},
|
||||
{"value"s, "address()"}
|
||||
});
|
||||
|
||||
}
|
||||
@ -833,20 +828,12 @@ string IRGenerator::deployCode(ContractDefinition const& _contract)
|
||||
{
|
||||
solUnimplementedAssert(immutable->type()->isValueType(), "");
|
||||
solUnimplementedAssert(immutable->type()->sizeOnStack() == 1, "");
|
||||
string yulVar = m_context.newYulVariable();
|
||||
loadImmutables.emplace_back(map<string, string>{
|
||||
{"var"s, yulVar},
|
||||
{"memoryOffset"s, to_string(m_context.immutableMemoryOffset(*immutable))}
|
||||
});
|
||||
storeImmutables.emplace_back(map<string, string>{
|
||||
{"var"s, yulVar},
|
||||
{"immutableName"s, to_string(immutable->id())}
|
||||
immutables.emplace_back(map<string, string>{
|
||||
{"immutableName"s, to_string(immutable->id())},
|
||||
{"value"s, "mload(" + to_string(m_context.immutableMemoryOffset(*immutable)) + ")"}
|
||||
});
|
||||
}
|
||||
t("loadImmutables", std::move(loadImmutables));
|
||||
// reverse order to ease stack strain
|
||||
reverse(storeImmutables.begin(), storeImmutables.end());
|
||||
t("storeImmutables", std::move(storeImmutables));
|
||||
t("immutables", std::move(immutables));
|
||||
return t.render();
|
||||
}
|
||||
|
||||
|
@ -13,8 +13,8 @@ object "C_12" {
|
||||
if callvalue() { revert(0, 0) }
|
||||
sstore(0, shl(180, 1))
|
||||
let _1 := datasize("C_12_deployed")
|
||||
codecopy(0, dataoffset("C_12_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_12_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_12_deployed" {
|
||||
|
@ -14,9 +14,14 @@ object "C_81" {
|
||||
|
||||
constructor_C_81()
|
||||
|
||||
codecopy(0, dataoffset("C_81_deployed"), datasize("C_81_deployed"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset("C_81_deployed"), datasize("C_81_deployed"))
|
||||
|
||||
return(0, datasize("C_81_deployed"))
|
||||
return(_1, datasize("C_81_deployed"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_81() {
|
||||
|
||||
|
@ -12,8 +12,8 @@ object "C_7" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("C_7_deployed")
|
||||
codecopy(0, dataoffset("C_7_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_7_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_7_deployed" {
|
||||
@ -40,8 +40,8 @@ object "D_10" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("D_10_deployed")
|
||||
codecopy(0, dataoffset("D_10_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("D_10_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "D_10_deployed" {
|
||||
|
@ -12,8 +12,8 @@ object "C_3" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("C_3_deployed")
|
||||
codecopy(0, dataoffset("C_3_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_3_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_3_deployed" {
|
||||
@ -40,8 +40,8 @@ object "D_16" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("D_16_deployed")
|
||||
codecopy(0, dataoffset("D_16_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("D_16_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "D_16_deployed" {
|
||||
@ -82,8 +82,8 @@ object "D_16" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("C_3_deployed")
|
||||
codecopy(0, dataoffset("C_3_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_3_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_3_deployed" {
|
||||
|
@ -12,8 +12,8 @@ object "D_12" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("D_12_deployed")
|
||||
codecopy(0, dataoffset("D_12_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("D_12_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "D_12_deployed" {
|
||||
|
@ -12,8 +12,8 @@ object "D_8" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("D_8_deployed")
|
||||
codecopy(0, dataoffset("D_8_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("D_8_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "D_8_deployed" {
|
||||
|
@ -14,8 +14,8 @@ object "C_12" {
|
||||
mstore(0, 100)
|
||||
sstore(0, keccak256(0, 32))
|
||||
let _1 := datasize("C_12_deployed")
|
||||
codecopy(0, dataoffset("C_12_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_12_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_12_deployed" {
|
||||
|
@ -12,8 +12,8 @@ object "C_7" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("C_7_deployed")
|
||||
codecopy(0, dataoffset("C_7_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_7_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_7_deployed" {
|
||||
|
@ -12,8 +12,8 @@ object "C_59" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("C_59_deployed")
|
||||
codecopy(0, dataoffset("C_59_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_59_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_59_deployed" {
|
||||
|
@ -12,8 +12,8 @@ object "Arraysum_34" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("Arraysum_34_deployed")
|
||||
codecopy(0, dataoffset("Arraysum_34_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("Arraysum_34_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "Arraysum_34_deployed" {
|
||||
|
@ -1,4 +1,4 @@
|
||||
{"contracts":{"A":{"C":{"ewasm":{"wasm":"0061736d010000000125086000006000017e6000017f60017e017f60017f0060017f017f60027f7f0060037f7f7f0002510408657468657265756d08636f6465436f7079000708657468657265756d06726576657274000608657468657265756d0c67657443616c6c56616c7565000408657468657265756d0666696e697368000603090800020302020505010503010001060100071102066d656d6f72790200046d61696e000400b6030c435f335f6465706c6f7965640061736d010000000112046000006000017f60017f017f60027f7f0002130108657468657265756d06726576657274000303060500010102020503010001060100071102066d656d6f72790200046d61696e00010ad20205a10104027f017e017f047e024010022100200041c0006a210120012000490440000b420021022002a7210320031005ad42208621042002422088210520042005a71005ad84210620012006370000200141086a2006370000200141106a2006370000428001a71005ad4220862107200141186a2007428001422088a71005ad8437000020022002200284200284520440000b20022005520440000b1003200310000b0b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b4203017f017e017f02404200210120012001200184200184520440000b20012001422088520440000b2001a72102200241c0006a210020002002490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100441107421022002200041107610047221010b20010b0aa603089a0102027f047e024010072100200041c0006a210120012000490440000b4200a7100aad422086210220024200422088a7100aad84210320012003370000200141086a2003370000200141106a2003370000200141186a100b37000041001002410829000021044200420084200441002900008484504504401008100510010b42a9032105100842b801100620051006100010082005100610030b0b2f02017f017e02404200210120012001200184200184520440000b20012001422088520440000b2001a721000b20000b2901017f024042004200420084420084520440000b42002000422088520440000b2000a721010b20010b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b1e01027f024010052101200141c0006a210020002001490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100941107421022002200041107610097221010b20010b2401027e0240428001a7100aad42208621012001428001422088a7100aad8421000b20000b","wast":"(module
|
||||
{"contracts":{"A":{"C":{"ewasm":{"wasm":"0061736d010000000125086000006000017e6000017f60017e017f60017f0060017f017f60027f7f0060037f7f7f0002510408657468657265756d08636f6465436f7079000708657468657265756d06726576657274000608657468657265756d0c67657443616c6c56616c7565000408657468657265756d0666696e6973680006030a090002030202020505010503010001060100071102066d656d6f72790200046d61696e000400b6030c435f335f6465706c6f7965640061736d010000000112046000006000017f60017f017f60027f7f0002130108657468657265756d06726576657274000303060500010102020503010001060100071102066d656d6f72790200046d61696e00010ad20205a10104027f017e017f047e024010022100200041c0006a210120012000490440000b420021022002a7210320031005ad42208621042002422088210520042005a71005ad84210620012006370000200141086a2006370000200141106a2006370000428001a71005ad4220862107200141186a2007428001422088a71005ad8437000020022002200284200284520440000b20022005520440000b1003200310000b0b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b4203017f017e017f02404200210120012001200184200184520440000b20012001422088520440000b2001a72102200241c0006a210020002002490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100441107421022002200041107610047221010b20010b0ae303099a0102027f047e024010072100200041c0006a210120012000490440000b4200a7100bad422086210220024200422088a7100bad84210320012003370000200141086a2003370000200141106a2003370000200141186a100c37000041001002410829000021044200420084200441002900008484504504401008100510010b42a9032105100942b901100620051006100010092005100610030b0b2f02017f017e02404200210120012001200184200184520440000b20012001422088520440000b2001a721000b20000b2901017f024042004200420084420084520440000b42002000422088520440000b2000a721010b20010b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b1e01027f024010052101200141c0006a210020002001490440000b0b20000b3c01027f024042004200420084420084520440000b4200428001422088520440000b428001a72101200141c0006a210020002001490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100a411074210220022000411076100a7221010b20010b2401027e0240428001a7100bad42208621012001428001422088a7100bad8421000b20000b","wast":"(module
|
||||
;; custom section for sub-module
|
||||
;; The Keccak-256 hash of the text representation of \"C_3_deployed\": d5523336521d49fa8bd64dba28ece7291aa7d45c646a23eabd038bbeecc2d803
|
||||
;; (@custom \"C_3_deployed\" \"0061736d010000000112046000006000017f60017f017f60027f7f0002130108657468657265756d06726576657274000303060500010102020503010001060100071102066d656d6f72790200046d61696e00010ad20205a10104027f017e017f047e024010022100200041c0006a210120012000490440000b420021022002a7210320031005ad42208621042002422088210520042005a71005ad84210620012006370000200141086a2006370000200141106a2006370000428001a71005ad4220862107200141186a2007428001422088a71005ad8437000020022002200284200284520440000b20022005520440000b1003200310000b0b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b4203017f017e017f02404200210120012001200184200184520440000b20012001422088520440000b2001a72102200241c0006a210020002002490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100441107421022002200041107610047221010b20010b\")
|
||||
@ -32,8 +32,8 @@
|
||||
(if (i32.eqz (i64.eqz (i64.or (i64.or (i64.const 0) (i64.const 0)) (i64.or (local.get $z3) (i64.load (i32.const 0)))))) (then
|
||||
(call $eth.revert (call $to_internal_i32ptr) (call $u256_to_i32_344))))
|
||||
(local.set $_1 (datasize \"C_3_deployed\"))
|
||||
(call $eth.codeCopy (call $to_internal_i32ptr) (call $u256_to_i32 (dataoffset \"C_3_deployed\")) (call $u256_to_i32 (local.get $_1)))
|
||||
(call $eth.finish (call $to_internal_i32ptr) (call $u256_to_i32 (local.get $_1)))
|
||||
(call $eth.codeCopy (call $to_internal_i32ptr_348) (call $u256_to_i32 (dataoffset \"C_3_deployed\")) (call $u256_to_i32 (local.get $_1)))
|
||||
(call $eth.finish (call $to_internal_i32ptr_348) (call $u256_to_i32 (local.get $_1)))
|
||||
)
|
||||
)
|
||||
|
||||
@ -96,11 +96,29 @@
|
||||
(local.get $r)
|
||||
)
|
||||
|
||||
(func $to_internal_i32ptr_348
|
||||
(result i32)
|
||||
(local $r i32)
|
||||
(local $v i32)
|
||||
(block $label__5
|
||||
(if (i64.ne (i64.const 0) (i64.or (i64.or (i64.const 0) (i64.const 0)) (i64.const 0))) (then
|
||||
(unreachable)))
|
||||
(if (i64.ne (i64.const 0) (i64.shr_u (i64.const 128) (i64.const 32))) (then
|
||||
(unreachable)))
|
||||
(local.set $v (i32.wrap_i64 (i64.const 128)))
|
||||
(local.set $r (i32.add (local.get $v) (i32.const 64)))
|
||||
(if (i32.lt_u (local.get $r) (local.get $v)) (then
|
||||
(unreachable)))
|
||||
|
||||
)
|
||||
(local.get $r)
|
||||
)
|
||||
|
||||
(func $bswap16
|
||||
(param $x i32)
|
||||
(result i32)
|
||||
(local $y i32)
|
||||
(block $label__5
|
||||
(block $label__6
|
||||
(local.set $y (i32.or (i32.and (i32.shl (local.get $x) (i32.const 8)) (i32.const 65280)) (i32.and (i32.shr_u (local.get $x) (i32.const 8)) (i32.const 255))))
|
||||
|
||||
)
|
||||
@ -112,7 +130,7 @@
|
||||
(result i32)
|
||||
(local $y i32)
|
||||
(local $hi i32)
|
||||
(block $label__6
|
||||
(block $label__7
|
||||
(local.set $hi (i32.shl (call $bswap16 (local.get $x)) (i32.const 16)))
|
||||
(local.set $y (i32.or (local.get $hi) (call $bswap16 (i32.shr_u (local.get $x) (i32.const 16)))))
|
||||
|
||||
@ -124,7 +142,7 @@
|
||||
(result i64)
|
||||
(local $y i64)
|
||||
(local $hi i64)
|
||||
(block $label__7
|
||||
(block $label__8
|
||||
(local.set $hi (i64.shl (i64.extend_i32_u (call $bswap32 (i32.wrap_i64 (i64.const 128)))) (i64.const 32)))
|
||||
(local.set $y (i64.or (local.get $hi) (i64.extend_i32_u (call $bswap32 (i32.wrap_i64 (i64.shr_u (i64.const 128) (i64.const 32)))))))
|
||||
|
||||
|
@ -10,8 +10,11 @@ object \"C_7\" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
constructor_C_7()
|
||||
codecopy(0, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
|
||||
return(0, datasize(\"C_7_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
|
||||
return(_1, datasize(\"C_7_deployed\"))
|
||||
function allocate_unbounded() -> memPtr
|
||||
{ memPtr := mload(64) }
|
||||
function constructor_C_7()
|
||||
{ }
|
||||
}
|
||||
|
@ -13,9 +13,14 @@ object \"C_7\" {
|
||||
|
||||
constructor_C_7()
|
||||
|
||||
codecopy(0, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_7_deployed\"))
|
||||
return(_1, datasize(\"C_7_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_7() {
|
||||
|
||||
|
@ -13,9 +13,14 @@ object \"C_3\" {
|
||||
|
||||
constructor_C_3()
|
||||
|
||||
codecopy(0, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_3_deployed\"))
|
||||
return(_1, datasize(\"C_3_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_3() {
|
||||
|
||||
@ -64,9 +69,14 @@ object \"D_16\" {
|
||||
|
||||
constructor_D_16()
|
||||
|
||||
codecopy(0, dataoffset(\"D_16_deployed\"), datasize(\"D_16_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"D_16_deployed\"), datasize(\"D_16_deployed\"))
|
||||
|
||||
return(0, datasize(\"D_16_deployed\"))
|
||||
return(_1, datasize(\"D_16_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_D_16() {
|
||||
|
||||
@ -163,9 +173,14 @@ object \"D_16\" {
|
||||
|
||||
constructor_C_3()
|
||||
|
||||
codecopy(0, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_3_deployed\"))
|
||||
return(_1, datasize(\"C_3_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_3() {
|
||||
|
||||
|
@ -14,9 +14,14 @@ object "test_11" {
|
||||
|
||||
constructor_test_11()
|
||||
|
||||
codecopy(0, dataoffset("test_11_deployed"), datasize("test_11_deployed"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset("test_11_deployed"), datasize("test_11_deployed"))
|
||||
|
||||
return(0, datasize("test_11_deployed"))
|
||||
return(_1, datasize("test_11_deployed"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_test_11() {
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
======= viair_subobjects/input.sol:C =======
|
||||
Binary:
|
||||
60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd
|
||||
60806040523415600f5760006000fd5b600a80601e608039806080f350fe608060405260006000fd
|
||||
Binary of the runtime part:
|
||||
608060405260006000fd
|
||||
Optimized IR:
|
||||
@ -18,8 +18,8 @@ object "C_3" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("C_3_deployed")
|
||||
codecopy(0, dataoffset("C_3_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_3_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_3_deployed" {
|
||||
@ -35,9 +35,9 @@ object "C_3" {
|
||||
|
||||
======= viair_subobjects/input.sol:D =======
|
||||
Binary:
|
||||
608060405234156100105760006000fd5b60ba80610020600039806000f350fe6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd
|
||||
608060405234156100105760006000fd5b60ba80610020608039806080f350fe6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e608039806080f350fe608060405260006000fd
|
||||
Binary of the runtime part:
|
||||
6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd
|
||||
6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e608039806080f350fe608060405260006000fd
|
||||
Optimized IR:
|
||||
/*******************************************************
|
||||
* WARNING *
|
||||
@ -52,8 +52,8 @@ object "D_16" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("D_16_deployed")
|
||||
codecopy(0, dataoffset("D_16_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("D_16_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "D_16_deployed" {
|
||||
@ -94,8 +94,8 @@ object "D_16" {
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
let _1 := datasize("C_3_deployed")
|
||||
codecopy(0, dataoffset("C_3_deployed"), _1)
|
||||
return(0, _1)
|
||||
codecopy(128, dataoffset("C_3_deployed"), _1)
|
||||
return(128, _1)
|
||||
}
|
||||
}
|
||||
object "C_3_deployed" {
|
||||
|
@ -11,9 +11,12 @@ object "C_7" {
|
||||
{
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
codecopy(0, dataoffset("C_7_deployed"), datasize("C_7_deployed"))
|
||||
return(0, datasize("C_7_deployed"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset("C_7_deployed"), datasize("C_7_deployed"))
|
||||
return(_1, datasize("C_7_deployed"))
|
||||
}
|
||||
function allocate_unbounded() -> memPtr
|
||||
{ memPtr := mload(64) }
|
||||
}
|
||||
object "C_7_deployed" {
|
||||
code {
|
||||
|
@ -13,9 +13,14 @@ object \"C_11\" {
|
||||
|
||||
constructor_C_11()
|
||||
|
||||
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_11_deployed\"))
|
||||
return(_1, datasize(\"C_11_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_11() {
|
||||
|
||||
|
@ -13,9 +13,14 @@ object \"C_11\" {
|
||||
|
||||
constructor_C_11()
|
||||
|
||||
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_11_deployed\"))
|
||||
return(_1, datasize(\"C_11_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_11() {
|
||||
|
||||
|
@ -13,9 +13,14 @@ object \"C_11\" {
|
||||
|
||||
constructor_C_11()
|
||||
|
||||
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_11_deployed\"))
|
||||
return(_1, datasize(\"C_11_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_11() {
|
||||
|
||||
|
@ -13,9 +13,14 @@ object \"C_11\" {
|
||||
|
||||
constructor_C_11()
|
||||
|
||||
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_11_deployed\"))
|
||||
return(_1, datasize(\"C_11_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_11() {
|
||||
|
||||
|
@ -13,9 +13,14 @@ object \"C_11\" {
|
||||
|
||||
constructor_C_11()
|
||||
|
||||
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
let _1 := allocate_unbounded()
|
||||
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
|
||||
|
||||
return(0, datasize(\"C_11_deployed\"))
|
||||
return(_1, datasize(\"C_11_deployed\"))
|
||||
|
||||
function allocate_unbounded() -> memPtr {
|
||||
memPtr := mload(64)
|
||||
}
|
||||
|
||||
function constructor_C_11() {
|
||||
|
||||
|
@ -30,6 +30,6 @@ contract C is B {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// test() -> 77
|
||||
// gas irOptimized: 133623
|
||||
// gas irOptimized: 133635
|
||||
// gas legacy: 156573
|
||||
// gas legacyOptimized: 112940
|
||||
|
@ -38,5 +38,5 @@ contract C is B {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// test() -> 5, 10
|
||||
// gas irOptimized: 92612
|
||||
// gas irOptimized: 92624
|
||||
// gas legacy: 100441
|
||||
|
@ -21,6 +21,6 @@ contract B {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 2, 3, 4, 5, 6, 1000, 1001, 1002, 1003, 1004
|
||||
// gas irOptimized: 135871
|
||||
// gas irOptimized: 135883
|
||||
// gas legacy: 264410
|
||||
// gas legacyOptimized: 135699
|
||||
|
@ -45,6 +45,6 @@ contract C {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// test() -> 5, 6, 7
|
||||
// gas irOptimized: 345942
|
||||
// gas irOptimized: 345955
|
||||
// gas legacy: 500424
|
||||
// gas legacyOptimized: 309013
|
||||
|
@ -26,6 +26,6 @@ contract Main {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(uint256): 0x34 -> 0x46bddb1178e94d7f2892ff5f366840eb658911794f2c3a44c450aa2c505186c1
|
||||
// gas irOptimized: 115528
|
||||
// gas irOptimized: 115543
|
||||
// gas legacy: 127152
|
||||
// gas legacyOptimized: 113679
|
||||
|
@ -26,6 +26,6 @@ contract Creator {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(uint256,address[]): 7, 0x40, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -> 7, 8
|
||||
// gas irOptimized: 474619
|
||||
// gas irOptimized: 474718
|
||||
// gas legacy: 570900
|
||||
// gas legacyOptimized: 436724
|
||||
|
@ -26,6 +26,6 @@ contract Creator {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(uint256,bytes): 7, 0x40, 78, "abcdefghijklmnopqrstuvwxyzabcdef", "ghijklmnopqrstuvwxyzabcdefghijkl", "mnopqrstuvwxyz" -> 7, "h"
|
||||
// gas irOptimized: 330923
|
||||
// gas irOptimized: 330976
|
||||
// gas legacy: 414850
|
||||
// gas legacyOptimized: 292281
|
||||
|
@ -19,6 +19,6 @@ contract C {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(), 2000 ether -> true
|
||||
// gas irOptimized: 123725
|
||||
// gas irOptimized: 123743
|
||||
// gas legacy: 123226
|
||||
// gas legacyOptimized: 123092
|
||||
|
@ -28,6 +28,6 @@ contract C {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// t() -> 9
|
||||
// gas irOptimized: 103941
|
||||
// gas irOptimized: 103953
|
||||
// gas legacy: 161097
|
||||
// gas legacyOptimized: 112116
|
||||
|
@ -29,7 +29,7 @@ contract C {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 3, 7, 5
|
||||
// gas irOptimized: 131350
|
||||
// gas irOptimized: 131380
|
||||
// gas legacy: 153990
|
||||
// gas legacyOptimized: 127822
|
||||
// x() -> 7
|
||||
|
@ -23,8 +23,8 @@ contract D {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 1
|
||||
// gas irOptimized: 86492
|
||||
// gas irOptimized: 86504
|
||||
// gas legacy: 114412
|
||||
// g() -> 5
|
||||
// gas irOptimized: 86588
|
||||
// gas irOptimized: 86600
|
||||
// gas legacy: 114872
|
||||
|
@ -25,5 +25,5 @@ contract B {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// g() -> 42
|
||||
// gas irOptimized: 90623
|
||||
// gas irOptimized: 90635
|
||||
// gas legacy: 117797
|
||||
|
@ -25,6 +25,6 @@ contract B {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// g() -> 42
|
||||
// gas irOptimized: 119646
|
||||
// gas irOptimized: 119658
|
||||
// gas legacy: 180597
|
||||
// gas legacyOptimized: 117351
|
||||
|
@ -37,10 +37,10 @@ contract C {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// convertParent() -> 1
|
||||
// gas irOptimized: 103625
|
||||
// gas irOptimized: 103637
|
||||
// convertSubA() -> 1, 2
|
||||
// gas irOptimized: 105708
|
||||
// gas irOptimized: 105720
|
||||
// gas legacy: 101703
|
||||
// convertSubB() -> 1, 3
|
||||
// gas irOptimized: 105642
|
||||
// gas irOptimized: 105654
|
||||
// gas legacy: 101637
|
||||
|
@ -22,6 +22,6 @@ contract A {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(), 10 ether -> 3007, 3008, 3009
|
||||
// gas irOptimized: 294216
|
||||
// gas irOptimized: 294279
|
||||
// gas legacy: 422027
|
||||
// gas legacyOptimized: 287256
|
||||
|
Loading…
Reference in New Issue
Block a user