diff --git a/evm/src/cpu/kernel/assembler.rs b/evm/src/cpu/kernel/assembler.rs index 0a1232e1..4e3381b5 100644 --- a/evm/src/cpu/kernel/assembler.rs +++ b/evm/src/cpu/kernel/assembler.rs @@ -538,6 +538,6 @@ mod tests { constants: HashMap, ) -> Kernel { let parsed_files = files.iter().map(|f| parse(f)).collect_vec(); - assemble(parsed_files, constants, false) + assemble(parsed_files, constants, true) } } diff --git a/evm/src/cpu/kernel/optimizer.rs b/evm/src/cpu/kernel/optimizer.rs index a334f2d8..6fe9d496 100644 --- a/evm/src/cpu/kernel/optimizer.rs +++ b/evm/src/cpu/kernel/optimizer.rs @@ -89,6 +89,7 @@ fn no_op_jumps(code: &mut Vec) { } /// Remove swaps: `[PUSH x, PUSH y, SWAP1] -> [PUSH y, PUSH x]`. +// Could be generalized to recognize more than two pushes. fn remove_swapped_pushes(code: &mut Vec) { replace_windows(code, |window| { if let [Push(x), Push(y), StandardOp(swap1)] = window @@ -113,6 +114,7 @@ fn remove_swaps_commutative(code: &mut Vec) { } /// Remove push-pop type patterns, such as: `[DUP1, POP]`. +// Could be extended to other non-side-effecting operations, e.g. [DUP1, ADD, POP] -> [POP]. fn remove_ignored_values(code: &mut Vec) { replace_windows(code, |[a, b]| { if let StandardOp(pop) = b && &pop == "POP" {