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

SCM Repository

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

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

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

revision 4168, Thu Jul 7 16:48:41 2016 UTC revision 4173, Fri Jul 8 11:49:31 2016 UTC
# Line 407  Line 407 
407                    in                    in
408                      (Env.VEC(layout, exps), stms)                      (Env.VEC(layout, exps), stms)
409                    end                    end
410                  | Op.TensorIndex(ty as Ty.TensorTy[_], [i]) => let
411                      val [arg] = args
412                      fun mkOp e = Env.TREE(T.E_Op(TOp.TensorIndex(TreeTypeOf.exp e, [i]), [e]))
413                      in
414                        case useVar env arg
415                         of Env.RHS(ty, e) =>  let
416                              val tmp = U.newTempVar ("t", ty)
417                              in
418                                (mkOp(T.E_Var tmp), [T.S_Assign(true, tmp, e)])
419                              end
420                          | Env.TREE e => (mkOp e, [])
421                          | Env.VEC(layout, es) => let
422                              fun mkOp (w, pw, i, e) =
423                                    (Env.TREE(T.E_Op(TOp.VIndex(w, pw, i), [e])), [])
424                              fun index (idx, w, [pw], [e]) = mkOp (w, pw, idx, e)
425                                | index (idx, w, pw::ws, e::es) =
426                                    if (idx < pw)
427                                      then mkOp (pw, pw, idx, e)
428                                      else index (idx - pw, w - pw, ws, es)
429                                | index _ = raise Fail "inconsistent"
430                              in
431                                index (i, #wid layout, #pieces layout, es)
432                              end
433                        (* end case *)
434                      end
435                | Op.TensorIndex(ty, idxs) => let                | Op.TensorIndex(ty, idxs) => let
436                    val ([arg], stms) = simpleArgs (env, args)                    val ([arg], stms) = simpleArgs (env, args)
437                    val ty = TreeTypeOf.exp arg                    val ty = TreeTypeOf.exp arg

Legend:
Removed from v.4168  
changed lines
  Added in v.4173

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