Skip to content

Commit ae81c88

Browse files
committed
Remove the iterator state, as the underlying IncrementalCompact keeps the state already.
1 parent 0c9419a commit ae81c88

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

base/compiler/ssair/ir.jl

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,21 +1421,22 @@ function iterate(it::CompactPeekIterator, (idx, aidx, bidx)::NTuple{3, Int}=(it.
14211421
return (compact.ir.stmts[idx][:inst], (idx + 1, aidx, bidx))
14221422
end
14231423

1424-
# This Union{Nothing, Pair{Pair{Int,Int},Any}} cannot be stack allocated, so we inline it
1425-
@inline function iterate(compact::IncrementalCompact,
1426-
st::Tuple{Int, Int}=(compact.idx, compact.active_bb))
1427-
st = iterate_compact(compact, st)
1424+
struct IncrementalCompactState end
1425+
@inline function iterate(compact::IncrementalCompact, st=IncrementalCompactState())
1426+
# this Union{Nothing, Pair{Pair{Int,Int},Any}} cannot be stack allocated, so we inline it
1427+
st = iterate_compact(compact)
14281428
st === nothing && return nothing
1429-
old_result_idx = st[1][2]
1430-
return Pair{Pair{Int,Int},Any}(st[1], compact.result[old_result_idx][:inst]), st[2]
1429+
old_result_idx = st[2]
1430+
return Pair{Pair{Int,Int},Any}(st, compact.result[old_result_idx][:inst]),
1431+
IncrementalCompactState() # stateful iterator, so we don't have actual state
14311432
end
14321433

1433-
function iterate_compact(compact::IncrementalCompact, (idx, active_bb)::Tuple{Int, Int})
1434+
function iterate_compact(compact::IncrementalCompact)
14341435
# Create label to dodge recursion so that we don't stack overflow
14351436
@label restart
14361437

1437-
@assert idx == compact.idx
1438-
@assert active_bb == compact.active_bb
1438+
idx = compact.idx
1439+
active_bb = compact.active_bb
14391440

14401441
old_result_idx = compact.result_idx
14411442
if idx > length(compact.ir.stmts) && (compact.new_nodes_idx > length(compact.perm))
@@ -1467,9 +1468,9 @@ function iterate_compact(compact::IncrementalCompact, (idx, active_bb)::Tuple{In
14671468
compact.idx += 1
14681469
compact.active_bb += 1
14691470
if finish_current_bb!(compact, active_bb, old_result_idx, true)
1470-
return iterate_compact(compact, (compact.idx, active_bb + 1))
1471+
return iterate_compact(compact)
14711472
else
1472-
return Pair{Int,Int}(compact.idx-1, old_result_idx), (compact.idx, active_bb + 1)
1473+
return Pair{Int,Int}(compact.idx-1, old_result_idx)
14731474
end
14741475
end
14751476
if compact.new_nodes_idx <= length(compact.perm) &&
@@ -1484,7 +1485,7 @@ function iterate_compact(compact::IncrementalCompact, (idx, active_bb)::Tuple{In
14841485
process_newnode!(compact, new_idx, new_node_entry, new_node_info, idx, active_bb, true)
14851486
compact.active_bb = active_bb
14861487
old_result_idx == result_idx && @goto restart
1487-
return Pair{Int,Int}(new_idx, old_result_idx), (idx, active_bb)
1488+
return Pair{Int,Int}(new_idx, old_result_idx)
14881489
elseif !isempty(compact.pending_perm) &&
14891490
(info = compact.pending_nodes.info[compact.pending_perm[1]];
14901491
info.attach_after ? info.pos == idx - 1 : info.pos == idx)
@@ -1496,7 +1497,7 @@ function iterate_compact(compact::IncrementalCompact, (idx, active_bb)::Tuple{In
14961497
process_newnode!(compact, new_idx, new_node_entry, new_node_info, idx, active_bb, false)
14971498
compact.active_bb = active_bb
14981499
old_result_idx == result_idx && @goto restart
1499-
return Pair{Int,Int}(new_idx, old_result_idx), (idx, active_bb)
1500+
return Pair{Int,Int}(new_idx, old_result_idx)
15001501
end
15011502
# This will get overwritten in future iterations if
15021503
# result_idx is not, incremented, but that's ok and expected
@@ -1514,7 +1515,7 @@ function iterate_compact(compact::IncrementalCompact, (idx, active_bb)::Tuple{In
15141515
@goto restart
15151516
end
15161517
@assert isassigned(compact.result.inst, old_result_idx)
1517-
return Pair{Int,Int}(compact.idx-1, old_result_idx), (compact.idx, active_bb)
1518+
return Pair{Int,Int}(compact.idx-1, old_result_idx)
15181519
end
15191520

15201521
function maybe_erase_unused!(

0 commit comments

Comments
 (0)