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

SCM Repository

[smlnj] Annotation of /sml/trunk/src/MLRISC/ra/ra-core.sig
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/ra/ra-core.sig

Parent Directory Parent Directory | Revision Log Revision Log


Revision 499 - (view) (download) (as text)

1 : monnier 469 (*
2 :     * Note: This is the core of the new register allocator, i.e. the portion
3 :     * that manipulates only the interference graph and not the flowgraph.
4 :     *
5 :     * -- Allen
6 :     *)
7 : monnier 427
8 :     signature RA_CORE =
9 :     sig
10 :    
11 : monnier 469 structure G : RA_GRAPH
12 : monnier 427
13 : monnier 469 type move_queue
14 :     type freeze_queue
15 :    
16 : monnier 498 val NO_OPTIMIZATION : G.mode
17 :     val BIASED_SELECTION : G.mode
18 :     val DEAD_COPY_ELIM : G.mode
19 :     val COMPUTE_SPAN : G.mode
20 :     val SAVE_COPY_TEMPS : G.mode
21 :    
22 : monnier 427 (*
23 :     * Basic functions
24 :     *)
25 : monnier 469
26 :     (* dump the interference graph to a stream *)
27 :     val dumpGraph : G.interferenceGraph -> TextIO.outstream -> unit
28 :     val show : G.interferenceGraph -> G.node -> string
29 :    
30 :     (* add an edge to the interference graph *)
31 : monnier 427 val addEdge : G.interferenceGraph -> G.node * G.node -> unit
32 :    
33 : monnier 469 (* remove an edge from the interference graph *)
34 :     val removeEdge : G.interferenceGraph -> G.node * G.node -> unit
35 : monnier 427
36 : monnier 469 (*
37 :     * Function to create new nodes
38 :     *)
39 :     val newNodes : G.interferenceGraph ->
40 :     {cost:int,pt:G.programPoint,defs:int list,uses:int list} ->
41 :     G.node list (* defs *)
42 :    
43 :     (*
44 :     * Update regmap after finishing register allocation or copy propagation
45 :     *)
46 :     val finishRA : G.interferenceGraph -> unit
47 :     val finishCP : G.interferenceGraph -> unit
48 :    
49 :     (*
50 :     * Create an initial set of worklists from a new interference graph
51 :     * and a list of moves
52 :     *)
53 :     val initWorkLists : G.interferenceGraph ->
54 : monnier 498 { moves : G.move list
55 : monnier 469 } ->
56 :     { simplifyWkl : G.node list,
57 :     moveWkl : move_queue,
58 :     freezeWkl : freeze_queue,
59 :     spillWkl : G.node list (* high degreee nodes *)
60 :     }
61 :    
62 :     (*
63 :     * Clear the interference graph but keep the nodes table intact
64 :     *)
65 :     val clearGraph : G.interferenceGraph -> unit
66 :    
67 :     (*
68 :     * Remove all adjacency lists from the nodes table
69 :     *)
70 :     val clearNodes : G.interferenceGraph -> unit
71 :    
72 :     (*
73 :     * Return a regmap function that reflects the current interference graph.
74 :     * Spilled registers are given the special value ~1
75 :     *)
76 :     val regmap : G.interferenceGraph -> (int -> int)
77 :     val spillRegmap : G.interferenceGraph -> (int -> int)
78 :     val spillLoc : G.interferenceGraph -> (int -> int)
79 :    
80 : monnier 427 (*
81 : monnier 469 * Simplify, Coalease and Freeze until the work list is done
82 : monnier 427 *)
83 : monnier 469 val iteratedCoalescing :
84 :     G.interferenceGraph ->
85 :     { simplifyWkl : G.node list,
86 :     moveWkl : move_queue,
87 :     freezeWkl : freeze_queue,
88 :     stack : G.node list
89 :     } ->
90 :     { stack : G.node list
91 :     }
92 : monnier 427
93 : monnier 469 (*
94 :     * potentially spill a node.
95 :     *)
96 :     val potentialSpillNode :
97 :     G.interferenceGraph ->
98 :     { node : G.node,
99 :     stack : G.node list
100 :     } ->
101 :     { moveWkl : move_queue,
102 :     freezeWkl : freeze_queue,
103 :     stack : G.node list
104 :     }
105 : monnier 427
106 : monnier 469 (*
107 :     * Color nodes on the stack, using Briggs' optimistic spilling.
108 :     * Return a list of actual spills
109 :     *)
110 :     val select :
111 :     G.interferenceGraph ->
112 : monnier 498 { stack : G.node list
113 : monnier 469 } ->
114 :     { spills : G.node list (* actual spills *)
115 :     }
116 : monnier 427
117 : monnier 469 (*
118 : monnier 498 * Incorporate memory <-> register moves
119 :     *)
120 :     val initMemMoves : G.interferenceGraph -> unit
121 :    
122 :     (*
123 : monnier 475 * Spill propagation/coalescing phase
124 : monnier 469 *)
125 : monnier 475 val spillPropagation : G.interferenceGraph -> G.node list -> G.node list
126 : monnier 469
127 :     (*
128 : monnier 475 * Spill coalescing phase
129 : monnier 469 *)
130 : monnier 475 val spillCoalescing : G.interferenceGraph -> G.node list -> unit
131 : monnier 469
132 : monnier 475 (*
133 :     * Spill coloring phase
134 :     *)
135 :     val spillColoring : G.interferenceGraph -> G.node list -> unit
136 :    
137 : monnier 427 end

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