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 3475, Wed Dec 2 18:48:58 2015 UTC revision 3508, Fri Dec 18 14:19:30 2015 UTC
# Line 139  Line 139 
139                                ]);                                ]);
140                              ppNd (out, false, !trueBranch);                              ppNd (out, false, !trueBranch);
141                              ppNd (out, false, !falseBranch))                              ppNd (out, false, !falseBranch))
142                          | IR.FOREACH{phis, var, src, body, succ, ...} => (                          | IR.FOREACH{phis, var, src, bodyEntry, succ, ...} => (
143                              prln (out1, [                              prln (out1, [
144                                  "foreach (", Var.toString var, " in ", Var.toString src, ")",                                  "foreach (", Var.toString var, " in ", Var.toString src, ")",
145                                  " on exit goto ", IR.Node.toString(!succ), "\n"                                  " on exit goto ", IR.Node.toString(!succ), "\n"
146                                ]);                                ]);
147                              List.app (prPhi (incIndent out1)) (!phis);                              List.app (prPhi (incIndent out1)) (!phis);
148                                goto (out, !bodyEntry);
149                              goto (out, !succ))                              goto (out, !succ))
150                          | IR.COM{text, succ, ...} => (                          | IR.COM{text, succ, ...} => (
151                              List.app (fn s => prln (out1, ["//", s, "\n"])) text;                              List.app (fn s => prln (out1, ["//", s, "\n"])) text;
# Line 171  Line 172 
172                                  IR.StateVar.toString lhs, " = ", Var.toString rhs, ";\n"                                  IR.StateVar.toString lhs, " = ", Var.toString rhs, ";\n"
173                                ]);                                ]);
174                              goto (out, !succ))                              goto (out, !succ))
175                          | IR.EXIT{kind, live, succ, ...} => let                          | IR.EXIT{kind, succ, ...} => (
                             val live = (case live  
                                    of [] => "()"  
                                     | [x] => String.concat["(", Var.toString x, ")"]  
                                     | xs => String.concat[  
                                           "(",  
                                           String.concatWith "," (List.map Var.toString xs),  
                                           ")"  
                                         ]  
                                   (* end case *))  
                             in  
176                                case kind                                case kind
177                                 of ExitKind.FRAGMENT =>                               of ExitKind.RETURN => prln (out1, ["return\n"])
178                                      prln (out1, ["live vars = ", live, "\n"])                                | ExitKind.ACTIVE => prln (out1, ["active\n"])
179                                  | ExitKind.SINIT =>                                | ExitKind.STABILIZE => prln (out1, ["stabilize\n"])
180                                      prln (out1, ["strand_init ", live, "\n"])                                | ExitKind.DIE => prln (out1, ["die\n"])
181                                  | ExitKind.RETURN =>                                | ExitKind.UNREACHABLE => prln (out1, ["unreachable\n"])
                                     prln (out1, ["return ", live, "\n"])  
                                 | ExitKind.ACTIVE =>  
                                     prln (out1, ["active ", live, "\n"])  
                                 | ExitKind.STABILIZE =>  
                                     prln (out1, ["stabilize ", live, "\n"])  
                                 | ExitKind.DIE =>  
                                     prln (out1, ["die ", live, "\n"])  
                                 | ExitKind.UNREACHABLE =>  
                                     prln (out1, ["unreachable\n"])  
182                                (* end case *);                                (* end case *);
183                                case !succ                                case !succ
184                                 of SOME nd => goto (out, nd)                                 of SOME nd => goto (out, nd)
185                                  | _ => ()                                  | _ => ()
186                                (* end case *)                              (* end case *))
                             end  
