projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
comment wibbles
[ghc-hetmet.git]
/
compiler
/
utils
/
GraphColor.hs
diff --git
a/compiler/utils/GraphColor.hs
b/compiler/utils/GraphColor.hs
index
307803a
..
10852d4
100644
(file)
--- a/
compiler/utils/GraphColor.hs
+++ b/
compiler/utils/GraphColor.hs
@@
-39,6
+39,7
@@
colorGraph
, Eq color, Eq cls, Ord k
, Outputable k, Outputable cls, Outputable color)
=> Bool -- ^ whether to do iterative coalescing
, Eq color, Eq cls, Ord k
, Outputable k, Outputable cls, Outputable color)
=> Bool -- ^ whether to do iterative coalescing
+ -> Int -- ^ how many times coloring has been called so far
-> UniqFM (UniqSet color) -- ^ map of (node class -> set of colors available for this class).
-> Triv k cls color -- ^ fn to decide whether a node is trivially colorable.
-> (Graph k cls color -> k) -- ^ fn to choose a node to potentially leave uncolored if nothing is trivially colorable.
-> UniqFM (UniqSet color) -- ^ map of (node class -> set of colors available for this class).
-> Triv k cls color -- ^ fn to decide whether a node is trivially colorable.
-> (Graph k cls color -> k) -- ^ fn to choose a node to potentially leave uncolored if nothing is trivially colorable.
@@
-49,11
+50,10
@@
colorGraph
, UniqFM k ) -- map of regs (r1 -> r2) that were coaleced
-- r1 should be replaced by r2 in the source
, UniqFM k ) -- map of regs (r1 -> r2) that were coaleced
-- r1 should be replaced by r2 in the source
-colorGraph iterative colors triv spill graph0
+colorGraph iterative spinCount colors triv spill graph0
= let
= 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_coalesced, kksCoalesce1)
= if not iterative
then coalesceGraph False triv graph0
@@
-154,23
+154,23
@@
colorScan_spin iterative triv spill graph
$ graph
, ksTrivFound <- map nodeId nsTrivFound
$ 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
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
(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
| 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)
(graph2, kksCoalesceFound @(_:_))
-> colorScan_spin iterative triv spill graph2
ksTriv ksSpill (kksCoalesceFound ++ kksCoalesce)