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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/tree-ir/tree-ir.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/tree-ir/tree-ir.sml

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

revision 3924, Fri Jun 3 17:30:27 2016 UTC revision 4469, Tue Aug 30 13:56:03 2016 UTC
# Line 27  Line 27 
27          inputs : input list,            (* global input variables *)          inputs : input list,            (* global input variables *)
28          constInit : block,              (* code that initializes constants and inputs *)          constInit : block,              (* code that initializes constants and inputs *)
29          globals : global_var list,      (* other global variables *)          globals : global_var list,      (* other global variables *)
30          globalInit : block,             (* CFG to initialize other globals (if any) *)          funcs : func_def list,          (* user-defined functions *)
31            globInit : block,               (* CFG to initialize other globals (if any) *)
32          strand : strand,                (* the strand definition *)          strand : strand,                (* the strand definition *)
33          create : create,                (* initial strand creation *)          create : create,                (* initial strand creation *)
34          update : block option           (* optional update code. *)          init : block option,            (* optional global initially code *)
35            update : block option           (* optional global update code. *)
36          }
37    
38        and func_def = Func of {
39            name : func,
40            params : var list,
41            body : block
42        }        }
43    
44      and strand = Strand of {      and strand = Strand of {
45          name : Atom.atom,          name : Atom.atom,
46          params : var list,          params : var list,
47            spatialDim : int option,
48          state : state_var list,          state : state_var list,
49          stateInit : block,          stateInit : method,
50          initM : block option,          initM : method option,
51          updateM : block,          updateM : method,
52          stabilizeM : block option          stabilizeM : method option
53        }        }
54    
55      and create = Create of {      and method = Method of {
56          dim : int option,               (* grid dimension; NONE for collections *)            needsW : bool,                (* does the method need the world (e.g., to print) *)
57          code : block                    (* the loop nest for creating the strands *)            hasG : bool,                  (* does the method contain references to globals? *)
58              body : block                  (* the method body *)
59        }        }
60    
61      and block = Block of {      and block = Block of {
# Line 63  Line 73 
73        | S_For of var * exp * exp * block        | S_For of var * exp * exp * block
74        | S_Foreach of var * exp * block        | S_Foreach of var * exp * block
75      (* special Diderot forms *)      (* special Diderot forms *)
76          | S_MapReduce of map_reduce list * var
77        | S_LoadNrrd of var * APITypes.t * string        | S_LoadNrrd of var * APITypes.t * string
78        | S_Input of global_var * string * string option * exp option (* get input *)        | S_Input of global_var * string * string option * exp option (* get input *)
79        | S_InputNrrd of global_var * string * string option * string option (* get image/seq input *)        | S_InputNrrd of global_var * string * string option * string option (* get image/seq input *)
80        | S_New of Atom.atom * exp list   (* new strand creation *)        | S_New of Atom.atom * exp list   (* new strand creation *)
81        | S_Save of state_var * exp  (* save strand state *)        | S_Save of state_var * exp  (* save strand state *)
       | S_Exit  
82        | S_Print of Ty.t list * exp list        | S_Print of Ty.t list * exp list
83          | S_Return of exp
84      (* return functions for methods *)      (* return functions for methods *)
85        | S_Active        | S_Active
86        | S_Stabilize        | S_Stabilize
87        | S_Die        | S_Die
88    
89        and map_reduce
90          = MapReduce of (var * Reductions.t * func * exp list * StrandSets.t)
91    
92      and exp      and exp
93        = E_Global of global_var        = E_Global of global_var
94        | E_State of exp option * state_var        | E_State of exp option * state_var
95        | E_Var of var        | E_Var of var
96        | E_Lit of Literal.t        | E_Lit of Literal.t
97        | E_Op of Op.rator * exp list        | E_Op of Op.rator * exp list
98          | E_Apply of func * exp list              (* user-defined function application *)
99        | E_Vec of int * int * exp list           (* vector value; the ints are the width and the        | E_Vec of int * int * exp list           (* vector value; the ints are the width and the
100                                                   * padded width                                                   * padded width
101                                                   *)                                                   *)
# Line 105  Line 120 
120          name : string,                  (* name (should be unique) *)          name : string,                  (* name (should be unique) *)
121          ty : Ty.t,                      (* type *)          ty : Ty.t,                      (* type *)
122          xty : APITypes.t option,        (* external type (for outputs) *)          xty : APITypes.t option,        (* external type (for outputs) *)
123          varying : bool                  (* varies over the lifetime of the strand *)          varying : bool,                 (* varies over the lifetime of the strand *)
124            shared : bool                   (* variable is accessed by other strands *)
125        }        }
126    
127      and var = V of {      and var = V of {
# Line 114  Line 130 
130          ty : Ty.t                       (* type *)          ty : Ty.t                       (* type *)
131        }        }
132    
133        and func = FV of {
134            name : string,                  (* name (should be unique) *)
135            id : Stamp.stamp,               (* unique ID *)
136            ty : Ty.t,                      (* return type *)
137            paramTys : Ty.t list,           (* parameter types *)
138            isMapFn : bool,                 (* is the function used in a parallel map? *)
139            needsW : bool,                  (* does the function need the world (e.g., to print) *)
140            hasG : bool                     (* does the function contain references to globals? *)
141          }
142    
143      withtype input = global_var Inputs.input      withtype input = global_var Inputs.input
144             and create = block Create.t
145    
146        fun emptyBlk (Block{body=[], ...}) = true
147          | emptyBlk _ = false
148    
149    end    end

Legend:
Removed from v.3924  
changed lines
  Added in v.4469

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