Conversation
There was a problem hiding this comment.
here the guards are a bit strict perhaps. i managed to get rid of the regression in this particular case but that lead to overall worse results in the external contracts. ugh :)
d8106bf to
41d19bb
Compare
blishko
left a comment
There was a problem hiding this comment.
It definitely shows potential, but let's see if we can minimize the regressions.
| // if there are no args, we should be done now | ||
| if (_state.target().args.empty()) | ||
| return {StackShufflerResult::Status::Admissible}; | ||
| yulAssert(_stack.size() == _state.target().size); |
There was a problem hiding this comment.
Why is this not true anymore?
There was a problem hiding this comment.
previously, the fixArgsSlot couldn't refuse to grow and would, worst case, push junk. now it can refuse and ultimately yield NoAction in which case the invariant would be violated.
|
This pull request is stale because it has been open for 14 days with no activity. |
argsRangeontargethelper, inspired from SSA: Fix cycle in stack shuffler #16595 (comment)fixArgsSlot:canReachSomeUnfilledTarget(arg)checking if there is a swap-reachable slot wantingarg, andprefixReachablechecking that, after growing the stack, every misaligned prefix offset is still reachablefixArgsSlot:argthe target wants at the new top directly) but only under a stricterpushKeepsDeepPrefixReachablegate: every misaligned prefix offset must survive the grow plus one more op. this accounts for committing the slot to its final position right away, which means that fixing a deeper slot requires duping/pushing something else first if that slot is in its final position