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/limit.sml
ViewVC logotype

Diff of /sml/trunk/compiler/CodeGen/cpscompile/limit.sml

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

revision 651, Thu Jun 1 18:34:03 2000 UTC revision 733, Fri Nov 17 05:13:45 2000 UTC
# Line 20  Line 20 
20    
21  fun findescapes fl =  fun findescapes fl =
22    let exception Limit    let exception Limit
23        val m : fun_kind Intmap.intmap = Intmap.new(32,Limit)        val m : fun_kind IntHashTable.hash_table = IntHashTable.mkTable(32,Limit)
24        val _ = app (fn (k,f,_,_,_) => Intmap.add m (f,k)) fl        val _ = app (fn (k,f,_,_,_) => IntHashTable.insert m (f,k)) fl
25        val escapes = Intmap.map m        val escapes = IntHashTable.lookup m
26     in {escapes = escapes,     in {escapes = escapes,
27         check = fn f => case escapes f of KNOWN => Intmap.add m (f,KNOWN_CHECK)         check = fn f => case escapes f of
28                               KNOWN => IntHashTable.insert m (f,KNOWN_CHECK)
29                                         | _ => ()}                                         | _ => ()}
30    end    end
31    
32  (* path now counts instructions as well as allocations, for polling *)  (* path now counts instructions as well as allocations, for polling *)
33  fun path escapes fl =  fun path escapes fl =
34    let exception Limit'    let exception Limit'
35        val b : cexp Intmap.intmap = Intmap.new(32,Limit')        val b : cexp IntHashTable.hash_table = IntHashTable.mkTable(32,Limit')
36        val _ = app (Intmap.add b o (fn (_,f,_,_,body) => (f,body))) fl        val _ = app (IntHashTable.insert b o (fn (_,f,_,_,body) => (f,body))) fl
37        val body = Intmap.map b        val body = IntHashTable.lookup b
38    
39        val m : {known: fun_kind, alloc: int, instrs: int} Intmap.intmap =        val m : {known: fun_kind, alloc: int, instrs: int}
40                                                            Intmap.new(32,Limit')                    IntHashTable.hash_table =
41        val look = Intmap.map m                    IntHashTable.mkTable(32,Limit')
42          val look = IntHashTable.lookup m
43        val storeListSz = 2  (* size of store list entry *)        val storeListSz = 2  (* size of store list entry *)
44        fun g(d, RECORD(RK_FBLOCK,vl,_,e)) = g(d + (length(vl) * 2) + 2,e)        fun g(d, RECORD(RK_FBLOCK,vl,_,e)) = g(d + (length(vl) * 2) + 2,e)
45          | g(d, RECORD(RK_FCONT,vl,_,e)) = g(d + (length(vl) * 2) + 2,e)          | g(d, RECORD(RK_FCONT,vl,_,e)) = g(d + (length(vl) * 2) + 2,e)
# Line 72  Line 74 
74               (case maxpath w               (case maxpath w
75                 of {known=KNOWN, alloc=n, instrs=i} =>                 of {known=KNOWN, alloc=n, instrs=i} =>
76                       if d+n > MAX_ALLOC                       if d+n > MAX_ALLOC
77                       then (Intmap.add m (w,{known=KNOWN_CHECK,                       then (IntHashTable.insert m (w,{known=KNOWN_CHECK,
78                                              alloc=n,                                              alloc=n,
79                                              instrs=i});                                              instrs=i});
80                             d)                             d)
# Line 109  Line 111 
111                                val z = if n>MAX_ALLOC                                val z = if n>MAX_ALLOC
112                                        then {known=KNOWN_CHECK,alloc=n,instrs=i}                                        then {known=KNOWN_CHECK,alloc=n,instrs=i}
113                                        else {known=KNOWN,alloc=n,instrs=i}                                        else {known=KNOWN,alloc=n,instrs=i}
114                             in Intmap.add m (w,z);                             in IntHashTable.insert m (w,z);
115                                z                                z
116                            end                            end
117                 | kind =>  let val bod = body w                 | kind =>  let val bod = body w
118                                val z = (Intmap.add m (w,{known=kind,                                val z = (IntHashTable.insert m (w,{known=kind,
119                                                          alloc=0,                                                          alloc=0,
120                                                          instrs=0});                                                          instrs=0});
121                                         {known=kind,                                         {known=kind,
122                                          alloc=g(1,bod),                                          alloc=g(1,bod),
123                                          instrs=h(0,bod)})                                          instrs=h(0,bod)})
124                            in Intmap.add m (w,z); z                            in IntHashTable.insert m (w,z); z
125                           end)                           end)
126    
127        val _ = app (fn (_, x, _, _, _) => (maxpath x; ())) fl;        val _ = app (fn (_, x, _, _, _) => (maxpath x; ())) fl;

Legend:
Removed from v.651  
changed lines
  Added in v.733

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