perf(evm): reuse CFG memory proofs for KECCAK expansion - #582
Merged
Conversation
Teach the guaranteed-minimum analysis that a non-empty constant KECCAK range expands logical EVM memory through its read end. Preserve zero-length behavior and propagate the resulting proof within and across analyzer blocks for later lowering consumers.
Reuse guaranteed minimum memory facts at the exact KECCAK opcode PC to elide redundant pre-expansion while preserving dynamic word gas charging. Add MIR and differential coverage for cross-block reuse, fallback expansion, hash output, gas equality, and the word-gas OOG boundary.
⚡ Performance Regression Check Results✅ Performance Check Passed (interpreter)Performance Benchmark Results (threshold: 25%)
Summary: 194 benchmarks, 0 regressions ✅ Performance Check Passed (multipass)Performance Benchmark Results (threshold: 25%)
Summary: 193 benchmarks, 0 regressions |
16 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
1. Does this PR affect any open issues?(Y/N) and add issue references (e.g. "fix #123", "re #123".):
2. What is the scope of this PR (e.g. component or file name):
src/compiler/evm_frontend/evm_memory_analysis.hsrc/compiler/evm_frontend/evm_mir_compiler.cppsrc/tests/evm_jit_frontend_tests.cppsrc/tests/evm_differential_tests.cpp3. Provide a description of the PR(e.g. more details, effects, motivations or doc link):
This PR connects the CFG memory analysis added by #572 to the generic KECCAK256 lowering path.
The first commit teaches
MemoryGuaranteedMinBytesAnalysisthat a non-empty constant KECCAK range proves memory through its read end and propagates that guarantee through the CFG. Zero-length ranges remain non-expanding.The second commit consumes the guarantee at the exact KECCAK opcode PC. When constant offset and length are already covered, multipass JIT elides the redundant
ExpandMemoryNoGasIR call. Uncovered, dynamic, overflow, and zero-length cases keep their existing fallback behavior. KECCAK word-gas charging remains in its original order.The branch contains exactly two Conventional Commits. A local merge simulation with #580 is conflict-free in either order, and the combined tree builds successfully.
4. Are there any breaking changes?(Y/N) and describe the breaking changes(e.g. more details, motivations or doc link):
5. Are there test cases for these changes?(Y/N) select and add more details, references or doc links:
Added coverage for:
Validation:
./tools/format.sh format./tools/format.sh checkevmJitFrontendTests: 113/113 passed on this branchEVMKeccakMemoryProofDifferential.*: 2/2 passed6. Release note