@@ -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))
14221422end
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
14311432end
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)
15181519end
15191520
15201521function maybe_erase_unused! (
0 commit comments