Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/IL/ssa-sig.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/IL/ssa-sig.sml

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

revision 1443, Mon Jul 11 10:36:10 2011 UTC revision 1504, Mon Sep 19 17:55:42 2011 UTC
# Line 40  Line 40 
40      structure Ty : SSA_TYPES      structure Ty : SSA_TYPES
41      structure Op : OPERATORS where type ty = Ty.ty      structure Op : OPERATORS where type ty = Ty.ty
42    
43      (***** strand state variables *****)
44    
45        datatype state_var = SV of {
46            id : Stamp.stamp,               (* variable's unique ID *)
47            name : string,                  (* variable's name *)
48            ty : Ty.ty,                     (* variable's type *)
49            output : bool,                  (* true for output variables *)
50            props : PropList.holder
51          }
52    
53    (***** CFG *****)    (***** CFG *****)
54    
55      datatype cfg = CFG of {      datatype cfg = CFG of {
# Line 85  Line 95 
95              args : var list,              args : var list,
96              succ : node ref              succ : node ref
97            }            }
98          | SAVE of {                       (* save state variable *)
99                pred: node ref,
100                lhs : state_var,
101                rhs : var,
102                succ : node ref
103              }
104        | EXIT of {                       (* includes die and stabilize *)        | EXIT of {                       (* includes die and stabilize *)
105              pred : node ref,              pred : node ref,
106              kind : ExitKind.kind,       (* kind of exit node *)              kind : ExitKind.kind,       (* kind of exit node *)
# Line 92  Line 108 
108            }            }
109    
110      and rhs      and rhs
111        = VAR of var        = STATE of state_var              (* read strand state variable *)
112          | VAR of var
113        | LIT of Literal.literal        | LIT of Literal.literal
114        | OP of Op.rator * var list        | OP of Op.rator * var list
115        | APPLY of ILBasis.name * var list (* basis function application *)        | APPLY of ILBasis.name * var list (* basis function application *)
# Line 135  Line 152 
152      and strand = Strand of {      and strand = Strand of {
153          name : Atom.atom,          name : Atom.atom,
154          params : var list,          params : var list,
155          state : (bool * var) list,      (* output variables are marked with true *)          state : state_var list,
156          stateInit : cfg,          stateInit : cfg,
157          methods : method list          methods : method list
158        }        }
159    
160      and method = Method of {      and method = Method of {
161          name : MethodName.name,          name : MethodName.name,
         stateIn : var list,     (* names of state variables on method entry *)  
162          body : cfg              (* method body *)          body : cfg              (* method body *)
163        }        }
164    
165      (* operations on strand-state variables *)
166        structure StateVar : sig
167            val new : bool * string * Ty.ty -> state_var
168            val name : state_var -> string
169            val ty : state_var -> Ty.ty
170            val isOutput : state_var -> bool
171            val same : state_var * state_var -> bool
172            val compare : state_var * state_var -> order
173            val hash : state_var -> word
174            val toString : state_var -> string
175          (* properties *)
176            val newProp : (state_var -> 'a) -> {
177                    getFn : state_var -> 'a,
178                    peekFn : state_var -> 'a option,
179                    setFn : state_var * 'a -> unit,
180                    clrFn : state_var -> unit
181                  }
182            val newFlag : unit -> {
183                    getFn : state_var -> bool,
184                    setFn : state_var * bool -> unit
185                  }
186          (* collections *)
187            structure Map : ORD_MAP where type Key.ord_key = state_var
188            structure Set : ORD_SET where type Key.ord_key = state_var
189            structure Tbl : MONO_HASH_TABLE where type Key.hash_key = state_var
190          end
191    
192    (* operations on CFGs *)    (* operations on CFGs *)
193      structure CFG : sig      structure CFG : sig
194        (* the empty CFG *)        (* the empty CFG *)
# Line 180  Line 223 
223          val replaceNodeWithCFG : (node * cfg) -> unit          val replaceNodeWithCFG : (node * cfg) -> unit
224        (* concatenate two CFGs *)        (* concatenate two CFGs *)
225          val concat : cfg * cfg -> cfg          val concat : cfg * cfg -> cfg
226          (* prepend a node to a CFG *)
227            val prependNode : node * cfg -> cfg
228        (* append a node to a CFG *)        (* append a node to a CFG *)
229          val appendNode : cfg * node -> cfg          val appendNode : cfg * node -> cfg
230        (* update the exit of a CFG by modifying the live variable list *)        (* update the exit of a CFG by modifying the live variable list *)
# Line 221  Line 266 
266          val mkCOM : string list -> node          val mkCOM : string list -> node
267          val mkASSIGN : assign -> node          val mkASSIGN : assign -> node
268          val mkNEW : {strand : Atom.atom, args : var list} -> node          val mkNEW : {strand : Atom.atom, args : var list} -> node
269            val mkSAVE : (state_var * var) -> node
270          val mkEXIT : ExitKind.kind * var list -> node          val mkEXIT : ExitKind.kind * var list -> node
271          val mkFRAGMENT : var list -> node          val mkFRAGMENT : var list -> node
272          val mkSINIT : var list -> node          val mkSINIT : unit -> node
273          val mkRETURN : var list -> node          val mkRETURN : var list -> node
274          val mkACTIVE : var list -> node          val mkACTIVE : unit -> node
275          val mkSTABILIZE : var list -> node          val mkSTABILIZE : unit -> node
276          val mkDIE : unit -> node          val mkDIE : unit -> node
277        (* properties *)        (* properties *)
278          val newProp : (node -> 'a) -> {          val newProp : (node -> 'a) -> {

Legend:
Removed from v.1443  
changed lines
  Added in v.1504

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