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

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/IL/forward-dfa-fn.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/IL/forward-dfa-fn.sml

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

revision 1861, Sat Apr 21 15:30:26 2012 UTC revision 1862, Sun Apr 22 19:45:47 2012 UTC
# Line 37  Line 37 
37      fun clear node = (clrIn node; clrOut node)      fun clear node = (clrIn node; clrOut node)
38    
39      fun analyse (entryVal, cfg) = let      fun analyse (entryVal, cfg) = let
40    (* DEBUG *)val t = Timer.startCPUTimer()
41          (* use DFS order to get quicker convergence *)          (* use DFS order to get quicker convergence *)
42            val nodes as entry::rest = IL.CFG.sort cfg            val nodes as entry::rest = IL.CFG.sort cfg
43    (*DEBUG*)val nIters = ref 0
44    (*DEBUG*)val nVisits = ref 0
45          (* the first pass does not do change propagation, since we haven't computed anything yet *)          (* the first pass does not do change propagation, since we haven't computed anything yet *)
46            fun initNode nd = let            fun initNode nd = let
47                  val inValue = D.join (List.map getOut (IL.Node.preds nd))                  val inValue = D.join (List.map getOut (IL.Node.preds nd))
48                  val outValue = D.transfer (inValue, nd)                  val outValue = D.transfer (inValue, nd)
49                  in                  in
50    (*DEBUG*)nVisits := !nVisits + 1;
51                    setIn (nd, inValue);                    setIn (nd, inValue);
52                    setOut (nd, outValue)                    setOut (nd, outValue)
53                  end                  end
# Line 58  Line 62 
62                            else let                            else let
63                              val outValue = D.transfer (inValue, nd)                              val outValue = D.transfer (inValue, nd)
64                              in                              in
65    (*DEBUG*)nVisits := !nVisits + 1;
66                                anyChange := true;                                anyChange := true;
67                                setIn (nd, inValue);                                setIn (nd, inValue);
68                                if D.same(getOut nd, outValue)                                if D.same(getOut nd, outValue)
# Line 66  Line 71 
71                              end                              end
72                        end                        end
73                  in                  in
74    (*DEBUG*)nIters := !nIters + 1;
75                    List.app doNode rest;                    List.app doNode rest;
76                    if !anyChange then iterate() else ()                    if !anyChange then iterate() else ()
77                  end                  end
# Line 76  Line 82 
82              List.app initNode rest;              List.app initNode rest;
83            (* iterate to a fixed point *)            (* iterate to a fixed point *)
84              iterate ();              iterate ();
85    (*DEBUG*)let val gcTime = Timer.checkGCTime t
86    val {usr, sys} = Timer.checkCPUTimer t
87    in
88    (* DEBUG *)print(concat[IL.ilName, " DFA: cpu = ", Time.toString(Time.+(usr, sys)),
89    " seconds, gc = ", Time.toString gcTime, " seconds, ",
90    Int.toString(List.length rest + 1), " nodes, ",
91    Int.toString(!nVisits), " visits, ",
92    Int.toString(!nIters), " iterations\n"])
93    end;
94              nodes              nodes
95            end            end
96    

Legend:
Removed from v.1861  
changed lines
  Added in v.1862

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