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/src/MLRISC/ra/ra-spill-with-renaming.sml
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/ra/ra-spill-with-renaming.sml

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

revision 898, Mon Aug 13 17:44:08 2001 UTC revision 899, Mon Aug 13 21:14:31 2001 UTC
# Line 1  Line 1 
1  (*  (* ra-spill-with-renaming.sml
2     *
3     * COPYRIGHT (c) 2001 Bell Labs, Lucent Technologies
4     *
5   * This version also performs local renaming on the spill code.   * This version also performs local renaming on the spill code.
6   * For example, spilling t below   * For example, spilling t below
7   *   *
# Line 108  Line 111 
111     structure I      = InsnProps.I     structure I      = InsnProps.I
112     structure P      = InsnProps     structure P      = InsnProps
113     structure C      = I.C     structure C      = I.C
114       structure CBase  = CellsBasis
115     structure Core   = RACore     structure Core   = RACore
116     structure G      = Core.G     structure G      = Core.G
117    
# Line 118  Line 122 
122     structure T = RASpillTypes(I)     structure T = RASpillTypes(I)
123     open T     open T
124    
125     fun uniq s = C.SortedCells.return(C.SortedCells.uniq s)     fun uniq s = CBase.SortedCells.return(CBase.SortedCells.uniq s)
126     val i2s    = Int.toString     val i2s    = Int.toString
127    
128     val Asm.S.STREAM{emit, ...} = Asm.makeStream[]     val Asm.S.STREAM{emit, ...} = Asm.makeStream[]
# Line 147  Line 151 
151         val _ = Core.updateCellAliases G         val _ = Core.updateCellAliases G
152    
153         val getSpillLoc = Core.spillLoc G         val getSpillLoc = Core.spillLoc G
154         fun spillLocOf(C.CELL{id, ...}) = getSpillLoc id         fun spillLocOf(CBase.CELL{id, ...}) = getSpillLoc id
155         val spillLocsOf = map spillLocOf         val spillLocsOf = map spillLocOf
156         val getnode = IntHashTable.lookup nodes         val getnode = IntHashTable.lookup nodes
157         val getnode = fn C.CELL{id, ...} => getnode id         val getnode = fn CBase.CELL{id, ...} => getnode id
158    
159         val MAX_DIST = !max_dist         val MAX_DIST = !max_dist
160    
161         val insnDefUse = P.defUse cellkind         val insnDefUse = P.defUse cellkind
162    
163         fun hasNonDedicated rs =         fun hasNonDedicated rs =
164         let fun isDedicated r = Array.sub(dedicated,r) handle _ => false         let fun loop [] = false
            fun loop [] = false  
165               | loop(r::rs) =               | loop(r::rs) =
166                 if isDedicated(C.registerId r) then loop rs else true                  if dedicated(CBase.registerId r) then loop rs else true
167         in  loop rs end         in  loop rs end
168    
169         (* Merge prohibited registers *)         (* Merge prohibited registers *)
170         val enterSpill = IntHashTable.insert spilledRegs         val enterSpill = IntHashTable.insert spilledRegs
171         val addProh = app (fn c => enterSpill(C.registerId c,true))         val addProh = app (fn c => enterSpill(CBase.registerId c,true))
172    
173         val getSpills  = G.PPtHashTable.find spillSet         val getSpills  = G.PPtHashTable.find spillSet
174         val getSpills  = fn p => case getSpills p of SOME s => s | NONE => []         val getSpills  = fn p => case getSpills p of SOME s => s | NONE => []
# Line 182  Line 185 
185           | getLoc _ = error "getLoc"           | getLoc _ = error "getLoc"
186    
187         fun printRegs regs =         fun printRegs regs =
188             app (fn r => print(C.toString r^" ["^             app (fn r => print(concat[
189                                Core.spillLocToString G (C.cellId r)^"] ")) regs                  CBase.toString r, " [", Core.spillLocToString G (CBase.cellId r),
190                    "] "
191                  ])) regs
192    
193         val parallelCopies = Word.andb(Core.HAS_PARALLEL_COPIES, mode) <> 0w0         val parallelCopies = Word.andb(Core.HAS_PARALLEL_COPIES, mode) <> 0w0
194    
195         fun chase(C.CELL{col=ref(C.ALIASED c), ...}) = chase c         fun chase(CBase.CELL{col=ref(CBase.ALIASED c), ...}) = chase c
196           | chase c = c           | chase c = c
197    
198         fun cellId(C.CELL{id, ...}) = id         fun cellId(CBase.CELL{id, ...}) = id
199    
200         fun sameCell(C.CELL{id=x,...}, C.CELL{id=y, ...}) = x=y         fun sameCell(CBase.CELL{id=x,...}, CBase.CELL{id=y, ...}) = x=y
201    
202         fun same(x,regToSpill) = sameCell(chase x,regToSpill)         fun same(x,regToSpill) = sameCell(chase x,regToSpill)
203    
# Line 213  Line 218 
218             let fun loop([], env') = env'             let fun loop([], env') = env'
219                   | loop((binding as (r',_,_))::env,env') =                   | loop((binding as (r',_,_))::env,env') =
220                     loop(env,                     loop(env,
221                          if C.sameColor(r, r') then env' else binding::env')                          if CBase.sameColor(r, r') then env' else binding::env')
222             in  loop(env, []) end             in  loop(env, []) end
223    
224             (*             (*
# Line 287  Line 292 
292                    let fun lookup [] =                    let fun lookup [] =
293                               reloadInstr(pt,instr,regToSpill,env,spillLoc)                               reloadInstr(pt,instr,regToSpill,env,spillLoc)
294                          | lookup((r,currentReg,defPt)::env) =                          | lookup((r,currentReg,defPt)::env) =
295                            if C.sameColor(r,regToSpill) then                            if CBase.sameColor(r,regToSpill) then
296                              if defPt = pt                              if defPt = pt
297                              then lookup env(* this is NOT the right renaming!*)                              then lookup env(* this is NOT the right renaming!*)
298                              else if defPt - pt <= MAX_DIST then                              else if defPt - pt <= MAX_DIST then
# Line 303  Line 308 
308              * Check whether the id is in a list              * Check whether the id is in a list
309              *)              *)
310             fun containsId(id,[]) = false             fun containsId(id,[]) = false
311               | containsId(id:C.cell_id,r::rs) = r = id orelse containsId(id,rs)               | containsId(id:CBase.cell_id,r::rs) = r = id orelse containsId(id,rs)
312             fun spillConflict(G.FRAME loc, rs) = containsId(~loc, rs)             fun spillConflict(G.FRAME loc, rs) = containsId(~loc, rs)
313               | spillConflict(G.MEM_REG(C.CELL{id, ...}), rs) =               | spillConflict(G.MEM_REG(CBase.CELL{id, ...}), rs) =
314                   containsId(id, rs)                   containsId(id, rs)
315    
316             fun contains(r',[]) = false             fun contains(r',[]) = false
# Line 338  Line 343 
343                     else if same(rd, regToSpill) then                     else if same(rd, regToSpill) then
344                        (rs, rds@rds', rss@rss', kill)                        (rs, rds@rds', rss@rss', kill)
345                     else loop(rds, rss, rd::rds', rs::rss')                     else loop(rds, rss, rd::rds', rs::rss')
346                   | loop _ =                   | loop _ = let
347                       (print("rds=");                        fun pr r = print(concat[
348                        app (fn r => print(C.toString r^":"^                                CBase.toString r, ":", i2s(spillLocOf r), " "
349                                           i2s(spillLocOf r)^" ")) rds;                              ])
350                          in
351                            print("rds=");
352                            app pr rds;
353                        print("\nrss=");                        print("\nrss=");
354                        app (fn r => print(C.toString r^":"^                          app pr rss;
                                          i2s(spillLocOf r)^" ")) rss;  
355                        print "\n";                        print "\n";
356                        error("extractDef: "^C.toString regToSpill))                          error("extractDef: "^CBase.toString regToSpill)
357                          end
358             in loop(rds, rss, [], []) end             in loop(rds, rss, [], []) end
359    
360             (*             (*
# Line 512  Line 520 
520                               if parallelCopies then spillLocsOf reloadRegs                               if parallelCopies then spillLocsOf reloadRegs
521                               else []                               else []
522    
523                           fun prEnv env =                           fun prEnv env = (
524                               (print("Env=");                                print("Env=");
525                                app (fn (r,v,_) => print(C.toString r^"=>"^                                app (fn (r,v,_) =>
526                                                         C.toString v^" ")) env;                                  print(concat[
527                                        CBase.toString r, "=>",
528                                        CBase.toString v, " "
529                                      ])) env;
530                                print "\n")                                print "\n")
531    
532                           val (instrs,env) =                           val (instrs,env) =

Legend:
Removed from v.898  
changed lines
  Added in v.899

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