Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/compiler/FLINT/cpsopt/cpsopt.sml
ViewVC logotype

Diff of /sml/trunk/compiler/FLINT/cpsopt/cpsopt.sml

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

revision 4812, Wed Sep 12 21:56:57 2018 UTC revision 4813, Wed Sep 12 23:55:25 2018 UTC
# Line 24  Line 24 
24    
25      fun say msg = Control.Print.say(String.concat msg)      fun say msg = Control.Print.say(String.concat msg)
26    
27      (** obsolete table: used by cpsopt as a dummy template *)    (** the main optimization function *)
     exception ZZZ  
     val dummyTable : FLINT.lty IntHashTable.hash_table =  
           IntHashTable.mkTable(256, ZZZ)  
   
 (** the main function reduce *)  
28  (* NOTE: The third argument to reduce is currently ignored.  (* NOTE: The third argument to reduce is currently ignored.
29     It used to be used for reopening closures. *)     It used to be used for reopening closures. *)
30      fun reduce (function, _, afterClosure) = let      fun reduce (function, _, afterClosure) = let
           val table = dummyTable  
31            val debug = !CG.debugcps (* false *)            val debug = !CG.debugcps (* false *)
32            fun debugprint s = if debug then say s else ()            fun debugprint s = if debug then say s else ()
33            fun debugflush() = if debug then Control.Print.flush() else ()            fun debugflush() = if debug then Control.Print.flush() else ()
# Line 54  Line 48 
48                  val f' = (                  val f' = (
49                        clicked := 0;                        clicked := 0;
50                        Contract.contract {                        Contract.contract {
51                            function=f, table=table, click=click, last=last, size=cpssize                            function=f, click=click, last=last, size=cpssize
52                          })                          })
53                  in                  in
54                    debugprint [                    debugprint [
# Line 70  Line 64 
64                  val f' = (                  val f' = (
65                        clicked := 0; CG.dropargs := false;                        clicked := 0; CG.dropargs := false;
66                        Contract.contract {                        Contract.contract {
67                            function=f, table=table, click=click, last=false, size=cpssize                            function=f, click=click, last=false, size=cpssize
68                          })                          })
69                  in                  in
70                    debugprint [                    debugprint [
# Line 86  Line 80 
80                  val f' = (                  val f' = (
81                        clicked := 0;                        clicked := 0;
82                        Contract.contract {                        Contract.contract {
83                            function=f, table=table, click=click, last=true, size=cpssize                            function=f, click=click, last=true, size=cpssize
84                          })                          })
85                  in                  in
86                    debugprint [                    debugprint [
# Line 103  Line 97 
97                    else let                    else let
98                      val f' = Expand.expand{                      val f' = Expand.expand{
99                              function=f, click=click, bodysize=n,                              function=f, click=click, bodysize=n,
100                              afterClosure=afterClosure, table=table,                              afterClosure=afterClosure,
101                              unroll=unroll, do_headers=true                              unroll=unroll, do_headers=true
102                            }                            }
103                      in                      in
# Line 113  Line 107 
107    
108            fun zeroexpand f = Expand.expand{            fun zeroexpand f = Expand.expand{
109                    function=f, click=click, bodysize=0,                    function=f, click=click, bodysize=0,
110                    afterClosure=afterClosure, table=table,                    afterClosure=afterClosure,
111                    unroll=false, do_headers=false                    unroll=false, do_headers=false
112                  }                  }
113    
# Line 122  Line 116 
116                  if not(!CG.flattenargs)                  if not(!CG.flattenargs)
117                    then f                    then f
118                    else let                    else let
119                      val f' = Flatten.flatten{function=f,table=table,click=click}                      val f' = Flatten.flatten{function=f, click=click}
120                      in                      in
121                        debugprint["Flatten stats: clicks = ", Int.toString (!clicked), "\n"];                        debugprint["Flatten stats: clicks = ", Int.toString (!clicked), "\n"];
122                        f'                        f'
# Line 163  Line 157 
157                    if not(!CG.uncurry)                    if not(!CG.uncurry)
158                      then f                      then f
159                      else let                      else let
160                        val f' = Uncurry.etasplit{function=f,table=table,click=click}                        val f' = Uncurry.etasplit{function=f, click=click}
161                        in                        in
162                          debugprint["Uncurry stats: clicks = ", Int.toString (!clicked), "\n"];                          debugprint["Uncurry stats: clicks = ", Int.toString (!clicked), "\n"];
163                          f'                          f'
# Line 174  Line 168 
168                  if not(!CG.etasplit)                  if not(!CG.etasplit)
169                    then f                    then f
170                    else let                    else let
171                      val f' = EtaSplit.etasplit{function=f, table=table, click=click}                      val f' = EtaSplit.etasplit{function=f, click=click}
172                      in                      in
173                        debugprint["Etasplit stats: clicks = ", Int.toString (!clicked), "\n"];                        debugprint["Etasplit stats: clicks = ", Int.toString (!clicked), "\n"];
174                        f'                        f'
# Line 242  Line 236 
236  (*              val function7 = last_contract function6 *)  (*              val function7 = last_contract function6 *)
237  (*              val optimized function7 *)  (*              val optimized function7 *)
238                  in                  in
239                    IntInfCnv.elim {                    IntInfCnv.elim optimized
                       function = optimized,  
                       mkKvar = LambdaVar.mkLvar,  
                       mkNumVar = fn sz => let  
                           val v = LambdaVar.mkLvar ()  
                           in  
                             IntHashTable.insert table (v, LtyExtern.ltc_num sz);  
                             v  
                           end  
                     }  
240                  end)                  end)
241              before (debugprint["\n"]; debugflush())              before (debugprint["\n"]; debugflush())
242            end (* fun reduce *)            end (* fun reduce *)

Legend:
Removed from v.4812  
changed lines
  Added in v.4813

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