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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/simplify/lift.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/simplify/lift.sml

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

revision 2489, Mon Oct 21 19:43:32 2013 UTC revision 2490, Mon Oct 21 21:17:25 2013 UTC
# Line 22  Line 22 
22    
23      structure BV = BasisVars      structure BV = BasisVars
24      structure S = Simple      structure S = Simple
25      structure VSet = Var.Set      structure VSet = SimpleVar.Set
26      structure VMap = Var.Map      structure VMap = SimpleVar.Map
27    
28    (* identify the image load operations and their antecedents; in terms of BTA,    (* identify the image load operations and their antecedents; in terms of BTA,
29     * this phase is essentially determining what must be static in order to get the image     * this phase is essentially determining what must be static in order to get the image
# Line 39  Line 39 
39                      case VMap.find(env, x)                      case VMap.find(env, x)
40                       of SOME(S.E_Var y) => mkStatic (env, statics, y)                       of SOME(S.E_Var y) => mkStatic (env, statics, y)
41                        | SOME(S.E_Tuple ys) => mkStatics (env, statics, ys)                        | SOME(S.E_Tuple ys) => mkStatics (env, statics, ys)
42                        | SOME(S.E_Apply(_, _, ys, _)) => mkStatics (env, statics, ys)                        | SOME(S.E_Apply(_, ys, _)) => mkStatics (env, statics, ys)
43                          | SOME(S.E_Prim(_, _, ys, _)) => mkStatics (env, statics, ys)
44                        | SOME(S.E_Cons ys) => mkStatics (env, statics, ys)                        | SOME(S.E_Cons ys) => mkStatics (env, statics, ys)
45                        | SOME(S.E_Input(_, _, _, SOME y)) => mkStatic (env, statics, y)                        | SOME(S.E_Input(_, _, _, SOME y)) => mkStatic (env, statics, y)
46                        | SOME _ => statics                        | SOME _ => statics
47                        | NONE => raise Fail(concat[                        | NONE => raise Fail(concat[
48                              "variable ", Var.uniqueNameOf x, " has no binding"                              "variable ", SimpleVar.uniqueNameOf x, " has no binding"
49                            ])                            ])
50                      (* end case *)                      (* end case *)
51                    end                    end
# Line 65  Line 66 
66                        val env = VMap.insert(env, x, e)                        val env = VMap.insert(env, x, e)
67                        in                        in
68                          case e                          case e
69                           of S.E_Apply(f, _, xs, _) =>                           of S.E_Prim(f, _, xs, _) =>
70                                if Var.same(f, BV.fn_load)                                if Var.same(f, BV.fn_load)
71                                  then (env, mkStatic(env, statics, x))                                  then (env, mkStatic(env, statics, x))
72                                  else (env, statics)                                  else (env, statics)
# Line 87  Line 88 
88            val statics = doBlock (VMap.empty, VSet.empty, block)            val statics = doBlock (VMap.empty, VSet.empty, block)
89            in            in
90  Log.msg "**** static variables: ";  Log.msg "**** static variables: ";
91  VSet.app (fn x => Log.msg(" "^Var.uniqueNameOf x)) statics;  VSet.app (fn x => Log.msg(" "^SimpleVar.uniqueNameOf x)) statics;
92  Log.msg "\n";  Log.msg "\n";
93              statics              statics
94            end            end
# Line 97  Line 98 
98            fun doBlock (S.Block stms) =            fun doBlock (S.Block stms) =
99                  List.foldr (fn (stm, stms) => doStmt stm @ stms) [] stms                  List.foldr (fn (stm, stms) => doStmt stm @ stms) [] stms
100            and doStmt stm = (case stm            and doStmt stm = (case stm
101                   of S.S_Assign(x, e) => (case Var.Map.find(env, x)                   of S.S_Assign(x, e) => (case VMap.find(env, x)
102                         of SOME v => let                         of SOME v => let
103                              val rhs = (case v                              val rhs = (case v
104                                     of (Eval.BV b) => S.E_Lit(Literal.Bool b)                                     of (Eval.BV b) => S.E_Lit(Literal.Bool b)
# Line 112  Line 113 
113                              end                              end
114                          | NONE => [stm]                          | NONE => [stm]
115                        (* end case *))                        (* end case *))
116                    | S.S_IfThenElse(x, b1, b2) => (case Var.Map.find(env, x)                    | S.S_IfThenElse(x, b1, b2) => (case VMap.find(env, x)
117                         of SOME(Eval.BV b) => if b then doBlock b1 else doBlock b2                         of SOME(Eval.BV b) => if b then doBlock b1 else doBlock b2
118                          | NONE => [stm]                          | NONE => [stm]
119                        (* end case *))                        (* end case *))

Legend:
Removed from v.2489  
changed lines
  Added in v.2490

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