SCM Repository
View of /trunk/src/compiler/high-il/high-opt.sml
Parent Directory
|
Revision Log
Revision 1640 -
(download)
(annotate)
Wed Nov 16 02:19:51 2011 UTC (9 years, 2 months ago) by jhr
File size: 1887 byte(s)
Wed Nov 16 02:19:51 2011 UTC (9 years, 2 months ago) by jhr
File size: 1887 byte(s)
Merging in changes from pure-cfg branch.
(* high-opt.sml * * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu) * All rights reserved. * * Optimization of the HighIL representation of Diderot terms. The main * task of this phase is to statically resolve field definitions. *) structure HighOptimizer : sig val controls : (string * bool ref * string) list val optimize : HighIL.program -> HighIL.program end = struct (* Value numbering for HighIL *) structure VN = ValueNumberingFn (DomTreeFn (HighIL)) val vnFlag = ref true (* controls value numbering *) val debugFlag = ref true (* controls printing *) val checkFlag = ref true (* controls IL checking *) val controls = [ ("high-vn", vnFlag, "enable value-numbering for HighIL"), ("high-debug", debugFlag, "enable printing HighIL to log file [debug]"), ("high-check", checkFlag, "enable consistency checking for HighIL [debug]") ] fun checkIL (phase, prog) = ( if !debugFlag then HighPP.output (Log.logFile(), "HighIL after " ^ phase, prog) else (); if !checkFlag andalso CheckHighIL.check ("after " ^ phase, prog) then ( if not(!debugFlag) then HighPP.output (Log.logFile(), "HighIL after " ^ phase, prog) else (); TextIO.output(TextIO.stdErr, concat[ "***** Internal error after ", phase, ": see log file for details\n" ]); OS.Process.exit OS.Process.failure) else prog) fun transform (ctl, phase, transform, prog) = if !ctl then checkIL (phase, transform prog) else prog fun optimize prog = let val prog = checkIL ("translation to HighIL", prog) val prog = transform (vnFlag, "value numbering", VN.transform, prog) val prog = checkIL ("normalization", Normalize.transform prog) in prog end end
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |