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/branches/SMLNJ/src/compiler/CodeGen/cpscompile/limit.sml
ViewVC logotype

Diff of /sml/branches/SMLNJ/src/compiler/CodeGen/cpscompile/limit.sml

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

revision 283, Wed May 19 08:20:58 1999 UTC revision 284, Wed May 19 23:31:25 1999 UTC
# Line 46  Line 46 
46          | g(d, SELECT(_,_,_,_,e)) = g(d, e)          | g(d, SELECT(_,_,_,_,e)) = g(d, e)
47          | g(d, OFFSET(_,_,_,e)) = g(d, e)          | g(d, OFFSET(_,_,_,e)) = g(d, e)
48          | g(d, SWITCH(_,_,el)) = foldr Int.max 0 (map (fn e => g(d,e)) el)          | g(d, SWITCH(_,_,el)) = foldr Int.max 0 (map (fn e => g(d,e)) el)
49            | g(d, SETTER(P.assign, _, e)) = g(d+storeListSz, e)
50          | g(d, SETTER(P.update,_,e)) = g(d+storeListSz, e)          | g(d, SETTER(P.update,_,e)) = g(d+storeListSz, e)
51          | g(d, SETTER(P.boxedupdate,_,e)) = g(d+storeListSz, e)          | g(d, SETTER(P.boxedupdate,_,e)) = g(d+storeListSz, e)
52              (*** should be +0 when unboxedfloat is turned on ***)              (*** should be +0 when unboxedfloat is turned on ***)
# Line 53  Line 54 
54          | g(d, ARITH(P.arith{kind=P.INT _,...},_,_,_,e)) = g(d+1, e)          | g(d, ARITH(P.arith{kind=P.INT _,...},_,_,_,e)) = g(d+1, e)
55          | g(d, ARITH(P.testu _, _, _, _, e)) = g(d+1, e)          | g(d, ARITH(P.testu _, _, _, _, e)) = g(d+1, e)
56          | g(d, ARITH(P.test _, _, _, _, e)) = g(d+1, e)          | g(d, ARITH(P.test _, _, _, _, e)) = g(d+1, e)
57            | g(d, ARITH(_,_,_,_,e)) = g(d,e)
58          | g(d, PURE(P.pure_arith{kind=P.FLOAT 64,...},_,_,_,e)) = g(d+3, e)          | g(d, PURE(P.pure_arith{kind=P.FLOAT 64,...},_,_,_,e)) = g(d+3, e)
59          | g(d, PURE(P.real{tokind=P.FLOAT 64,...},_,_,_,e)) = g(d+3, e)          | g(d, PURE(P.real{tokind=P.FLOAT 64,...},_,_,_,e)) = g(d+3, e)
60          | g(d, PURE(P.fwrap,_,_,_,e)) = g(d+3, e)          | g(d, PURE(P.fwrap,_,_,_,e)) = g(d+4, e)
61          | g(d, PURE(P.iwrap,_,_,_,e)) = g(d+2, e)          | g(d, PURE(P.iwrap,_,_,_,e)) = g(d+2, e)
62          | g(d, PURE(P.i32wrap,_,_,_,e)) = g(d+2, e)          | g(d, PURE(P.i32wrap,_,_,_,e)) = g(d+2, e)
63          | g(d, PURE(P.newarray0,_,_,_,e)) = g(d+5, e)          | g(d, PURE(P.newarray0,_,_,_,e)) = g(d+5, e)
64            | g(d, PURE(P.makeref, _, _, _, e)) = g(d+2, e)
65            | g(d, PURE(P.mkspecial, _, _, _, e)) = g(d+2, e)
66          | g(d, LOOKER(P.numsubscript{kind=P.FLOAT 64},_,_,_,e)) = g(d+3, e)          | g(d, LOOKER(P.numsubscript{kind=P.FLOAT 64},_,_,_,e)) = g(d+3, e)
67          | g(d, SETTER(_,_,e)) = g(d,e)          | g(d, SETTER(_,_,e)) = g(d,e)
68          | g(d, LOOKER(_,_,_,_,e)) = g(d,e)          | g(d, LOOKER(_,_,_,_,e)) = g(d,e)
         | g(d, ARITH(_,_,_,_,e)) = g(d,e)  
69          | g(d, PURE(_,_,_,_,e)) = g(d,e)          | g(d, PURE(_,_,_,_,e)) = g(d,e)
70          | g(d, BRANCH(_,_,_,a,b)) = Int.max(g(d,a), g(d,b))          | g(d, BRANCH(_,_,_,a,b)) = Int.max(g(d,a), g(d,b))
71          | g(d, APP(LABEL w, _)) =          | g(d, APP(LABEL w, _)) =
# Line 96  Line 99 
99          | h(d, FIX _) = error "8932.1 in limit"          | h(d, FIX _) = error "8932.1 in limit"
100    
101        and maxpath w = look w handle Limit' =>        and maxpath w = look w handle Limit' =>
102               (* Note that the heap may need to be aligned so g is
103                * called with g(1, bod). Be conservative.
104                *)
105              (case escapes w              (case escapes w
106                of KNOWN => let val bod = body w                of KNOWN => let val bod = body w
107                                val n = g(0, bod)                                val n = g(1, bod)
108                                val i = h(0, bod)                                val i = h(0, bod)
109                                val z = if n>MAX_ALLOC                                val z = if n>MAX_ALLOC
110                                        then {known=KNOWN_CHECK,alloc=n,instrs=i}                                        then {known=KNOWN_CHECK,alloc=n,instrs=i}
# Line 111  Line 117 
117                                                          alloc=0,                                                          alloc=0,
118                                                          instrs=0});                                                          instrs=0});
119                                         {known=kind,                                         {known=kind,
120                                          alloc=g(0,bod),                                          alloc=g(1,bod),
121                                          instrs=h(0,bod)})                                          instrs=h(0,bod)})
122                            in Intmap.add m (w,z); z                            in Intmap.add m (w,z); z
123                           end)                           end)
# Line 174  Line 180 
180    
181  (*  (*
182   * $Log: limit.sml,v $   * $Log: limit.sml,v $
183     * Revision 1.1  1998/10/28 18:20:39  jhr
184     *   Removed code generator support for STRING/REAL constants.
185     *
186   * Revision 1.1.1.1  1998/04/08 18:39:53  george   * Revision 1.1.1.1  1998/04/08 18:39:53  george
187   * Version 110.5   * Version 110.5
188   *   *

Legend:
Removed from v.283  
changed lines
  Added in v.284

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