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/sparc/instructions/sparcPeephole.peep
ViewVC logotype

View of /sml/trunk/src/MLRISC/sparc/instructions/sparcPeephole.peep

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1055 - (download) (annotate)
Thu Feb 7 20:38:59 2002 UTC (18 years, 8 months ago) by george
File size: 994 byte(s)
Compilers that generate assembly code may produce  global labels
whose value is resolved at link time. The various peephole optimization
modules did not take this in account.

TODO. The Labels.addrOf function should really return an option
type so that clients are forced to deal with this issue, rather
than an exception being raised.
local

   structure I =
   struct
     include "sparcInstr.sml"
   end

in

functor SparcPeephole
   (structure Instr : SPARCINSTR
    structure Eval  : MLTREE_EVAL
      sharing Eval.T = Instr.T
   ) : PEEPHOLE =
struct
   structure I = Instr
   structure CB = CellsBasis

   (* IMPORTANT: instructions are now given in forward order *)
   fun peephole instrs =
   let fun isZero(I.LAB le)  = ((Eval.valueOf le = 0) handle _ => false)
         | isZero(I.REG r)   = CB.registerNum r = 0
         | isZero(I.IMMED i) = i = 0
         | isZero _ = false

       fun removable(I.INSTR(I.ARITH{a=(I.ADD | I.SUB), r, i, d})) =
             CB.sameColor(r,d) andalso isZero i
         | removable(I.ANNOTATION{i,a}) = removable i
         | removable _ = false

       fun loop(current, instrs) = 
           case current of
             [] => instrs
           | i::rest where removable i => loop(rest, instrs)
           | i::rest => loop(rest, i::instrs)
   in  loop(instrs, [])
   end
end 

end

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