2000-04-22 Stefan Monnier * opt/flintopt.txt: New file. * opt/abcopt.sml: New file. * main/flintcomp.sml: Change `Compiler' to `FLINT' or `CPS' in the name of phases printed by Compiler.Stats. (abcopt): New phase. * main/control.sml (phases): Move loopify+fixfix to before wrap. * cpsopt/cpsopt.sml (zeroexpand): New function. 2000-04-19 Stefan Monnier * reps/typeoper.sml (tkAbsGen): Remove. * opt/fixfix.sml (curry): Make sure that uncurrying will not make a function recursive, but allow uncurrying a mix of functor and function in some restricted cases. (uncurry): Properly handle the new functor/function case. (SWITCH): Don't change the ordering while folding over the arms. Plus some cosmetic code movements to avoid long lines. * main/control.sml (phases): Move loopify (and its fixfix) to before `reify' (while still keeping a fixfix after reify). 2000-04-07 Stefan Monnier * opt/switchoff.sml: Remove. * main/flintcomp.sml: Remove switchoff-code and fix the Stats.doPhase call for fcontract so as to get correct measurements. * reps/equal.sml: Rewritten to generate more CPS-like code. * opt/fcontract.sml (fcLet): re-introduced the branch/switch code, but without the deadly multiple traversals. 2000-02-18 Stefan Monnier * opt/switchoff.sml (inside/LET): use IH_MAYBE instead of IH_ALWAYS. 2000-01-31 Stefan Monnier * opt/fcontract.sml (fcLet/cassoc): don't do a second pass over the output of the rewrite. It leads to quadratic behavior for `x1 andalso x2 ...'. 1999-07-10 Stefan Monnier * opt/split.sml: don't burp when you can't split. 1999-03-08 Stefan Monnier * 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. * main/control.sml (splitThreshold): new var. * opt/specialize (kBnd): be more conservative with nvars (it's too conservative, now). * 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 1999-03-04 Stefan Monnier * 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. 1999-03-02 Stefan Monnier * kernel/ltyextern.sml (tnarrow), reps/{reify,rttype,typeoper}.sml: don't unflatten arguments when reifying them. 1999-02-28 Stefan Monnier * opt/fcontract.sml (fcEta): do the known->unknown eta-reduce if the `known' function is not locally defined (in which case the known/unknown distinction is pointless anyway). (wrap): don't forget to junk dead inlinable functions. 1999-02-26 Stefan Monnier * opt/split.sml: seriously reworked. Now splits TFNs as well. 1999-02-25 Stefan Monnier * kernel/primop.sml (effect): removed DEREF and MAKEREF from the pure primops. 1999-02-24 Stefan Monnier * flint/flintutil.sml (copy): sort the type-map since {lt,tc}_subst actually expects it to be sorted. 1999-02-23 Stefan Monnier * opt/recover.sml (lt_nvpoly): moved to ltyextern.sml * kernel/ltyextern.{sml,sig} (lt_nvpoly): new function (digged from recover.sml to build a LT_POLY in the case of named tvars. 1999-02-20 Stefan Monnier * opt/recover.sml: removed unused depth arguments left behind from before we switched to named tvars. (addLty): added for the benefit of opt/split.sml 1999-02-17 Stefan Monnier * opt/split.sml: new file. Does the lambda-splitting for cross-module inlining. Currently in a simplified form. * opt/fcontract.sml (fcEta): bug with (mutually) recursive eta redexes. 1998-12-18 Stefan Monnier * opt/fcontract.sml: turned fcFun into a foldable function. 1998-12-17 Stefan Monnier * opt/loopify.sml: fix (TR-ing would fail if not LR-ing also) 1998-12-16 Stefan Monnier * opt/loopify.sml: make dropinvariant optional. 1998-12-15 Stefan Monnier * opt/loopify.sml: drop invariant arguments in loops. * opt/optutils.sml (filter): curried. 1998-12-12 Stefan Monnier * opt/fcontract.sml (fcFun): value-specialization (turned off: useless) (fcApp): use IH_MAYBE. * opt/fixfix.sml: improved the inlining heuristic by using the IH_MAYBE. 1998-11-29 Stefan Monnier * opt/fcontract.sml (fcFun): only update the binding (after contracting the function) if there are more functions to contract (the unusual case) 1998-11-28 Stefan Monnier * opt/[lf]contract.sml,collect.sml: use PO.purePrimop * opt/fcontract.sml: generalized the BRANCH thing. It should now be faster to detect and avoid potential code blowups while applying to more cases. But it requires one more pass to generate the same code quality :-( (fcexp): straightforward split into functions (fcLet): do the BRANCH thing after contraction (plus force an additional contraction, so the total is 3 passes for a fairly good handling of wrap's equality-primop compilation) (fcLet): drop TAPP if the output is unused. 1998-11-25 Stefan Monnier * opt/loopify.sml: improved tail-calls recognition. Also be more careful about wrapping loops into functions (so contraction is not needed to cleanup). * opt/fixfix.sml: pretend loops are smaller to increase their inlining. * kernel/ltyextern.sml: commented out Stats calls. * flint/flint.sig: changed LK_WHILE to LK_TAIL. 1998-11-21 Stefan Monnier * reps/rttype.sml: changes from Bratin. (rtLexp): define the NVAR case (return the tvar as an lvar). * opt/[fl]contract.sml: removed the restriction on inlining at the same deBruijn depth. * opt/lift.sml: new file for typelifting. * flint/flintutil.sml (copy): added tvar renaming. * flint/tvarcvt.sml: new file for named tvar <-> deBruijn conversions. 1998-11-19 Stefan Monnier * opt/loopify.sml: new file * cps/convert.sml: added code to take advantage of LK_WHILE loops. * opt/optutils.sml (id): removed. That was stupid. * opt/collect.sml: drop support for actuals (was only used for cstargs). * opt/lcontract.sml (lpfd): reset the inline bit to a safe value. * opt/fcontract.sml (cstargs): eliminated. Might reappear in a specialization phase some day. (inline): turned off unrolling because it's buggy. (APP): use the new ifs, damit! 1998-11-11 Stefan Monnier * opt/fcontract.sml (sval): ref svals rather than going through F.value * opt/collect.sml: switched back to a read-only collect phase. Also try to export the info to allow fcontract to circumvent some of the get calls. (info): got rid of Transfer by using the intmap for redirection. (unuselexp): junk the fundec part. (unuse): return a boolean instead of calling an undertaker. 1998-11-09 Stefan Monnier * opt/fcontract.sml: take advantage of single-arm SWITCH (aka decon) (SWITCH(CON)): just compare the conreps because types may differ (?) (inlineWitness): ugly hack used to figure out if inlining happened, in order to decide whether to keep the inline bit or not (in cfun). 1998-11-06 Stefan Monnier * opt/fcontract.sml: added unrolling support * reps/coerce.sml: replaced FK_FCT by fkfct, itself defined "sanely" * opt/fixfix.sml: adapted to the new fkind and introduced unrolling 1998-11-05 Stefan Monnier * flint/flint.sig: changed fkind to have most annotations valid on functors as well. It also adds a loopkind annotation as well as extends the inline boolean into a three-way alternative. 1998-10-30 Stefan Monnier * opt/fcontract.sml (dropcstargs): replace constant args by the constant. (cexp): switched to a continuation passing style to implement the let-associativity rule in a better way. * opt/fixfix.sml (curry): correctly handle "impossible" cases. * opt/collect.sml: completely revisited: no distinction between internal/external uses, dead-code elimination done right away. This makes fcontract a little simpler. 1998-10-28 Stefan Monnier * opt/fcontract.sml (inline): do simple inlining only for non-isrec functions (to ensure we never silently turn external uses into internal uses) and correspondingly change the agressive inlining to inline non-inlinable functions as long as its their last use. (dropargs): new functions to drop unused arguments. 1998-10-27 Stefan Monnier * opt/optutils.sml: trying to reuse code between fixfix and fcontract. * opt/collect.sml (called): added for eta-expand. * opt/fcontract.sml (inline): allow single inlining of FK_FCT. * lsplit/ls-inline.sml: don't call lcontract anymore. 1998-10-26 Stefan Monnier * cps/cpstrans.sml (spillOut): fix from Zhong. * cpsopt/cpsopt.sml: use Control.CG.cpsopt and fold over it. * main/flintcomp.sml: use Control.FLINT.phases and fold over it. * opt/fixfix.sml (curry): use Control.FLINT.maxargs to bound the uncurrying
Click to toggle
does not end with </html> tag
does not end with </body> tag
The output has ended thus: ases and fold over it. * opt/fixfix.sml (curry): use Control.FLINT.maxargs to bound the uncurrying