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-pp-fn.sml
ViewVC logotype

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

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

revision 504, Wed Feb 2 20:23:51 2011 UTC revision 505, Thu Feb 3 17:03:20 2011 UTC
# Line 30  Line 30 
30      fun incIndent (outS, i) = (outS, i+2)      fun incIndent (outS, i) = (outS, i+2)
31      fun pr ((outS, _), s) = TextIO.output(outS, s)      fun pr ((outS, _), s) = TextIO.output(outS, s)
32      fun prl (out, l) = pr(out, concat l)      fun prl (out, l) = pr(out, concat l)
33        fun prln (out, l) = (indent out; prl(out, l))
34    
35      fun typedVar x = String.concat [Ty.toString(Var.ty x), " ", Var.toString x]      fun typedVar x = String.concat [Ty.toString(Var.ty x), " ", Var.toString x]
36    
# Line 51  Line 52 
52      fun labelOf (IL.ND{id, ...}) = "L"^Stamp.toString id      fun labelOf (IL.ND{id, ...}) = "L"^Stamp.toString id
53    
54      fun ppCFG (out, IL.CFG{entry, exit}) = let      fun ppCFG (out, IL.CFG{entry, exit}) = let
55              fun ppNd (out, nd) = let
56            val out1 = incIndent out            val out1 = incIndent out
57            fun prPhi (y, xs) = (                  fun prPhi (y, xs) =
58                  indent out1;                        prln (out1, [
                 prl (out1, [  
59                      typedVar y, " = phi(",                      typedVar y, " = phi(",
60                      String.concatWith "," (List.map Var.toString xs), ")\n"                      String.concatWith "," (List.map Var.toString xs), ")\n"
61                    ]))                          ])
62            fun ppNd (out, nd) = if isMarked nd                  in
63                      if isMarked nd
64                  then ()                  then ()
65                  else (                  else (
66                    indent out;                        prln (out, [
                   prl (out, [  
67                        IL.Node.toString nd, ":  preds = [",                        IL.Node.toString nd, ":  preds = [",
68                        String.concatWith "," (List.map IL.Node.toString (IL.Node.preds nd)),                        String.concatWith "," (List.map IL.Node.toString (IL.Node.preds nd)),
69                        "]\n"                        "]\n"
70                      ]);                      ]);
71                    List.app (fn nd => ppNd (out, nd)) (IL.Node.succs nd))                        case IL.Node.kind nd
72                           of IL.NULL => ()
73                            | IL.ENTRY{succ} => ppNd (out, !succ)
74                            | IL.JOIN{phis, succ, ...} => (
75                                List.app prPhi (!phis);
76                                ppNd (out, !succ))
77                            | IL.COND{cond, trueBranch, falseBranch, ...} => (
78                                prln (out1, [
79                                    "if ", Var.toString cond,
80                                    " then goto ", IL.Node.toString(!trueBranch),
81                                    " else goto ", IL.Node.toString(!falseBranch), "\n"
82                                  ]);
83                                ppNd (out, !trueBranch);
84                                ppNd (out, !falseBranch))
85                            | IL.COM{text, succ, ...} => (
86                                List.app (fn s => prln (out1, ["//", s, "\n"])) text;
87                                ppNd (out, !succ))
88                            | IL.ASSIGN{stm, succ, ...} => (
89                                prln (out1, [assignToString stm, "\n"]);
90                                ppNd (out, !succ))
91                            | IL.NEW{strand, args, succ, ...} => (
92                                prln (out1, [
93                                    "new ", Atom.toString strand, "(",
94                                    String.concatWith "," (List.map Var.toString args), ");\n"
95                                  ]);
96                                ppNd (out, !succ))
97                            | IL.DIE _ => ()
98                            | IL.STABILIZE _ => ()
99                            | IL.EXIT _ => ()
100                          (* end case *))
101                    end
102            in            in
103              ppNd (out, entry)              ppNd (out, entry)
104            end            end

Legend:
Removed from v.504  
changed lines
  Added in v.505

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