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

SCM Repository

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

Diff of /trunk/src/compiler/simplify/lift.sml

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

revision 2488, Mon Oct 21 19:20:12 2013 UTC revision 2489, Mon Oct 21 19:43:32 2013 UTC
# Line 22  Line 22 
22    
23      structure BV = BasisVars      structure BV = BasisVars
24      structure S = Simple      structure S = Simple
25      structure VSet = SimpleVar.Set      structure VSet = Var.Set
26      structure VMap = SimpleVar.Map      structure VMap = Var.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)
                       | SOME(S.E_Prim(_, _, ys, _)) => mkStatics (env, statics, ys)  
43                        | SOME(S.E_Cons ys) => mkStatics (env, statics, ys)                        | SOME(S.E_Cons ys) => mkStatics (env, statics, ys)
44                        | SOME(S.E_Input(_, _, _, SOME y)) => mkStatic (env, statics, y)                        | SOME(S.E_Input(_, _, _, SOME y)) => mkStatic (env, statics, y)
45                        | SOME _ => statics                        | SOME _ => statics
46                        | NONE => raise Fail(concat[                        | NONE => raise Fail(concat[
47                              "variable ", SimpleVar.uniqueNameOf x, " has no binding"                              "variable ", Var.uniqueNameOf x, " has no binding"
48                            ])                            ])
49                      (* end case *)                      (* end case *)
50                    end                    end
# Line 66  Line 65 
65                        val env = VMap.insert(env, x, e)                        val env = VMap.insert(env, x, e)
66                        in                        in
67                          case e                          case e
68                           of S.E_Prim(f, _, xs, _) =>                           of S.E_Apply(f, _, xs, _) =>
69                                if Var.same(f, BV.fn_load)                                if Var.same(f, BV.fn_load)
70                                  then (env, mkStatic(env, statics, x))                                  then (env, mkStatic(env, statics, x))
71                                  else (env, statics)                                  else (env, statics)
# Line 88  Line 87 
87            val statics = doBlock (VMap.empty, VSet.empty, block)            val statics = doBlock (VMap.empty, VSet.empty, block)
88            in            in
89  Log.msg "**** static variables: ";  Log.msg "**** static variables: ";
90  VSet.app (fn x => Log.msg(" "^SimpleVar.uniqueNameOf x)) statics;  VSet.app (fn x => Log.msg(" "^Var.uniqueNameOf x)) statics;
91  Log.msg "\n";  Log.msg "\n";
92              statics              statics
93            end            end
# Line 98  Line 97 
97            fun doBlock (S.Block stms) =            fun doBlock (S.Block stms) =
98                  List.foldr (fn (stm, stms) => doStmt stm @ stms) [] stms                  List.foldr (fn (stm, stms) => doStmt stm @ stms) [] stms
99            and doStmt stm = (case stm            and doStmt stm = (case stm
100                   of S.S_Assign(x, e) => (case VMap.find(env, x)                   of S.S_Assign(x, e) => (case Var.Map.find(env, x)
101                         of SOME v => let                         of SOME v => let
102                              val rhs = (case v                              val rhs = (case v
103                                     of (Eval.BV b) => S.E_Lit(Literal.Bool b)                                     of (Eval.BV b) => S.E_Lit(Literal.Bool b)
# Line 113  Line 112 
112                              end                              end
113                          | NONE => [stm]                          | NONE => [stm]
114                        (* end case *))                        (* end case *))
115                    | S.S_IfThenElse(x, b1, b2) => (case VMap.find(env, x)                    | S.S_IfThenElse(x, b1, b2) => (case Var.Map.find(env, x)
116                         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
117                          | NONE => [stm]                          | NONE => [stm]
118                        (* end case *))                        (* end case *))

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

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