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

Diff of /sml/trunk/src/MLRISC/ra/cluster-ra.sml

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

revision 1265, Tue Sep 24 14:51:51 2002 UTC revision 1266, Thu Sep 26 19:06:50 2002 UTC
# Line 287  Line 287 
287             (*             (*
288              * Create parallel move              * Create parallel move
289              *)              *)
290             fun mkMoves(insn, pt, dst, src, cost, mv, tmps) =             fun mkMoves(insn, pt, cost, mv, tmps) =
291                 if Props.moveInstr insn then               (case insn of
292                 let val (dst, tmps) =                 I.ANNOTATION{i, ...} =>
293                         case (Props.moveTmpR insn, dst) of                    (* strip away the annotation.
294                           (SOME r, _::dst) =>                     * Note: we are assuming annotations cannot change
295                       * the semantics of the copies.
296                       *)
297                      mkMoves(i, pt, cost, mv, tmps)
298                 | I.COPY{dst, src, k, ...} =>
299                      (* If it is a parallel copy, deal with the copy temporary
300                       * properly.  If it is a register,
301                       * create a pseudo use site just below the end of
302                       * the copy instruction.  This is to make sure that
303                       * the temporary is colored properly.  If the copy temporary
304                       * doesn't exist or if it has been spilled, do nothing.
305                       *)
306                   if k = cellkind then
307                   let val tmps =
308                           case Props.moveTmpR insn of
309                             SOME r =>
310                             (* Add a pseudo use for tmpR *)                             (* Add a pseudo use for tmpR *)
311                            (case chase(getnode(colorOf r)) of                            (case chase(getnode(colorOf r)) of
312                               tmp as NODE{uses,defs=ref [d],...} =>                               tmp as NODE{uses,defs=ref [d],...} =>
313                               let fun prev{block,insn}={block=block,insn=insn-1}                               let fun prev{block,insn}={block=block,insn=insn-1}
314                               in  (uses := [prev d]; (dst, tmp::tmps))                               in  uses := [prev d];
315                                     tmp::tmps
316                               end                               end
317                            | _ => error "mkMoves"                            | _ => error "mkMoves"
318                            )                            )
319                         | (_, dst) => (dst, tmps)                         | NONE => tmps
320                     fun moves([], [], mv) = mv                     fun moves([], [], mv) = mv
321                       | moves(d::ds, s::ss, mv) =                       | moves(d::ds, s::ss, mv) =
322                         let val (d, cd) = chaseCell d                         let val (d, cd) = chaseCell d
# Line 324  Line 340 
340                       | moves _ = error "moves"                       | moves _ = error "moves"
341                 in  (moves(dst, src, mv), tmps) end                 in  (moves(dst, src, mv), tmps) end
342                 else (mv, tmps)                 else (mv, tmps)
343                 |  _ => (mv, tmps)
344                 )
345    
346             (* Add the nodes first *)             (* Add the nodes first *)
347             fun mkNodes([], mv, tmps) = (mv, tmps)             fun mkNodes([], mv, tmps) = (mv, tmps)
# Line 340  Line 358 
358                           val defs = newNodes{cost=w, pt=pt,                           val defs = newNodes{cost=w, pt=pt,
359                                               defs=defs, uses=uses}                                               defs=defs, uses=uses}
360                           val _    = UA.update(dtab, i, defs)                           val _    = UA.update(dtab, i, defs)
361                           val (mv, tmps) =                           val (mv, tmps) = mkMoves(insn, pt, w, mv, tmps)
                                mkMoves(insn, pt, d, u, w, mv, tmps)  
362                           fun next{block,insn} = {block=block,insn=insn+1}                           fun next{block,insn} = {block=block,insn=insn+1}
363                       in  scan(rest,next pt, i+1, mv, tmps)                       in  scan(rest,next pt, i+1, mv, tmps)
364                       end                       end

Legend:
Removed from v.1265  
changed lines
  Added in v.1266

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