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 933 - (download) (annotate)
Wed Sep 19 19:31:19 2001 UTC (17 years, 11 months ago) by george
File size: 900 byte(s)
  cleanup
(*
 * 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.getCounter "copies"

   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