colorGraph iterative colors triv spill graph0
= let
- -- if we're not doing iterative coalescing, then just do a single coalescing
- -- pass at the front. This won't be as good but should still eat up a
- -- lot of the reg-reg moves.
+ -- If we're not doing iterative coalescing then just do a conservative
+ -- coalescing stage at the front.
(graph_coalesced, kksCoalesce1)
= if not iterative
then coalesceGraph False triv graph0
$ graph
, ksTrivFound <- map nodeId nsTrivFound
- , graph3 <- foldr (\k g -> let Just g' = delNode k g
+ , graph2 <- foldr (\k g -> let Just g' = delNode k g
in g')
graph ksTrivFound
- = colorScan_spin iterative triv spill graph3
+ = colorScan_spin iterative triv spill graph2
(ksTrivFound ++ ksTriv)
ksSpill
kksCoalesce
-- Coalesce:
-- If we're doing iterative coalescing and no triv nodes are avaliable
- -- then it's type for a coalescing pass.
+ -- then it's time for a coalescing pass.
| iterative
= case coalesceGraph False triv graph of
-- we were able to coalesce something
- -- go back and see if this frees up more nodes to be trivially colorable.
+ -- go back to Simplify and see if this frees up more nodes to be trivially colorable.
(graph2, kksCoalesceFound @(_:_))
-> colorScan_spin iterative triv spill graph2
ksTriv ksSpill (kksCoalesceFound ++ kksCoalesce)