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 4027, Wed Jun 22 17:38:35 2016 UTC revision 4033, Thu Jun 23 14:09:17 2016 UTC
# Line 117  Line 117 
117      fun mkDefn (x, e) = T.S_Assign(true, x, e)      fun mkDefn (x, e) = T.S_Assign(true, x, e)
118      val zero = T.E_Lit(Literal.Real(RealLit.zero false))      val zero = T.E_Lit(Literal.Real(RealLit.zero false))
119    
120      (* turn an expression of type TensorTy to one of TensorTyRef *)
121        fun mkRef e = (case TreeTypeOf.exp e
122               of TTy.TensorTy(shp as _::_) => T.E_Op(TOp.TensorRef shp, [e])
123                | _ => e
124             (* end case *))
125    
126      fun cvtScalarTy Ty.BoolTy = TTy.BoolTy      fun cvtScalarTy Ty.BoolTy = TTy.BoolTy
127        | cvtScalarTy Ty.IntTy = TTy.IntTy        | cvtScalarTy Ty.IntTy = TTy.IntTy
128        | cvtScalarTy (Ty.TensorTy[]) = TTy.realTy        | cvtScalarTy (Ty.TensorTy[]) = TTy.realTy
# Line 189  Line 195 
195            fun expToArg (e, stms) = (case V.ty x            fun expToArg (e, stms) = (case V.ty x
196                   of Ty.TensorTy[d] => let                   of Ty.TensorTy[d] => let
197                        val layout = Env.layoutVec env d                        val layout = Env.layoutVec env d
198  (* QUESTION: can "e" be a complicated expression or are we guaranteed that it will just                        val e = mkRef e
  * be a memory reference?  
  *)  
199                        val es = List.tabulate (                        val es = List.tabulate (
200                              List.length(#pieces layout),                              List.length(#pieces layout),
201                              fn i => T.E_VLoad(layout, e, i))                              fn i => T.E_VLoad(layout, e, i))
# Line 442  Line 446 
446                    | VEC xs' => (case V.ty lhs                    | VEC xs' => (case V.ty lhs
447                         of Ty.TensorTy[d] => let                         of Ty.TensorTy[d] => let
448                              val layout = Env.layoutVec env d                              val layout = Env.layoutVec env d
449                                val rhs = mkRef rhs
450                              in                              in
451                                List.mapi                                List.mapi
452                                  (fn (i, x') => mkAssign(x', T.E_VLoad(layout, rhs, i)))                                  (fn (i, x') => mkAssign(x', T.E_VLoad(layout, rhs, i)))
# Line 672  Line 677 
677                        end                        end
678                    | IR.MASSIGN{stm=([], Op.Print tys, xs), succ, ...} => let                    | IR.MASSIGN{stm=([], Op.Print tys, xs), succ, ...} => let
679                        val (es, stms') = singleArgs (env, xs)                        val (es, stms') = singleArgs (env, xs)
680                        val stm = T.S_Print(List.map U.trType tys, es)                      (* translate TensorTy to TensorRefTy in the type list *)
681                          fun trType (Ty.TensorTy(shp as _::_)) = TTy.TensorRefTy shp
682                            | trType ty = U.trType ty
683                          val tys = List.map trType tys
684                          val stm = T.S_Print(tys, List.map mkRef es)
685                        in                        in
686                          doNode (!succ, ifStk, stm :: List.revAppend (stms', stms))                          doNode (!succ, ifStk, stm :: List.revAppend (stms', stms))
687                        end                        end

Legend:
Removed from v.4027  
changed lines
  Added in v.4033

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