Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/translate/analyze-simple.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/translate/analyze-simple.sml

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

revision 4332, Mon Aug 1 02:36:01 2016 UTC revision 4333, Mon Aug 1 12:55:39 2016 UTC
# Line 127  Line 127 
127              | _ => ()              | _ => ()
128            (* end case *))            (* end case *))
129    
   (* does a variable have local scope *)  
     fun isLocal x = (case SV.kindOf x  
            of SV.LocalVar => true  
             | SV.IterVar => true  
             | _ => false  
           (* end case *))  
   
130      fun analyzeBlock cxt blk = let      fun analyzeBlock cxt blk = let
131            val globals = ref VSet.empty            val globals = ref VSet.empty
132            fun addGlobal x = (globals := VSet.add(!globals, x))            fun addGlobal x = (globals := VSet.add(!globals, x))
133            fun addVar (x, vs) =            fun addVar (x, vs) = let
134                  if isLocal x then VSet.add(vs, x)                  fun addGlobal x = (globals := VSet.add(!globals, x); vs)
135                  else (case (SV.kindOf x, cxt)                  in
136                     of (SV.ConstVar, ConstInit) => ()                    case (SV.kindOf x, cxt)
137                       of (SV.ConstVar, ConstInit) => vs
138                      | (SV.ConstVar, _) => addGlobal x                      | (SV.ConstVar, _) => addGlobal x
139                      | (SV.InputVar, ConstInit) => ()                      | (SV.InputVar, ConstInit) => vs
140                      | (SV.InputVar, _) => addGlobal x                      | (SV.InputVar, _) => addGlobal x
141                      | (SV.GlobalVar, ConstInit) => ()                      | (SV.GlobalVar, ConstInit) => vs
142                      | (SV.GlobalVar, GlobalInit) => ()                      | (SV.GlobalVar, GlobalInit) => vs
143                      | (SV.GlobalVar, _) => addGlobal x                      | (SV.GlobalVar, _) => addGlobal x
144                      | _ => ()                      | (SV.StrandStateVar, _) => VSet.add(vs, x)
145                    (* end case *);                      | (SV.StrandOutputVar, _) => VSet.add(vs, x)
146                    vs)                      | (SV.LocalVar, _) => VSet.add(vs, x)
147                        | (SV.IterVar, _) => VSet.add(vs, x)
148                        | _ => vs
149                      (* end case *)
150                    end
151            fun addList (xs, vs) = List.foldl addVar vs xs            fun addList (xs, vs) = List.foldl addVar vs xs
152          (* compute the used local and global variables of a Simple AST expression *)          (* compute the used local and global variables of a Simple AST expression *)
153            fun addUses (e, vs) = let            fun addUses (e, vs) = let
# Line 194  Line 192 
192              | doStm (S.S_Assign(x, e), (live, assigns)) = (              | doStm (S.S_Assign(x, e), (live, assigns)) = (
193                  markUpdate (cxt, x);                  markUpdate (cxt, x);
194                  (addUses(e, VSet.subtract(live, x)), addVar(x, assigns)))                  (addUses(e, VSet.subtract(live, x)), addVar(x, assigns)))
195              | doStm (S.S_Foreach(x, _, b), (liveIn, assignsIn)) = let              | doStm (S.S_Foreach(x, xs, b), (liveIn, assignsIn)) = let
196                    val liveIn = addVar(xs, liveIn)
197                  val (liveOut, assigns) = doBlock (b, liveIn)                  val (liveOut, assigns) = doBlock (b, liveIn)
198                  val liveOut = VSet.union(VSet.subtract(liveOut, x), liveIn)                  val liveOut = VSet.union(VSet.subtract(liveOut, x), liveIn)
199                  val assigns = VSet.union(VSet.subtract(assigns, x), assignsIn)                  val assigns = VSet.union(VSet.subtract(assigns, x), assignsIn)

Legend:
Removed from v.4332  
changed lines
  Added in v.4333

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