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

SCM Repository

[smlnj] View of /sml/trunk/src/compiler/FLINT/main/control.sml
ViewVC logotype

View of /sml/trunk/src/compiler/FLINT/main/control.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 220 - (download) (annotate)
Tue Mar 9 02:15:05 1999 UTC (21 years, 7 months ago) by monnier
File size: 1417 byte(s)
* opt/split.sml (sexp): don't split HANDLE (it's incorrect).
(funeffect): embryo to detect side-effect free APPs (non-functional).
(splitThreshold): to put a cap on inlining.
(stfn): don't bother splitting inlinable TFNs.
* opt/fixfix.sml (curry): fixed bug when uncurrying cooked functions.
* opt/fcontract.sml (fcFun):  fix bug when undertaking mut-rec functions.
* main/flintcomp.sml:  added `recover' to help debugging.
updated the fold to allow extraction of Fi and return it at the end.
* lsplit/ls-inline.sml (oneBranch): fixed the wrapper function.
* flint/flintutil.sml (freevars):  forgot to count the arg of SWITCH.
* flint/flint.sig:  added a tfkind to TFN (only inlining for now).
* main/control.sml: new file. Moved from TopLevel/viscomp/control.sml
(splitThreshold): new var.
* TopLevel/viscomp/control.sig (FLINT.printFctTypes): to reduce clutter.
(splitThreshold): to control splitting agressiveness.
* TopLevel/viscomp/control.sml:  moved substructs outside so that clients
  can refer to them directly (rather than through Control.Foo) to reduce
  spurious dependencies.
* TopLevel/main/{codes,compile}: call `split' from flintcomp, not compile.
* kernel/ltyextern.sml (tnarrow), reps/{reify,rttype,typeoper}.sml:
  flatten arguments when reifying them since the pretty-printer doesn't
  know how to deal with flattened reified TFNs.
(* copyright 1999 YALE FLINT project *)

structure FLINT_Control (* : FLINTCONTROL *) =
struct
    val print	        = ref false
    val printPhases	= ref false
    val printFctTypes   = ref false
    (* `split' should probably be called after `fixfix' since
     * fcontract might eliminate some uncurry wrappers which are
     * locally unused but could be cross-module inlined. *)
    val phases	        = ref ["lcontract", "specialize",
			       "fixfix", "fcontract",
			       "loopify", "fixfix", "split",
			       "wrap", "fcontract",
			       (* "names2deb", "typelift", "deb2names", *)
			       "reify", "loopify", "fixfix", "fcontract",
			       "fixfix", "fcontract"]
			  
    val inlineThreshold = ref 16
    val splitThreshold  = ref 0
    val unrollThreshold = ref 20
    val maxargs	        = ref 6
    val dropinvariant   = ref true
			      
    val specialize	= ref true
    val liftLiterals    = ref false
    val sharewrap	= ref true
    val saytappinfo	= ref false	(* for typelifting statistics *)
				  
    (* only for temporary debugging *)
    val misc	        = ref 0
			  
    (* FLINT internal type-checking controls *)
    val check	        = ref true	(* fails on MLRISC/sparc/sparcRegAlloc.sml *)
    val checkDatatypes  = ref false	(* loops on the new cm.sml *)
    val checkKinds	= ref true

    (* non-exported crap *)
    val recover : (int -> unit) ref = ref(fn x => ())
end

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