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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/cfg-ir/ssa-pp-fn.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/cfg-ir/ssa-pp-fn.sml

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

revision 3484, Sat Dec 5 15:33:56 2015 UTC revision 3485, Sun Dec 6 13:48:48 2015 UTC
# Line 185  Line 185 
185                                case kind                                case kind
186                                 of ExitKind.FRAGMENT =>                                 of ExitKind.FRAGMENT =>
187                                      prln (out1, ["live vars = ", live, "\n"])                                      prln (out1, ["live vars = ", live, "\n"])
                                 | ExitKind.SINIT =>  
                                     prln (out1, ["strand_init ", live, "\n"])  
188                                  | ExitKind.RETURN =>                                  | ExitKind.RETURN =>
189                                      prln (out1, ["return ", live, "\n"])                                      prln (out1, ["return ", live, "\n"])
190                                  | ExitKind.ACTIVE =>                                  | ExitKind.ACTIVE =>
# Line 211  Line 209 
209              IR.CFG.apply clear cfg              IR.CFG.apply clear cfg
210            end            end
211    
212      fun ppInitially (out, IR.Initially{isArray, rangeInit, iters, create}) = let      fun ppCreate (out, IR.Create{dim, code}) = (
213            val (initArg, strand, args) = create            indent out;
214            fun ppIters (out, []) = (            case dim
215                  ppCFG (out, initArg);             of NONE => pr (out, "COLLECTION\n")
216                  prln (out, [              | SOME dim => prl (out, ["GRID(", Int.toString dim, ")\n"])
217                      "new ", Atom.toString strand, "(",            (* end case *);
218                      String.concatWith "," (List.map Var.toString args), ");\n"            ppCFG (incIndent out, code))
                   ]))  
             | ppIters (out, (param, lo, hi)::iters) = (  
                 indent out; prl(out, [  
                     "for ", typedVar param, " = ", Var.toString lo, " .. ", Var.toString hi, "\n"  
                   ]);  
                 ppIters (incIndent out, iters))  
           in  
             indent out; prl(out, if isArray then ["ARRAY\n"] else ["COLLECTION\n"]);  
             ppCFG (incIndent out, rangeInit);  
             ppIters (incIndent out, iters)  
           end  
219    
220      fun ppMethod (out, IR.Method{name, body}) = let      fun ppMethod (out, name) body = let
221            val out1 = incIndent out            val out1 = incIndent out
           fun prVars xs = List.app (fn x => prl(out, [" ", typedVar x, ";"])) xs  
222            in            in
223              indent out; prl(out, ["method ", StrandUtil.nameToString name, "\n"]);              indent out; prl(out, ["method ", name, "\n"]);
224              ppCFG (incIndent out1, body);              ppCFG (incIndent out1, body);
225              indent out; prl(out, ["end ", StrandUtil.nameToString name, "\n"])              indent out; prl(out, ["end ", name, "\n"])
226            end            end
227    
228      and ppStrand (out, IR.Strand{name, params, state, stateInit, methods}) = let      and ppStrand (out, IR.Strand{name, params, state, stateInit, initM, updateM, stabilizeM}) = let
229            val out1 = incIndent out            val out1 = incIndent out
230            fun stateVar x = let            fun stateVar x = let
231                  val l = [Ty.toString(IR.StateVar.ty x), " ", IR.StateVar.toString x, ";"]                  val l = [Ty.toString(IR.StateVar.ty x), " ", IR.StateVar.toString x, ";"]
# Line 251  Line 237 
237              indent out;              indent out;
238              prl(out, [              prl(out, [
239                  "strand ", Atom.toString name, " (",                  "strand ", Atom.toString name, " (",
240                  String.concatWith ", " (List.map typedVar params), ")\n"                  String.concatWithMap ", " typedVar params, ")\n"
241                ]);                ]);
242              indent out1; pr(out1, "state: "); List.app stateVar state; pr(out1, "\n");              indent out1; pr(out1, "state: "); List.app stateVar state; pr(out1, "\n");
243              ppCFG (incIndent out1, stateInit);              ppCFG (incIndent out1, stateInit);
244              List.app (fn m => ppMethod(out1, m)) methods;              Option.app (ppMethod (out1, "initially")) initM;
245                ppMethod (out1, "update") updateM;
246                Option.app (ppMethod (out1, "stabilize")) stabilizeM;
247              indent out; prl(out, ["end ", Atom.toString name, "\n"])              indent out; prl(out, ["end ", Atom.toString name, "\n"])
248            end            end
249    
250      fun ppGlobal outS gv = let      fun ppGlobal prefix outS gv = (
           val prefix = if GVar.isInput gv then "input " else "global "  
           in  
251              indent outS;              indent outS;
252              prl(outS, [              prl(outS, [
253                  prefix, Ty.toString(GVar.ty gv), " ", GVar.uniqueName gv, "\n"                prefix, " ", Ty.toString(GVar.ty gv), " ", GVar.uniqueName gv, "\n"
254                ])              ]))
           end  
255    
256      fun output (outS, msg, IR.Program{props, globals, inputInit, globalInit, initially, strands}) = let      fun output (outS, msg, prog) = let
257              val IR.Program{
258                      props, consts, inputs, globals,
259                      constInit, globalInit, strand, create, update
260                    } = prog
261            val out = (outS, 0)            val out = (outS, 0)
262            val out1 = incIndent out            val out1 = incIndent out
263            in            in
# Line 278  Line 267 
267                  String.concatWithMap " " Properties.toString props, "\n"                  String.concatWithMap " " Properties.toString props, "\n"
268                ]);                ]);
269              pr (out, "## globals\n");              pr (out, "## globals\n");
270              List.app (ppGlobal out1) globals;              List.app (ppGlobal "const" out1) consts;
271                List.app (ppGlobal "input" out1) inputs;
272                List.app (ppGlobal "global" out1) globals;
273              pr (out, "## input initialization\n");              pr (out, "## input initialization\n");
274              ppCFG (out1, inputInit);              ppCFG (out1, constInit);
275              pr (out, "## global initialization\n");              pr (out, "## global initialization\n");
276              ppCFG (out1, globalInit);              ppCFG (out1, globalInit);
277              pr (out, "## initially\n");              pr (out, "## strand\n");
278              ppInitially (out1, initially);              ppStrand (out1, strand);
279              pr (out, "## strands\n");              pr (out, "## initial strand creation\n");
280              List.app (fn strand => ppStrand(out1, strand)) strands;              ppCreate (out1, create);
281                case update
282                 of SOME cfg => (
283                      pr (out, "## global update\n");
284                      ppCFG (out1, cfg))
285                  | NONE => ()
286                (* end case *);
287              pr (out, "#### end program ####\n")              pr (out, "#### end program ####\n")
288            end            end
289    

Legend:
Removed from v.3484  
changed lines
  Added in v.3485

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