Add test cases for return slot allocation.

This commit is contained in:
Daniel Kirchner 2021-03-09 16:39:40 +01:00
parent 5433a640fb
commit 04a051d380
10 changed files with 218 additions and 0 deletions

View File

@ -0,0 +1,28 @@
{
function f(a, b, c) -> x { pop(address()) sstore(a, c) pop(callvalue()) x := b }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0x17
// JUMP
// JUMPDEST
// PUSH1 0x0
// ADDRESS
// POP
// DUP4
// DUP3
// SSTORE
// CALLVALUE
// POP
// DUP3
// SWAP1
// POP
// JUMPDEST
// SWAP4
// SWAP3
// POP
// POP
// POP
// JUMP
// JUMPDEST

View File

@ -0,0 +1,27 @@
{
/* function f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) -> x {
mstore(0x0100, a1)
mstore(0x0120, a2)
mstore(0x0140, a3)
mstore(0x0160, a4)
mstore(0x0180, a5)
mstore(0x01A0, a6)
mstore(0x01C0, a7)
mstore(0x01E0, a8)
mstore(0x0200, a9)
mstore(0x0220, a10)
mstore(0x0240, a11)
mstore(0x0260, a12)
mstore(0x0280, a13)
mstore(0x02A0, a14)
mstore(0x02C0, a15)
mstore(0x02E0, a16)
mstore(0x0300, a17)
mstore(0x0320, a18)
mstore(0x0340, a19)
x := a20
}*/
}
// ====
// stackOptimization: true
// ----

View File

@ -0,0 +1,18 @@
{
function f() -> x { pop(address()) { pop(callvalue()) } }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0xD
// JUMP
// JUMPDEST
// PUSH1 0x0
// ADDRESS
// POP
// CALLVALUE
// POP
// JUMPDEST
// SWAP1
// JUMP
// JUMPDEST

View File

@ -0,0 +1,18 @@
{
function f() -> x { pop(address()) let y := callvalue() }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0xD
// JUMP
// JUMPDEST
// PUSH1 0x0
// ADDRESS
// POP
// CALLVALUE
// POP
// JUMPDEST
// SWAP1
// JUMP
// JUMPDEST

View File

@ -0,0 +1,27 @@
{
function f() -> x { pop(address()) for { pop(callvalue()) } 0 {} { } }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0x19
// JUMP
// JUMPDEST
// PUSH1 0x0
// ADDRESS
// POP
// CALLVALUE
// POP
// JUMPDEST
// PUSH1 0x0
// ISZERO
// PUSH1 0x15
// JUMPI
// JUMPDEST
// PUSH1 0xA
// JUMP
// JUMPDEST
// JUMPDEST
// SWAP1
// JUMP
// JUMPDEST

View File

@ -0,0 +1,23 @@
{
function f() -> x { pop(address()) if 1 { pop(callvalue()) } }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0x14
// JUMP
// JUMPDEST
// PUSH1 0x0
// ADDRESS
// POP
// PUSH1 0x1
// ISZERO
// PUSH1 0x10
// JUMPI
// CALLVALUE
// POP
// JUMPDEST
// JUMPDEST
// SWAP1
// JUMP
// JUMPDEST

View File

@ -0,0 +1,20 @@
{
function f() -> x { pop(address()) leave pop(callvalue()) }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0x10
// JUMP
// JUMPDEST
// PUSH1 0x0
// ADDRESS
// POP
// PUSH1 0xD
// JUMP
// CALLVALUE
// POP
// JUMPDEST
// SWAP1
// JUMP
// JUMPDEST

View File

@ -0,0 +1,21 @@
{
function f() -> x { pop(address()) sstore(0, x) pop(callvalue()) }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0x11
// JUMP
// JUMPDEST
// PUSH1 0x0
// ADDRESS
// POP
// DUP1
// PUSH1 0x0
// SSTORE
// CALLVALUE
// POP
// JUMPDEST
// SWAP1
// JUMP
// JUMPDEST

View File

@ -0,0 +1,16 @@
{
function f() -> x { pop(callvalue()) }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0xB
// JUMP
// JUMPDEST
// PUSH1 0x0
// CALLVALUE
// POP
// JUMPDEST
// SWAP1
// JUMP
// JUMPDEST

View File

@ -0,0 +1,20 @@
{
function f() -> x, y, z { pop(callvalue()) }
}
// ====
// stackOptimization: true
// ----
// PUSH1 0x11
// JUMP
// JUMPDEST
// PUSH1 0x0
// PUSH1 0x0
// PUSH1 0x0
// CALLVALUE
// POP
// JUMPDEST
// SWAP1
// SWAP2
// SWAP3
// JUMP
// JUMPDEST