Skip to content

Commit 3530de6

Browse files
committed
Refactor CSE by leveraging DAG structure
1 parent 081e4ae commit 3530de6

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/code.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -739,12 +739,16 @@ function _cse!(mem, expr)
739739
end
740740

741741
function cse(expr)
742-
state = Dict{Any, Int}()
743-
cse_state!(state, expr)
744-
cse_block(state, expr)
742+
sorted_nodes = topological_sort(expr)
743+
if isempty(sorted_nodes)
744+
return Let(Assignment[], expr)
745+
else
746+
last_assignment = pop!(sorted_nodes)
747+
body = rhs(last_assignment)
748+
return Let(sorted_nodes, body)
749+
end
745750
end
746751

747-
748752
function _cse(exprs::AbstractArray)
749753
letblock = cse(Term{Any}(tuple, vec(exprs)))
750754
letblock.pairs, reshape(arguments(letblock.body), size(exprs))

0 commit comments

Comments
 (0)