Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/compiler/CodeGen/cpscompile/spill-new.sml
ViewVC logotype

Diff of /sml/trunk/compiler/CodeGen/cpscompile/spill-new.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1334, Thu May 22 22:46:30 2003 UTC revision 1755, Thu Feb 10 23:54:06 2005 UTC
# Line 261  Line 261 
261           | CPS.LOOKER(_,_,w,t,e)   => (fp(w,t); markfp e)           | CPS.LOOKER(_,_,w,t,e)   => (fp(w,t); markfp e)
262           | CPS.ARITH(_,_,w,t,e)    => (fp(w,t); markfp e)           | CPS.ARITH(_,_,w,t,e)    => (fp(w,t); markfp e)
263           | CPS.PURE(p,_,w,t,e)     => (markPure(p,w); fp(w,t); markfp e)           | CPS.PURE(p,_,w,t,e)     => (markPure(p,w); fp(w,t); markfp e)
264           | CPS.RCC(_,_,_,_,w,t,e)  => (fp(w,t); markfp e)           | CPS.RCC(_,_,_,_,wtl,e)  => (app fp wtl; markfp e)
265           | CPS.BRANCH(_,_,_,e1,e2) => (markfp e1; markfp e2)           | CPS.BRANCH(_,_,_,e1,e2) => (markfp e1; markfp e2)
266           | CPS.FIX _ => error "FIX in Spill.markfp"           | CPS.FIX _ => error "FIX in Spill.markfp"
267    
# Line 341  Line 341 
341          | CPS.LOOKER(_,vl,w,t,e)   => uses(vl,def(w,freevars e))          | CPS.LOOKER(_,vl,w,t,e)   => uses(vl,def(w,freevars e))
342          | CPS.ARITH(_,vl,w,t,e)    => uses(vl,def(w,freevars e))          | CPS.ARITH(_,vl,w,t,e)    => uses(vl,def(w,freevars e))
343          | CPS.PURE(_,vl,w,t,e)     => uses(vl,def(w,freevars e))          | CPS.PURE(_,vl,w,t,e)     => uses(vl,def(w,freevars e))
344          | CPS.RCC(_,_,_,vl,w,t,e)  => uses(vl,def(w,freevars e))          | CPS.RCC(_,_,_,vl,wtl,e)  => uses(vl, foldl (fn((w,_),s) => def(w,s))
345                                                         (freevars e) wtl)
346          | CPS.BRANCH(_,vl,c,e1,e2) => uses(vl,freevars e1 \/ freevars e2)          | CPS.BRANCH(_,vl,c,e1,e2) => uses(vl,freevars e1 \/ freevars e2)
347          | CPS.FIX _ => error "FIX in Spill.freevars"          | CPS.FIX _ => error "FIX in Spill.freevars"
348    
# Line 467  Line 468 
468                | CPS.LOOKER(_,vl,w,t,e) => fx(vl, w, t, e, b)                | CPS.LOOKER(_,vl,w,t,e) => fx(vl, w, t, e, b)
469                | CPS.ARITH(_,vl,w,t,e)  => fx(vl, w, t, e, b)                | CPS.ARITH(_,vl,w,t,e)  => fx(vl, w, t, e, b)
470                | CPS.PURE(_,vl,w,t,e)   => fx(vl, w, t, e, b)                | CPS.PURE(_,vl,w,t,e)   => fx(vl, w, t, e, b)
471                | CPS.RCC(_,_,_,vl,w,t,e)=> fx(vl, w, t, e, b+1)                | CPS.RCC(_,_,_,vl,wtl,e)=>
472                      let val b = b+1
473                      in uses (vl, n);
474                         app (fn (w, t) => def (w, t, b, n)) wtl;
475                         gather (e, b, n+1)
476                      end
477                | CPS.BRANCH(_,vl,c,x,y) => (uses(vl, n); gathers([x,y],b+1,n+1))                | CPS.BRANCH(_,vl,c,x,y) => (uses(vl, n); gathers([x,y],b+1,n+1))
478                | CPS.FIX _ => error "FIX in Spill.gather"                | CPS.FIX _ => error "FIX in Spill.gather"
479            end            end
# Line 707  Line 713 
713            | CPS.LOOKER(p,vl,w,t,e) => scanOp(vl, w, e, b)            | CPS.LOOKER(p,vl,w,t,e) => scanOp(vl, w, e, b)
714            | CPS.ARITH(p,vl,w,t,e)  => scanOp(vl, w, e, b)            | CPS.ARITH(p,vl,w,t,e)  => scanOp(vl, w, e, b)
715            | CPS.PURE(p,vl,w,t,e)   => scanOp(vl, w, e, b)            | CPS.PURE(p,vl,w,t,e)   => scanOp(vl, w, e, b)
716            | CPS.RCC(k,l,p,vl,w,t,e)=> scanOp(vl, w, e, b+1)            | CPS.RCC(k,l,p,vl,wtl,e)=>
717                let val b = b+1
718                    val (L,spOff) = scan(e,b,spOff)
719                    val L = foldl (fn ((w, _), L) => kill (w, L)) L wtl
720                    val L = addUses (vl, L)
721                    val (L, spOff) = genSpills (L, spOff)
722                in (L, spOff)
723                end
724            | CPS.BRANCH(p,vl,c,x,y) => scanStmt(vl,[x,y])            | CPS.BRANCH(p,vl,c,x,y) => scanStmt(vl,[x,y])
725            | CPS.FIX _ => error "FIX in Spill.scan"            | CPS.FIX _ => error "FIX in Spill.scan"
726    
# Line 862  Line 875 
875            in  g(f(vs, w, e))            in  g(f(vs, w, e))
876            end            end
877    
878              fun rewrite'(vs,wl,e,f) =
879                  let val e = rebuild e
880                      val e = foldl emitSpill e wl
881                      val e = foldl assignToSplitRecord e wl
882                      val (vs, g) = emitReloads vs
883                  in g (f (vs, wl, e))
884                  end
885    
886            fun rewriteRec(vl, w, e, f) =            fun rewriteRec(vl, w, e, f) =
887            let val e = rebuild e            let val e = rebuild e
888                val e = emitSpill(w, e)                val e = emitSpill(w, e)
# Line 906  Line 927 
927                 rewrite(vl,w,e, fn (vl,w,e) => CPS.ARITH(p,vl,w,t,e))                 rewrite(vl,w,e, fn (vl,w,e) => CPS.ARITH(p,vl,w,t,e))
928            | CPS.PURE(p,vl,w,t,e) =>            | CPS.PURE(p,vl,w,t,e) =>
929                 rewrite(vl,w,e,fn (vl,w,e) => CPS.PURE(p,vl,w,t,e))                 rewrite(vl,w,e,fn (vl,w,e) => CPS.PURE(p,vl,w,t,e))
930            | CPS.RCC(k,l,p,vl,w,t,e) =>            | CPS.RCC(k,l,p,vl,wtl,e) =>
931                 rewrite(vl,w,e,fn (vl,w,e) => CPS.RCC(k,l,p,vl,w,t,e))                rewrite' (vl, map #1 wtl, e,
932                            fn (vl, wl, e) => CPS.RCC (k, l, p, vl,
933                                                       ListPair.map (fn (w, (_, t)) => (w, t)) (wl, wtl),
934                                                       e))
935            | CPS.BRANCH(p,vl,c,x,y) =>            | CPS.BRANCH(p,vl,c,x,y) =>
936                 rewriteStmt(vl,[x,y],                 rewriteStmt(vl,[x,y],
937                             s'2 (fn (vl,x,y) => CPS.BRANCH(p,vl,c,x,y)))                             s'2 (fn (vl,x,y) => CPS.BRANCH(p,vl,c,x,y)))

Legend:
Removed from v.1334  
changed lines
  Added in v.1755

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