187                        (* end case *))                        (* end case *))
188                  end                  end
189            in            in
# Line 211  Line 192 
192              IR.CFG.apply clear cfg              IR.CFG.apply clear cfg
193            end            end
194    
195      fun ppInitially (out, IR.Initially{isArray, rangeInit, iters, create}) = let      fun ppCreate (out, IR.Create{dim, code}) = (
196            val (initArg, strand, args) = create            indent out;
197            fun ppIters (out, []) = (            case dim
198                  ppCFG (out, initArg);             of NONE => pr (out, "COLLECTION\n")
199                  prln (out, [              | SOME dim => prl (out, ["GRID(", Int.toString dim, ")\n"])
200                      "new ", Atom.toString strand, "(",            (* end case *);
201                      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  
202    
203      fun ppMethod (out, IR.Method{name, body}) = let      fun ppMethod (out, name) body = let
204            val out1 = incIndent out            val out1 = incIndent out
           fun prVars xs = List.app (fn x => prl(out, [" ", typedVar x, ";"])) xs  
205            in            in
206              indent out; prl(out, ["method ", StrandUtil.nameToString name, "\n"]);              indent out; prl(out, ["method ", name, "\n"]);
207              ppCFG (incIndent out1, body);              ppCFG (incIndent out1, body);
208              indent out; prl(out, ["end ", StrandUtil.nameToString name, "\n"])              indent out; prl(out, ["end ", name, "\n"])
209            end            end
210    
211      and ppStrand (out, IR.Strand{name, params, state, stateInit, methods}) = let      and ppStrand (out, IR.Strand{name, params, state, stateInit, initM, updateM, stabilizeM}) = let
212            val out1 = incIndent out            val out1 = incIndent out
213            fun stateVar x = let            fun stateVar x = let
214                  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 220 
220              indent out;              indent out;
221              prl(out, [              prl(out, [
222                  "strand ", Atom.toString name, " (",                  "strand ", Atom.toString name, " (",
223                  String.concatWith ", " (List.map typedVar params), ")\n"                  String.concatWithMap ", " typedVar params, ")\n"
224                ]);                ]);
225              indent out1; pr(out1, "state: "); List.app stateVar state; pr(out1, "\n");              indent out1; pr(out1, "state: "); List.app stateVar state; pr(out1, "\n");
226              ppCFG (incIndent out1, stateInit);              ppCFG (incIndent out1, stateInit);
227              List.app (fn m => ppMethod(out1, m)) methods;              Option.app (ppMethod (out1, "initially")) initM;
228                ppMethod (out1, "update") updateM;
229                Option.app (ppMethod (out1, "stabilize")) stabilizeM;
230              indent out; prl(out, ["end ", Atom.toString name, "\n"])              indent out; prl(out, ["end ", Atom.toString name, "\n"])
231            end            end
232    
233      fun ppGlobal outS gv = let      fun ppGlobal prefix outS gv = (
           val prefix = if GVar.isInput gv then "input " else "global "  
           in  
234              indent outS;              indent outS;
235              prl(outS, [              prl(outS, [
236                  prefix, Ty.toString(GVar.ty gv), " ", GVar.uniqueName gv, "\n"                prefix, " ", Ty.toString(GVar.ty gv), " ", GVar.uniqueName gv, "\n"
237                ])              ]))
           end  
238    
239      fun output (outS, msg, IR.Program{props, globals, inputInit, globalInit, initially, strands}) = let      fun ppInput outS inp = prl (outS, ["input ", Inputs.toString inp, "\n"])
240    
241        fun output (outS, msg, prog) = let
242              val IR.Program{
243                      props, consts, inputs, globals,
244                      constInit, globalInit, strand, create, update
245                    } = prog
246            val out = (outS, 0)            val out = (outS, 0)
247            val out1 = incIndent out            val out1 = incIndent out
248            in            in
249              pr (out, concat["##### ", msg, " ####\n"]);              pr (out, concat["##### ", IR.irName, ": ", msg, " ####\n"]);
250              pr (out, "## properties\n");              pr (out, "## properties\n");
251              prln (out1, [              prln (out1, [
252                  String.concatWithMap " " Properties.toString props, "\n"                  String.concatWithMap " " Properties.toString props, "\n"
253                ]);                ]);
254              pr (out, "## globals\n");              pr (out, "## globals\n");
255              List.app (ppGlobal out1) globals;              List.app (ppGlobal "const" out1) consts;
256                List.app (ppInput out1) inputs;
257                List.app (ppGlobal "global" out1) globals;
258              pr (out, "## input initialization\n");              pr (out, "## input initialization\n");
259              ppCFG (out1, inputInit);              ppCFG (out1, constInit);
260              pr (out, "## global initialization\n");              pr (out, "## global initialization\n");
261              ppCFG (out1, globalInit);              ppCFG (out1, globalInit);
262              pr (out, "## initially\n");              pr (out, "## strand\n");
263              ppInitially (out1, initially);              ppStrand (out1, strand);
264              pr (out, "## strands\n");              pr (out, "## initial strand creation\n");
265              List.app (fn strand => ppStrand(out1, strand)) strands;              ppCreate (out1, create);
266                case update
267                 of SOME cfg => (
268                      pr (out, "## global update\n");
269                      ppCFG (out1, cfg))
270                  | NONE => ()
271                (* end case *);
272              pr (out, "#### end program ####\n")              pr (out, "#### end program ####\n")
273            end            end
274    

Legend:
Removed from v.3475  
changed lines
  Added in v.3508

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