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 2355, Sun Apr 7 11:35:08 2013 UTC revision 2356, Sun Apr 7 14:45:25 2013 UTC
# Line 201  Line 201 
201                  val indices = List.mapPartial cvt indices                  val indices = List.mapPartial cvt indices
202                  in                  in
203                    if List.all (fn b => b) mask                    if List.all (fn b => b) mask
204                      then [IL.ASSGN(lhs, IL.OP(HighOps.TensorSub(IL.Var.ty x), x::indices))]                      then [IL.ASSGN(lhs, IL.OP(Op.TensorSub(IL.Var.ty x), x::indices))]
205                      else [IL.ASSGN(lhs, IL.OP(HighOps.Slice(IL.Var.ty lhs, mask), x::indices))]                      else [IL.ASSGN(lhs, IL.OP(Op.Slice(IL.Var.ty x, mask), x::indices))]
206                  end                  end
207                | S.E_Coerce{srcTy, dstTy, x} => (case (srcTy, dstTy)
208                     of (Ty.T_Int, Ty.T_Tensor _) =>
209                          [IL.ASSGN(lhs, IL.OP(Op.IntToReal, [lookup env x]))]
210                      | (Ty.T_Field _, Ty.T_Field _) =>
211                        (* change in continuity is a no-op *)
212                          [IL.ASSGN(lhs, IL.VAR(lookup env x))]
213                      | _ => raise Fail(concat[
214                            "unsupported type coercion: ", TypeUtil.toString srcTy,
215                            " ==> ", TypeUtil.toString dstTy
216                          ])
217                    (* end case *))
218              | S.E_Input(_, name, desc, NONE) =>              | S.E_Input(_, name, desc, NONE) =>
219                  [IL.ASSGN(lhs, IL.OP(HighOps.Input(IL.Var.ty lhs, name, desc), []))]                  [IL.ASSGN(lhs, IL.OP(HighOps.Input(IL.Var.ty lhs, name, desc), []))]
220              | S.E_Input(_, name, desc, SOME dflt) =>              | S.E_Input(_, name, desc, SOME dflt) =>
# Line 220  Line 231 
231                ListPair.foldlEq save IL.CFG.empty (dstState, stateOut),                ListPair.foldlEq save IL.CFG.empty (dstState, stateOut),
232                exit)                exit)
233            end            end
234  handle ex => raise ex  (*DEBUG*)handle ex => raise ex
235    
236      fun cvtBlock (state, env : env, joinStk, S.Block stms) = let      fun cvtBlock (state, env : env, joinStk, S.Block stms) = let
237            fun cvt (env : env, cfg, []) = (cfg, env)            fun cvt (env : env, cfg, []) = (cfg, env)
# Line 299  Line 310 
310                    | S.S_Stabilize => (                    | S.S_Stabilize => (
311                        killPath joinStk;                        killPath joinStk;
312                        (IL.CFG.concat (cfg, saveStrandState (env, state, IL.Node.mkSTABILIZE())), env))                        (IL.CFG.concat (cfg, saveStrandState (env, state, IL.Node.mkSTABILIZE())), env))
313                      | S.S_Return _ => raise Fail "unexpected return"
314                    | S.S_Print args => let                    | S.S_Print args => let
315                        val args = List.map (lookup env) args                        val args = List.map (lookup env) args
316                        val nd = IL.Node.mkMASSIGN([], Op.Print(List.map IL.Var.ty args), args)                        val nd = IL.Node.mkMASSIGN([], Op.Print(List.map IL.Var.ty args), args)
# Line 417  Line 429 
429              condCons (hasNew, StrandUtil.NewStrands, []))              condCons (hasNew, StrandUtil.NewStrands, []))
430            end            end
431    
432      fun translate (S.Program{globals, globalInit, init, strands}) = let      fun translate (S.Program{globals, globalInit, funcs, init, strands}) = let
433            val (globalInit, env) = let            val (globalInit, env) = let
434                  fun mkExit env = let                  fun mkExit env = let
435                        val nd = IL.Node.mkRETURN(VMap.listItems env)                        val nd = IL.Node.mkRETURN(VMap.listItems env)

Legend:
Removed from v.2355  
changed lines
  Added in v.2356

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