Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/MLRISC/ra/cluster-ra.sml
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/ra/cluster-ra.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 732, Mon Nov 13 21:59:12 2000 UTC revision 733, Fri Nov 17 05:13:45 2000 UTC
# Line 101  Line 101 
101             val marked       = A.array(N, ~1)             val marked       = A.array(N, ~1)
102    
103             (* copies indexed by source *)             (* copies indexed by source *)
104             val copyTable    = Intmap.new(N, NotThere)             val copyTable    = IntHashTable.mkTable(N, NotThere)
105             val lookupCopy   = Intmap.mapWithDefault(copyTable, [])             fun lookupCopy i = getOpt (IntHashTable.find copyTable i, [])
106             val addCopy      = Intmap.add copyTable             val addCopy      = IntHashTable.insert copyTable
107    
108    
109             val stamp = ref 0             val stamp = ref 0
# Line 241  Line 241 
241             end             end
242    
243             val newNodes   = Core.newNodes G             val newNodes   = Core.newNodes G
244             val getnode    = Intmap.map nodes             val getnode    = IntHashTable.lookup nodes
245             val insnDefUse = Props.defUse cellkind             val insnDefUse = Props.defUse cellkind
246             val getCell    = C.getCell cellkind             val getCell    = C.getCell cellkind
247    
# Line 342  Line 342 
342    
343             val (moves, tmps) = mkNodes(blocks, [], [])             val (moves, tmps) = mkNodes(blocks, [], [])
344             val addEdge = Core.addEdge G             val addEdge = Core.addEdge G
345         in  Intmap.app         in  IntHashTable.appi
346               (let val setSpan =               (let val setSpan =
347                    if isOn(mode,Core.COMPUTE_SPAN) then                    if isOn(mode,Core.COMPUTE_SPAN) then
348                    let val spanMap = Intmap.new(Intmap.elems nodes, NotThere)                    let val spanMap =
349                        val setSpan = Intmap.add spanMap                            IntHashTable.mkTable(IntHashTable.numItems nodes,
350                                                   NotThere)
351                          val setSpan = IntHashTable.insert spanMap
352                        val _       = span := SOME spanMap                        val _       = span := SOME spanMap
353                    in  setSpan end                    in  setSpan end
354                    else fn _ => ()                    else fn _ => ()
# Line 376  Line 378 
378                in  TextIO.output(!MLRiscControl.debug_stream,                in  TextIO.output(!MLRiscControl.debug_stream,
379                          "RA #blocks="^Int.toString N^                          "RA #blocks="^Int.toString N^
380                          " #insns="^Int.toString insns^                          " #insns="^Int.toString insns^
381                          " #nodes="^Int.toString(Intmap.elems nodes)^                          " #nodes="^Int.toString(IntHashTable.numItems nodes)^
382                          " #edges="^Int.toString(Core.BM.size(!bitMatrix))^                          " #edges="^Int.toString(Core.BM.size(!bitMatrix))^
383                          " #moves="^Int.toString(length moves)^"\n")                          " #moves="^Int.toString(length moves)^"\n")
384                end                end
# Line 403  Line 405 
405             val _ = Core.clearGraph graph             val _ = Core.clearGraph graph
406    
407             (* maps program point to registers to be spilled *)             (* maps program point to registers to be spilled *)
408             val spillSet = Intmap.new(32, NotThere) : C.cell list Intmap.intmap             val spillSet = IntHashTable.mkTable(32, NotThere)
409                              : C.cell list IntHashTable.hash_table
410    
411             (* maps program point to registers to be reloaded *)             (* maps program point to registers to be reloaded *)
412             val reloadSet = Intmap.new(32, NotThere) : C.cell list Intmap.intmap             val reloadSet = IntHashTable.mkTable(32, NotThere)
413                               : C.cell list IntHashTable.hash_table
414    
415             (* maps program point to registers to be killed *)             (* maps program point to registers to be killed *)
416             val killSet = Intmap.new(32, NotThere) : C.cell list Intmap.intmap             val killSet = IntHashTable.mkTable(32, NotThere)
417                             : C.cell list IntHashTable.hash_table
418    
419             val spillRewrite = Spill.spillRewrite             val spillRewrite = Spill.spillRewrite
420                                { graph=graph,                                { graph=graph,
# Line 427  Line 432 
432                                }                                }
433    
434             (* set of basic blocks that are affected *)             (* set of basic blocks that are affected *)
435             val affectedBlocks = Intmap.new(32, NotThere) : bool Intmap.intmap             val affectedBlocks = IntHashTable.mkTable(32, NotThere)
436                                    : bool IntHashTable.hash_table
437    
438             val addAffectedBlocks = Intmap.add affectedBlocks             val addAffectedBlocks = IntHashTable.insert affectedBlocks
439    
440             fun ins set = let             fun ins set = let
441                 val add  = Intmap.add set                 val add  = IntHashTable.insert set
442                 val look = Intmap.mapWithDefault(set, [])                 fun look i = getOpt (IntHashTable.find set i, [])
443                 fun enter(r, []) = ()                 fun enter(r, []) = ()
444                   | enter(r, pt::pts) =                   | enter(r, pt::pts) =
445                     (add (pt, r::look pt);                     (add (pt, r::look pt);
# Line 447  Line 453 
453             val insReloadSet = ins reloadSet             val insReloadSet = ins reloadSet
454             val insKillSet   =             val insKillSet   =
455               let               let
456                 val add  = Intmap.add killSet                 val add  = IntHashTable.insert killSet
457                 val look = Intmap.mapWithDefault(killSet, [])                 fun look i = getOpt (IntHashTable.find killSet i, [])
458                 fun enter(r, []) = ()                 fun enter(r, []) = ()
459                   | enter(r, pt::pts) = (add(pt, r::look pt); enter(r, pts))                   | enter(r, pt::pts) = (add(pt, r::look pt); enter(r, pts))
460               in  enter               in  enter
# Line 501  Line 507 
507                 | REMOVED =>  error "mark: REMOVED"                 | REMOVED =>  error "mark: REMOVED"
508               (*esac*))               (*esac*))
509         in         in
510           Intmap.app rewriteAll affectedBlocks;           IntHashTable.appi rewriteAll affectedBlocks;
511           app mark nodesToSpill;           app mark nodesToSpill;
512           rebuild(cellkind, graph)           rebuild(cellkind, graph)
513         end (* spill *)         end (* spill *)

Legend:
Removed from v.732  
changed lines
  Added in v.733

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0