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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/cxx-util/tree-to-cxx.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/cxx-util/tree-to-cxx.sml

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

revision 3893, Sat May 21 21:33:08 2016 UTC revision 3894, Sun May 22 14:51:27 2016 UTC
# Line 39  Line 39 
39              | Ty.IntTy => Env.intTy env              | Ty.IntTy => Env.intTy env
40              | (Ty.VecTy(1, 1)) => Env.realTy env              | (Ty.VecTy(1, 1)) => Env.realTy env
41              | (Ty.VecTy(d, _)) => CL.T_Named("vec" ^ Int.toString d)              | (Ty.VecTy(d, _)) => CL.T_Named("vec" ^ Int.toString d)
42                | (Ty.TupleTy tys) => raise Fail "FIXME: TupleTy"
43              | (Ty.TensorTy dd) => CL.T_Array(Env.realTy env, SOME(List.foldl Int.* 1 dd))              | (Ty.TensorTy dd) => CL.T_Array(Env.realTy env, SOME(List.foldl Int.* 1 dd))
44              | (Ty.SeqTy(t, NONE)) => CL.T_Template("diderot::dynseq", [trType(env, t)])              | (Ty.SeqTy(t, NONE)) => CL.T_Template("diderot::dynseq", [trType(env, t)])
45              | (Ty.SeqTy(t, SOME n)) => CL.T_Array(trType(env, t), SOME n)              | (Ty.SeqTy(t, SOME n)) => CL.T_Array(trType(env, t), SOME n)
# Line 212  Line 213 
213                  end                  end
214              | IR.E_Cons(args, Ty.TensorTy shape) => raise Fail "unexpected E_Cons"              | IR.E_Cons(args, Ty.TensorTy shape) => raise Fail "unexpected E_Cons"
215              | IR.E_Seq(args, ty) => raise Fail "unexpected E_Seq"              | IR.E_Seq(args, ty) => raise Fail "unexpected E_Seq"
216              | IR.E_Pack(layout, args) => ??              | IR.E_Pack(layout, args) => raise Fail "unexpected E_Pack"
217              | IR.E_VLoad(layout, e, i) => ??  (* FIXME: check if e is aligned and use "vload_aligned" in that case *)
218                | IR.E_VLoad(layout, e, i) =>
219                    CL.mkTemplateApply("vload",
220                      [trType(env, Ty.nthVec(layout, i))],
221                      [CL.mkBinOp(trExp(env, e), CL.#+, intExp(Ty.offsetOf(layout, i)))])
222                | _ => raise Fail "trExp"
223            (* end case *))            (* end case *))
224    
225      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps
# Line 232  Line 238 
238            fun trArg (i, arg) = CL.mkAssign(CL.mkSubscript(lhs, intExp i), trExp (env, arg))            fun trArg (i, arg) = CL.mkAssign(CL.mkSubscript(lhs, intExp i), trExp (env, arg))
239            in            in
240              case rhs              case rhs
241               of IR.E_Cons(args, _) => List.mapi trArg args               of IR.E_Pack(_, args) => [CL.mkCall ("vpack", List.map (fn e => trExp(env, e)) args)]
242                  | IR.E_Cons(args, _) => List.mapi trArg args
243                | IR.E_Seq(args, _) => List.mapi trArg args                | IR.E_Seq(args, _) => List.mapi trArg args
244                | _ => [CL.mkAssign(lhs, trExp (env, rhs))]                | _ => [CL.mkAssign(lhs, trExp (env, rhs))]
245              (* end case *)              (* end case *)
# Line 263  Line 270 
270                   of IR.S_Comment text => (env, CL.mkComment text :: stms)                   of IR.S_Comment text => (env, CL.mkComment text :: stms)
271                    | IR.S_Assign(true, x, exp) => let                    | IR.S_Assign(true, x, exp) => let
272                        val ty = trType (env, V.ty x)                        val ty = trType (env, V.ty x)
273                        val x' = ??                        val x' = V.name x
274                        val env = Env.insert (env, x, x')                        val env = Env.insert (env, x, x')
275                        in                        in
276                          (env, trDecl (env, ty, x', exp) :: stms)                          (env, trDecl (env, ty, x', exp) :: stms)
# Line 289  Line 296 
296                    | IR.S_Foreach(x, IR.E_Op(Op.Range, [lo, hi]), blk) => let                    | IR.S_Foreach(x, IR.E_Op(Op.Range, [lo, hi]), blk) => let
297                        val x' = V.name x                        val x' = V.name x
298                        val env' = Env.insert (env, x, x')                        val env' = Env.insert (env, x, x')
299                          val (hi', hiInit) = if CodeGenUtil.isSimple hi
300                                then (trExp(env, hi), [])
301                                else let
302                                  val hi' = freshVar "hi"
303                                  in
304                                    (CL.mkVar hi', [CL.mkDeclInit(CL.int32, hi', trExp(env, hi))])
305                                  end
306                        val loop = CL.mkFor(                        val loop = CL.mkFor(
307                              [(CL.int32, x', lo')],                              [(CL.int32, x', trExp(env, lo))],
308                              CL.mkBinOp(CL.mkVar x', CL.#<=, hi'),                              CL.mkBinOp(CL.mkVar x', CL.#<=, hi'),
309                              [CL.mkUnOp(CL.%++, CL.mkVar x')],                              [CL.mkUnOp(CL.%++, CL.mkVar x')],
310                              trBlock (env', blk))                              trBlock (env', blk))
311                        in                        in
312                          (env, loop :: stms)                          (env, hiInit @ loop :: stms)
313                        end                        end
314                    | IR.S_Foreach(x, e, blk) => ??                    | IR.S_Foreach(x, e, blk) => raise Fail "Foreach"
315                    | IR.S_New(strand, args) => ??                    | IR.S_New(strand, args) => raise Fail "New"
316                    | IR.S_Save(x, exp) => (env, trAssign (env, lvalueStateVar(env, x), exp))                    | IR.S_Save(x, exp) => (env, trAssign (env, lvalueStateVar(env, x), exp))
317                    | IR.S_LoadNrrd(lhs, nrrd) => let                    | IR.S_LoadNrrd(lhs, ty, nrrd) => let
318                        val stm = (case V.ty lhs                        val stm = (case ty
319                               of Ty.SeqTy(ty, NONE) =>                               of APITypes.SeqTy(ty, NONE) =>
320                                    GenLoadNrrd.loadSeqFromFile (lvalueVar (env, lhs), ty, CL.mkStr nrrd)                                    GenLoadNrrd.loadSeqFromFile (lvalueVar (env, lhs), ty, CL.mkStr nrrd)
321                                | Ty.ImageTy info =>                                | APITypes.ImageTy(dim, shape) =>
322                                    GenLoadNrrd.loadImage (lvalueVar (env, lhs), info, CL.mkStr nrrd)                                    GenLoadNrrd.loadImage (lvalueVar (env, lhs), dim, CL.mkStr nrrd)
323                                  | _ => raise Fail(concat[
324                                        "bogus type ", APITypes.toString ty, " for LoadNrrd"
325                                      ])
326                              (* end case *))                              (* end case *))
327                        in                        in
328                          (env, stm :: stms)                          (env, stm :: stms)

Legend:
Removed from v.3893  
changed lines
  Added in v.3894

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