Skip to content

Commit dbb7013

Browse files
committed
f
1 parent e1b876b commit dbb7013

File tree

4 files changed

+12
-3
lines changed

4 files changed

+12
-3
lines changed

libyul/backends/evm/SSACFGEVMCodeTransform.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,12 +331,17 @@ void SSACFGEVMCodeTransform::operator()(SSACFG::BlockId const _block)
331331
yulAssert(static_cast<size_t>(m_assembly.stackHeight()) == m_stack.size());
332332
m_assembly.setStackHeight(m_assembly.stackHeight()+1);
333333
std::vector<SSACFGStackLayout::Slot> returnSlots;
334+
335+
// [label, ret1, ret2, ..., retn]
334336
if (!_return.returnValues.empty())
335337
{
336338
returnSlots.assign(_return.returnValues.begin()+1, _return.returnValues.end());
337339
returnSlots.emplace_back(_return.returnValues.front());
340+
338341
shuffleStack(returnSlots);
342+
// stack = [..., label, ret2, ..., retn, ret1]
339343
m_assembly.appendInstruction(evmasm::swapInstruction(static_cast<unsigned>(_return.returnValues.size())));
344+
// swapN -> stack = [..., ret1, ret2, ..., retn, label]
340345
}
341346
else
342347
shuffleStack(returnSlots);

libyul/backends/evm/ssa/OperationForwardShuffler.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,9 @@ class OperationForwardShuffler
358358
yulAssert(_stack.empty() || std::holds_alternative<JunkSlot>(_stack.top()) || ops.stackStats.argsCount(_stack.top()) > 0 || ops.stackStats.tailCount(_stack.top()) > 0 || ops.isArgsCompatible(0, 0));
359359

360360
// if the top is junk and popping it fixes more positions in args than not popping it, pop it, next step
361+
// want: [arg3, arg2, arg1]
362+
// have: [arg3, arg2, arg1, JUNK]
363+
// -> popping JUNK fixes three arg positions immediately
361364
if (!_stack.empty() && std::holds_alternative<JunkSlot>(_stack.top()))
362365
{
363366
std::ptrdiff_t score = 0;

libyul/backends/evm/ssa/StackLayoutGenerator.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ void StackLayoutGenerator::visitBlock(SSACFG::BlockId const& _blockId)
421421
//auto const nonZeroUsed = m_liveness.used(cjump->nonZero);
422422
//auto const zeroUsed = m_liveness.used(cjump->zero);
423423

424+
// todo isn't this the same as looking at the live-out of the current block!?
424425
LivenessAnalysis::LivenessData liveOutUnion;
425426
for (auto const& [liveIn, target]: { std::pair{&zeroLiveIn, cjump->zero}, std::pair{&nonZeroLiveIn, cjump->nonZero} }) {
426427
ReversePhiFunctionTransform transf(m_cfg, _blockId, target);

tools/yulBench/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,15 @@ solidity::yul::ssa::ControlFlowLiveness computeLiveness(solidity::yul::ssa::Cont
8181
}
8282

8383
static void BM_BuildSSACFG(benchmark::State& state) {
84-
auto const& object = parse("/home/mho/dev/solidity/PoolManager_optimized.yul");
84+
auto const& object = parse("/home/mho/dev/solidity/deposit_ir.yul");
8585
for (auto _ : state) {
8686
auto cfg = buildSSACFG(*object);
8787
benchmark::DoNotOptimize(cfg);
8888
}
8989
}
9090

9191
static void BM_SSACFGLiveness(benchmark::State& state) {
92-
auto const& object = parse("/home/mho/dev/solidity/PoolManager_optimized.yul");
92+
auto const& object = parse("/home/mho/dev/solidity/deposit_ir.yul");
9393
auto const cfg = buildSSACFG(*object);
9494
for (auto _ : state) {
9595
auto cfgLiveness = computeLiveness(*cfg);
@@ -98,7 +98,7 @@ static void BM_SSACFGLiveness(benchmark::State& state) {
9898
}
9999

100100
static void BM_SSACFGStackLayoutGenerator(benchmark::State& state) {
101-
auto const& object = parse("/home/mho/dev/solidity/PoolManager_optimized.yul");
101+
auto const& object = parse("/home/mho/dev/solidity/deposit_ir.yul");
102102
auto const cfg = buildSSACFG(*object);
103103
auto const cfgLiveness = computeLiveness(*cfg);
104104
for (auto _ : state) {

0 commit comments

Comments
 (0)