Skip to content

Commit 0efc157

Browse files
authored
Merge pull request #926 from argotorg/simplifications-cleanup
Expr: Remove expensive unnecessary simplification
2 parents 3796228 + 2faf074 commit 0efc157

File tree

2 files changed

+3
-14
lines changed

2 files changed

+3
-14
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1818
node via `--cache-dir dir`.
1919
- Changed `verify*` methods to always require postcodition.
2020
- Removed type parameter of mutable memory from VM definition.
21+
- Removed simplification that were rewriting concrete bytes-to-be-overwritten
22+
with zero bytes. Benefits were unclear while it had negative effect on
23+
analysis' performance.
2124

2225
## [0.56.0] - 2025-10-13
2326

src/EVM/Expr.hs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,20 +1001,6 @@ simplifyNoLitToKeccak e = untilFixpoint (mapExpr go) e
10011001
go (ReadByte idx buf) = readByte idx buf
10021002
go (BufLength buf) = bufLength buf
10031003

1004-
-- We can zero out any bytes in a base ConcreteBuf that we know will be overwritten by a later write
1005-
-- TODO: make this fully general for entire write chains, not just a single write.
1006-
go o@(WriteWord (Lit idx) val (ConcreteBuf b))
1007-
| idx >= maxBytes = o
1008-
| BS.length b >= (unsafeInto idx + 32) =
1009-
let
1010-
slot = BS.take 32 (BS.drop (unsafeInto idx) b)
1011-
isSlotZero = BS.all (== 0) slot
1012-
content = if isSlotZero
1013-
then b
1014-
else (BS.take (unsafeInto idx) b)
1015-
<> (BS.replicate 32 0)
1016-
<> (BS.drop (unsafeInto idx + 32) b)
1017-
in writeWord (Lit idx) val (ConcreteBuf content)
10181004
go (WriteWord a b c) = writeWord a b c
10191005

10201006
go (WriteByte a b c) = writeByte a b c

0 commit comments

Comments
 (0)