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

SCM Repository

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

Diff of /trunk/src/compiler/translate/translate.sml

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

revision 2462, Wed Oct 9 20:28:22 2013 UTC revision 2476, Mon Oct 14 09:36:13 2013 UTC
# Line 18  Line 18 
18    end = struct    end = struct
19    
20      structure S = Simple      structure S = Simple
21      structure Ty = Types      structure Ty = SimpleTypes
22      structure VMap = Var.Map      structure VMap = SimpleVar.Map
23      structure VSet = Var.Set      structure VSet = SimpleVar.Set
24      structure IL = HighIL      structure IL = HighIL
25      structure Op = HighOps      structure Op = HighOps
26      structure DstTy = HighILTypes      structure DstTy = HighILTypes
# Line 38  Line 38 
38            fun nl () = if (!wid > 0) then (print "\n"; wid := 0) else ()            fun nl () = if (!wid > 0) then (print "\n"; wid := 0) else ()
39            fun prElem (src, dst) = let            fun prElem (src, dst) = let
40                  val s = String.concat [                  val s = String.concat [
41                          " ", Var.uniqueNameOf src, "->", IL.Var.toString dst                          " ", SimpleVar.uniqueNameOf src, "->", IL.Var.toString dst
42                        ]                        ]
43                  in                  in
44                    pr s;                    pr s;
# Line 54  Line 54 
54      fun lookup env x = (case VMap.find (env, x)      fun lookup env x = (case VMap.find (env, x)
55             of SOME x' => x'             of SOME x' => x'
56              | NONE => raise Fail(concat[              | NONE => raise Fail(concat[
57                    "no binding for ", Var.uniqueNameOf x, " in environment"                    "no binding for ", SimpleVar.uniqueNameOf x, " in environment"
58                  ])                  ])
59            (* end case *))            (* end case *))
60    
61    (* create a new instance of a variable *)    (* create a new instance of a variable *)
62      fun newVar x = IL.Var.new (Var.nameOf x, cvtTy(Var.monoTypeOf x))      fun newVar x = IL.Var.new (SimpleVar.nameOf x, cvtTy(SimpleVar.typeOf x))
63    
64    (* generate fresh SSA variables and add them to the environment *)    (* generate fresh SSA variables and add them to the environment *)
65      fun freshVars (env, xs) = let      fun freshVars (env, xs) = let
# Line 120  Line 120 
120                          val rhs = List.tabulate (arity, fn i => if (i = predIndex) then dstVar else dstVar')                          val rhs = List.tabulate (arity, fn i => if (i = predIndex) then dstVar else dstVar')
121                          in                          in
122  (*  (*
123  print(concat["recordAssign: ", Var.uniqueNameOf srcVar, " --> ", IL.Var.toString lhs,  print(concat["recordAssign: ", SimpleVar.uniqueNameOf srcVar, " --> ", IL.Var.toString lhs,
124  " @ ", IL.Node.toString nd, "\n"]);  " @ ", IL.Node.toString nd, "\n"]);
125  *)  *)
126                            phiMap := VMap.insert (m, srcVar, (lhs, rhs))                            phiMap := VMap.insert (m, srcVar, (lhs, rhs))
# Line 156  Line 156 
156                        val dstVar = List.nth(xs, ix)                        val dstVar = List.nth(xs, ix)
157                        in                        in
158  (*  (*
159  print(concat["doVar (", Var.uniqueNameOf srcVar, ", ", IL.phiToString phi, ", _) @ ", IL.Node.toString nd, "\n"]);  print(concat["doVar (", SimpleVar.uniqueNameOf srcVar, ", ", IL.phiToString phi, ", _) @ ", IL.Node.toString nd, "\n"]);
160  *)  *)
161                          recordAssign (joinStk, srcVar, dstVar);                          recordAssign (joinStk, srcVar, dstVar);
162                          VMap.insert (env, srcVar, dstVar)                          VMap.insert (env, srcVar, dstVar)
# Line 170  Line 170 
170                    val IL.ND{kind=IL.JOIN{phis, ...}, ...} = nd                    val IL.ND{kind=IL.JOIN{phis, ...}, ...} = nd
171                    fun doVar (srcVar, phi as (dstVar, _), (env, phis)) = (                    fun doVar (srcVar, phi as (dstVar, _), (env, phis)) = (
172  (*  (*
173  print(concat["doVar (", Var.uniqueNameOf srcVar, ", ", IL.phiToString phi, ", _) @ ", IL.Node.toString nd, "\n"]);  print(concat["doVar (", SimpleVar.uniqueNameOf srcVar, ", ", IL.phiToString phi, ", _) @ ", IL.Node.toString nd, "\n"]);
174  *)  *)
175                          recordAssign (joinStk, srcVar, dstVar);                          recordAssign (joinStk, srcVar, dstVar);
176                          (VMap.insert (env, srcVar, dstVar), phi::phis))                          (VMap.insert (env, srcVar, dstVar), phi::phis))
# Line 187  Line 187 
187             of S.E_Var x => [IL.ASSGN(lhs, IL.VAR(lookup env x))]             of S.E_Var x => [IL.ASSGN(lhs, IL.VAR(lookup env x))]
188              | S.E_Lit lit => [IL.ASSGN(lhs, IL.LIT lit)]              | S.E_Lit lit => [IL.ASSGN(lhs, IL.LIT lit)]
189              | S.E_Tuple xs => raise Fail "E_Tuple not implemeted"              | S.E_Tuple xs => raise Fail "E_Tuple not implemeted"
190              | S.E_Apply(f, tyArgs, args, ty) => let              | S.E_Apply _ => raise Fail "unexpected E_Apply"
191                | S.E_Prim(f, tyArgs, args, ty) => let
192                  val args' = List.map (lookup env) args                  val args' = List.map (lookup env) args
193                  in                  in
194                    TranslateBasis.translate (lhs, f, tyArgs, args')                    TranslateBasis.translate (lhs, f, tyArgs, args')
# Line 211  Line 212 
212                      (* change in continuity is a no-op *)                      (* change in continuity is a no-op *)
213                        [IL.ASSGN(lhs, IL.VAR(lookup env x))]                        [IL.ASSGN(lhs, IL.VAR(lookup env x))]
214                    | _ => raise Fail(concat[                    | _ => raise Fail(concat[
215                          "unsupported type coercion: ", TypeUtil.toString srcTy,                          "unsupported type coercion: ", Ty.toString srcTy,
216                          " ==> ", TypeUtil.toString dstTy                          " ==> ", Ty.toString dstTy
217                        ])                        ])
218                  (* end case *))                  (* end case *))
219              | S.E_Input(_, name, NONE, NONE) =>              | S.E_Input(_, name, NONE, NONE) =>
# Line 467  Line 468 
468                (* create the state variables *)                (* create the state variables *)
469                  val svars = let                  val svars = let
470                        fun newSVar x = IL.StateVar.new (                        fun newSVar x = IL.StateVar.new (
471                              Var.kindOf x = S.StrandOutputVar,                              SimpleVar.kindOf x = S.StrandOutputVar,
472                              Var.nameOf x, cvtTy(Var.monoTypeOf x))                              SimpleVar.nameOf x, cvtTy(SimpleVar.typeOf x))
473                        in                        in
474                          List.map newSVar state                          List.map newSVar state
475                        end                        end

Legend:
Removed from v.2462  
changed lines
  Added in v.2476

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