if isEmptyUniqSet rsSpill
then do
-- patch the registers using the info in the graph
+ -- also rewrite SPILL/REALOAD pseudos into real instructions
let code_patched = map (patchRegsFromGraph graph_colored) code
- let code_nat = map stripLive code_patched
+
+ let spillNatTop = mapGenBlockTop spillNatBlock
+ let code_nat = map (spillNatTop . stripLive) code_patched
+
-- record what happened in this stage for debugging
let stat =
, raPatchedCmm = code_patched }
return ( code_nat
- , maybeToList stat1 ++ [stat] ++ debug_codeGraphs
+ , [stat] ++ maybeToList stat1 ++ debug_codeGraphs
, graph_colored)
else do
-- try again
regAlloc_spin (spinCount + 1) triv regsFree slotsFree'
- (maybeToList stat1 ++ [stat] ++ debug_codeGraphs)
+ ([stat] ++ maybeToList stat1 ++ debug_codeGraphs)
code_relive