Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
2ce679a
draft: inter-bb load elimination
charles-cooper Mar 9, 2025
8673969
fix lattices
charles-cooper Mar 9, 2025
777eabf
simplify phi construction, fix propagation of literals
charles-cooper Mar 9, 2025
47e8bf9
Merge branch 'master' into feat/inter-bb-load-elimination
charles-cooper Mar 12, 2025
7cc3373
fix merge issue
charles-cooper Mar 12, 2025
78ec9e3
fix bugs
charles-cooper Mar 13, 2025
4fe11bd
improve traversal order
charles-cooper Mar 13, 2025
0a1a110
Merge branch 'master' into feat/inter-bb-load-elimination
charles-cooper May 20, 2025
2695eda
update for new analysis
charles-cooper May 20, 2025
b2fc444
test fixes
charles-cooper May 20, 2025
e09dffe
fix comments
charles-cooper May 20, 2025
955d71e
lint
charles-cooper May 20, 2025
30aa7a2
remove stray comment
charles-cooper May 20, 2025
779d67b
Merge branch 'master' into feat/inter-bb-load-elimination
charles-cooper May 21, 2025
b1d420b
Merge branch 'master' into feat/inter-bb-load-elimination
charles-cooper May 23, 2025
a799f58
Merge branch 'master' into feat/inter-bb-load-elimination
charles-cooper Jun 10, 2025
bc6e479
Merge branch 'master' into feat/inter-bb-load-elimination
charles-cooper Jun 17, 2025
f699e77
start splitting into pass and analysis
HodanPlodky Aug 19, 2025
f5b052c
tests pass
HodanPlodky Aug 19, 2025
2e94395
phi insertion
HodanPlodky Aug 19, 2025
c57de1e
phi insertion and tests
HodanPlodky Aug 20, 2025
7e25454
multi val in store
HodanPlodky Aug 20, 2025
fcd3f82
fix for phis and forgotten copy
HodanPlodky Aug 21, 2025
2d8b5f5
removed stray commented code
HodanPlodky Aug 21, 2025
28b0112
test for distant elimination and fix
HodanPlodky Aug 21, 2025
b306bf9
better comment
HodanPlodky Aug 21, 2025
89e91d5
removed unnecessary assert
HodanPlodky Aug 25, 2025
aa2ad6e
Merge pull request #92 from HodanPlodky/feat/inter-bb-load-elimination
charles-cooper Sep 2, 2025
26efdb5
Merge branch 'master' into feat/inter-bb-load-elimination-merge
HodanPlodky Sep 3, 2025
14e5cdc
removed unused method
HodanPlodky Sep 3, 2025
2e44427
Merge pull request #94 from HodanPlodky/feat/inter-bb-load-eliminatio…
charles-cooper Sep 3, 2025
eee3f05
lint
charles-cooper Sep 3, 2025
c1e14a3
fuse load analysis into load elimination pass
charles-cooper Sep 18, 2025
72b4b3f
Merge branch 'master' into feat/inter-bb-load-elimination
charles-cooper Oct 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions tests/unit/compiler/venom/test_load_elimination.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ def test_elimination_barrier():
# fence - writes to memory
staticcall %3, %3, %3, %3
%4 = mload %1
stop
"""
_check_no_change(pre)

Expand Down Expand Up @@ -144,6 +145,7 @@ def test_store_load_barrier():
# fence
staticcall %3, %3, %3, %3
%4 = mload %ptr
stop
"""
_check_no_change(pre)

Expand Down Expand Up @@ -294,3 +296,125 @@ def test_store_store_unknown_ptr_barrier():
"""

_check_no_change(pre)


def test_simple_load_elimination_inter():
pre = """
main:
%par = param
%1 = mload 5
%cond = iszero %par
jnz %cond, @then, @else
then:
jmp @join
else:
jmp @join
join:
%3 = mload 5
sink %3
"""

post = """
main:
%par = param
%1 = mload 5
%cond = iszero %par
jnz %cond, @then, @else
then:
jmp @join
else:
jmp @join
join:
%3 = %1
sink %3
"""

_check_pre_post(pre, post)


def test_simple_load_elimination_inter_join():
pre = """
main:
%par = param
%cond = iszero %par
jnz %cond, @then, @else
then:
%1 = mload 5
jmp @join
else:
%2 = mload 5
jmp @join
join:
%3 = mload 5
sink %3
"""

post = """
main:
%par = param
%cond = iszero %par
jnz %cond, @then, @else
then:
%1 = mload 5
jmp @join
else:
%2 = mload 5
jmp @join
join:
%4 = phi @then, %1, @else, %2
%3 = %4
sink %3
"""

_check_pre_post(pre, post)


def test_load_elimination_inter_distant_bb():
pre = """
main:
%par = param
%cond = iszero %par
jnz %cond, @then, @else
then:
%1 = mload 5
jmp @join
else:
%2 = mload 5
jmp @join
join:
%3 = mload 1000
%cond_end = iszero %3
jnz %cond_end, @end_a, @end_b
end_a:
%4 = mload 5
sink %4
end_b:
%5 = mload 50
sink %5
"""

post = """
main:
%par = param
%cond = iszero %par
jnz %cond, @then, @else
then:
%1 = mload 5
jmp @join
else:
%2 = mload 5
jmp @join
join:
%6 = phi @then, %1, @else, %2
%3 = mload 1000
%cond_end = iszero %3
jnz %cond_end, @end_a, @end_b
end_a:
%4 = %6
sink %4
end_b:
%5 = mload 50
sink %5
"""

_check_pre_post(pre, post)
2 changes: 2 additions & 0 deletions vyper/venom/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ def _run_passes(fn: IRFunction, optimize: OptimizationLevel, ac: IRAnalysesCache
AlgebraicOptimizationPass(ac, fn).run_pass()

LoadElimination(ac, fn).run_pass()
PhiEliminationPass(ac, fn).run_pass()
AssignElimination(ac, fn).run_pass()

SCCP(ac, fn).run_pass()
AssignElimination(ac, fn).run_pass()
Expand Down
Loading