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 /MLRISC/trunk/scheduling/listScheduler.sml
ViewVC logotype

Diff of /MLRISC/trunk/scheduling/listScheduler.sml

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

revision 695, Mon Aug 7 23:57:38 2000 UTC revision 744, Fri Dec 8 04:11:42 2000 UTC
# Line 97  Line 97 
97         reachables    : W8A.array,                    (* reachable set *)         reachables    : W8A.array,                    (* reachable set *)
98         rt            : SchedProps.reservation_table, (* reservation table *)         rt            : SchedProps.reservation_table, (* reservation table *)
99         sigma         : I.instruction list DA.array,         sigma         : I.instruction list DA.array,
100         liveSet       : DDG.edge G.edge list Intmap.intmap,         liveSet       : DDG.edge G.edge list IntHashTable.hash_table,
101         jumpScheduled : bool ref,         jumpScheduled : bool ref,
102         jumpTime      : int ref,         jumpTime      : int ref,
103         jumpNode      : DDG.node G.node ref         jumpNode      : DDG.node G.node ref
# Line 143  Line 143 
143                                               block id at this time *)                                               block id at this time *)
144         val isProfitableTbl = A.array(M, 0)         val isProfitableTbl = A.array(M, 0)
145         val profitabilityTbl = A.array(M, 0.0) (* priority of block *)         val profitabilityTbl = A.array(M, 0.0) (* priority of block *)
146         val liveSetTbl   = A.array(M, Intmap.new(0, NotLive))         val liveSetTbl   = A.array(M, IntHashTable.mkTable(0, NotLive))
147    
148         val stampCounter = ref 0         val stampCounter = ref 0
149         fun newStamp() =         fun newStamp() =
# Line 231  Line 231 
231          * Add an instruction into the current live set of block bid.          * Add an instruction into the current live set of block bid.
232          *)          *)
233         fun addInstrToLiveSet(i, i' as DDG.NODE{defs, uses, ...}, liveSet) =         fun addInstrToLiveSet(i, i' as DDG.NODE{defs, uses, ...}, liveSet) =
234         let val lookupLiveSet = Intmap.mapWithDefault(liveSet, [])         let val lookupLiveSet = IntHashTable.find liveSet
235             val updateLiveSet = Intmap.add liveSet             val lookupLiveSet = fn b => case lookupLiveSet b of SOME x => x
236                                                                 | NONE => []
237               val updateLiveSet = IntHashTable.insert liveSet
238    
239             fun rmvUse r =             fun rmvUse r =
240             let fun loop([], es') = es'             let fun loop([], es') = es'
# Line 268  Line 270 
270              * that is currently live.  If so, the associated code motion is              * that is currently live.  If so, the associated code motion is
271              * illegal (without renaming)              * illegal (without renaming)
272              *)              *)
273             val lookupLiveSet = Intmap.mapWithDefault(liveSet, [])             val lookupLiveSet = IntHashTable.find liveSet
274               val lookupLiveSet = fn b => case lookupLiveSet b of SOME x => x
275                                                                 | NONE => []
276              (*              (*
277               * Add an output- dependence edge between two nodes               * Add an output- dependence edge between two nodes
278               *)               *)
# Line 345  Line 349 
349    
350         (* Release the live-in node for block id *)         (* Release the live-in node for block id *)
351         fun releaseLiveIn(bid,liveSet) =         fun releaseLiveIn(bid,liveSet) =
352         let val liveInNode as (j,j') = Intmap.map liveInMap bid         let val liveInNode as (j,j') = IntHashTable.lookup liveInMap bid
353         in  if A.sub(issueTimeTbl, j) < 0 then         in  if A.sub(issueTimeTbl, j) < 0 then
354                (addInstrToLiveSet(j,j',liveSet);                (addInstrToLiveSet(j,j',liveSet);
355                 A.update(issueTimeTbl, j, 0);                 A.update(issueTimeTbl, j, 0);
# Line 358  Line 362 
362         (* Release the live-out node for block id *)         (* Release the live-out node for block id *)
363         fun releaseLiveOut(bid, liveSet) =         fun releaseLiveOut(bid, liveSet) =
364         let val liveOutNode as (j,j' as DDG.NODE{instr,...}) =         let val liveOutNode as (j,j' as DDG.NODE{instr,...}) =
365                 Intmap.map liveOutMap bid                 IntHashTable.lookup liveOutMap bid
366         in  case InsnProps.instrKind instr of         in  case InsnProps.instrKind instr of
367                InsnProps.IK_SINK =>                InsnProps.IK_SINK =>
368                (addInstrToLiveSet(j,j',liveSet);                (addInstrToLiveSet(j,j',liveSet);
# Line 482  Line 486 
486             end             end
487             val _  = markReachables b             val _  = markReachables b
488             fun mergeIncomingBlocks() =             fun mergeIncomingBlocks() =
489             let val liveSet = Intmap.new(32,NotLive)             let val liveSet = IntHashTable.mkTable(32,NotLive)
490                 val lookupLiveSet = Intmap.mapWithDefault(liveSet, [])                 val lookupLiveSet = IntHashTable.find liveSet
491                 val addLiveSet = Intmap.add liveSet                 val lookupLiveSet =
492                       fn b => case lookupLiveSet b of SOME x => x | NONE => []
493                   val addLiveSet = IntHashTable.insert liveSet
494                 fun merge([], NONE) = (newTable 5, 0)                 fun merge([], NONE) = (newTable 5, 0)
495                   | merge([], SOME(_,t,rt)) = (rt, t+1)                   | merge([], SOME(_,t,rt)) = (rt, t+1)
496                   | merge((Y,_,CFG.EDGE{w,...})::es,rt) =                   | merge((Y,_,CFG.EDGE{w,...})::es,rt) =
# Line 501  Line 507 
507                                            A.sub(maxTimeTbl,Y_id),                                            A.sub(maxTimeTbl,Y_id),
508                                            A.sub(rtTbl,Y_id))                                            A.sub(rtTbl,Y_id))
509                                else rt                                else rt
510                     in  Intmap.app (fn (r,es) =>                     in  IntHashTable.appi (fn (r,es) =>
511                            addLiveSet(r, List.revAppend(es, lookupLiveSet r)))                            addLiveSet(r, List.revAppend(es, lookupLiveSet r)))
512                            liveSet_Y;                            liveSet_Y;
513                         merge(es, rt)                         merge(es, rt)

Legend:
Removed from v.695  
changed lines
  Added in v.744

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