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/MLRISC/flowgraph/cfgCountCopies.sml
ViewVC logotype

View of /sml/trunk/src/MLRISC/flowgraph/cfgCountCopies.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1126 - (download) (annotate)
Thu Mar 7 21:16:28 2002 UTC (17 years, 5 months ago) by blume
File size: 919 byte(s)
implemented generic Controls module and used it for
all compiler flags/tuneable knobs/...;
more command-line options accepted (for setting the above controls);
some minor bug fixes
(*
 * This module counts the number of copies (in bytes)  
 * generated after register allocation.  Mainly useful for fine-tuning.
 *)
functor CFGCountCopies
   ( structure CFG : CONTROL_FLOW_GRAPH
     structure InsnProps : INSN_PROPERTIES
     		where I = CFG.I
     structure SdiJumps : SDI_JUMPS
     		where I = CFG.I
    ) : CFG_OPTIMIZATION =
struct
   structure CFG = CFG
   structure G   = Graph

   val name = "count copies"

   val copies = MLRiscControl.mkCounter ("copies", "copy count")

   fun run (cfg as G.GRAPH graph) = let
     val blocks = map #2 (#nodes graph ())
     fun loc _ = 0
     fun count(CFG.BLOCK{insns, ...}, n) = let
       fun scan([], n) = n
	 | scan(i::is, n) = 
	    if InsnProps.moveInstr i then
	      scan(is, n + SdiJumps.sdiSize(i, loc, 0)) 
	    else scan(is, n)
     in  scan(!insns, n) 
     end
   in
       copies := !copies + foldr count 0 blocks;
       cfg
   end
end

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