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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/translate/translate-basis.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/translate/translate-basis.sml

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

revision 2489, Mon Oct 21 19:43:32 2013 UTC revision 2490, Mon Oct 21 21:17:25 2013 UTC
# Line 12  Line 12 
12     * to the instantiated meta variables mvs) to a list of SSA assignments in     * to the instantiated meta variables mvs) to a list of SSA assignments in
13     * reverse order.     * reverse order.
14     *)     *)
15      val translate : (HighIL.var * Var.var * Types.meta_var list * HighIL.var list)      val translate : (HighIL.var * Var.var * SimpleTypes.meta_arg list * HighIL.var list)
16            -> HighIL.assignment list            -> HighIL.assignment list
17    
18    end = struct    end = struct
# Line 21  Line 21 
21      structure IL = HighIL      structure IL = HighIL
22      structure DstTy = HighILTypes      structure DstTy = HighILTypes
23      structure Op = HighOps      structure Op = HighOps
24      structure Ty = Types      structure Ty = SimpleTypes
     structure TU = TypeUtil  
     structure MV = MetaVar  
25      structure VTbl = Var.Tbl      structure VTbl = Var.Tbl
26      structure EinOp= Operators      structure EinOp= Operators
27      structure S=Specialize      structure S=Specialize
28    
29      fun pruneTy tv = (case TU.prune(MV.toType tv)      fun trType (Ty.TY ty) = TranslateTy.tr ty
30             of (ty as Ty.T_Var _) => raise Fail("unresolved type " ^ TU.toString ty)        | trType _ = raise Fail "expected type"
31              | ty => TranslateTy.tr ty      fun dimVarToInt (Ty.DIM d) = d
32            (* end case *))        | dimVarToInt _ = raise Fail "expected dim"
   
     fun pruneDim d = (case TU.pruneDim d  
            of (Ty.DimConst n) => n  
             | d => raise Fail("unresolved dimension " ^ TU.dimToString d)  
           (* end case *))  
   
   
   
     fun pruneShape sv = (case TU.pruneShape(MV.toShape sv)  
         of Ty.Shape dd => DstTy.tensorTy(List.map pruneDim dd)  
             | shp => raise Fail("unresolved shape " ^ TU.shapeToString shp)  
         (* end case *))  
   
   
     fun dimVarToInt dv = pruneDim(MV.toDim dv)  
33      fun dimVarToTensor dv = DstTy.tensorTy[dimVarToInt dv]      fun dimVarToTensor dv = DstTy.tensorTy[dimVarToInt dv]
34      fun dimVarToMatrix dv = let      fun dimVarToMatrix dv = let
35            val d = dimVarToInt dv            val d = dimVarToInt dv
36            in            in
37              DstTy.tensorTy[d, d]        (* square matrix type *)              DstTy.tensorTy[d, d]        (* square matrix type *)
38            end            end
39        fun shapeVarToTensor (Ty.SHAPE shp) = DstTy.tensorTy shp
40          | shapeVarToTensor _ = raise Fail "expected shape"
41    
42      fun assign (y, rator, xs) = [IL.ASSGN(y, IL.OP(rator, xs))]      fun assign (y, rator, xs) = [IL.ASSGN(y, IL.OP(rator, xs))]
43    
44      fun basisFn name (y, [], xs) = [IL.ASSGN(y, IL.APPLY(name, xs))]      fun basisFn name (y, [], xs) = [IL.ASSGN(y, IL.APPLY(name, xs))]
45    
46      fun simpleOp rator (y, [], xs) = assign (y, rator, xs)      fun simpleOp rator (y, [], xs) = assign (y, rator, xs)
         fun shapeVarToTensor sv = pruneShape sv  
   
47    
48      fun tensorOp rator (y, [sv], xs) = assign (y, rator(shapeVarToTensor sv), xs)      fun tensorOp rator (y, [sv], xs) = assign (y, rator(shapeVarToTensor sv), xs)
49    
# Line 89  Line 71 
71                  end                  end
72            end            end
73    
   
   
   
   
74      fun assignEin (y, rator, xs) = [IL.ASSGN(y, IL.EINAPP(rator, xs))]      fun assignEin (y, rator, xs) = [IL.ASSGN(y, IL.EINAPP(rator, xs))]
75    
76      fun assignEin2 (y, rator, xs) = IL.ASSGN(y, IL.EINAPP(rator, xs))      fun assignEin2 (y, rator, xs) = IL.ASSGN(y, IL.EINAPP(rator, xs))
# Line 104  Line 82 
82              | shp => raise Fail("unresolved shape " ^ TU.shapeToString shp)              | shp => raise Fail("unresolved shape " ^ TU.shapeToString shp)
83              (* end case *))*)              (* end case *))*)
84    
85        fun tensorEinOp einop (y, [SK], xs) = let
86              val ty1 as DstTy.TensorTy dd1 = pruneShape SK
     fun tensorEinOp einop (y, [SK], xs) =  
         let val ty1 as DstTy.TensorTy dd1 = pruneShape SK  
87              val rator =S.transform(einop,[dd1],[])              val rator =S.transform(einop,[dd1],[])
88          in          in
89                  assignEin(y, rator,xs)                  assignEin(y, rator,xs)
90          end          end
91    
92        fun scalarField (einop, paramarg, y, xs) = let
93              val paramarg' = List.map dimVarToInt  paramarg(*[2]*)
   
   
     fun scalarField(einop,paramarg,y,xs)=  
             let val paramarg'=List.map dimVarToInt  paramarg(*[2]*)  
94                  val rator=S.transform(einop, [[]],paramarg')                  val rator=S.transform(einop, [[]],paramarg')
   
95              in              in
96                  assignEin(y, rator, xs)                  assignEin(y, rator, xs)
97              end              end
98    
99      fun singleField(SK,einop,paramarg, y, xs)=      fun singleField (SK, einop, paramarg, y, xs) = let
         let  
100              val s=peelFieldSK SK              val s=peelFieldSK SK
101              val paramarg'= List.map dimVarToInt paramarg (*[2]*)              val paramarg'= List.map dimVarToInt paramarg (*[2]*)
102              val rator= S.transform(einop, [s],paramarg')              val rator= S.transform(einop, [s],paramarg')
103          in assignEin(y, rator, xs)            in
104                assignEin(y, rator, xs)
105          end          end
106    
   
   
   
107  (****MV.toDim returns int, and DstTy.TensorTy returns intlist *)  (****MV.toDim returns int, and DstTy.TensorTy returns intlist *)
108    
109  (*DK- SK-shape,NK-dim *)  (*DK- SK-shape,NK-dim *)
# Line 143  Line 111 
111  (* shape is an int list, DIM is in int|variable, k-level of differntiation *)  (* shape is an int list, DIM is in int|variable, k-level of differntiation *)
112    
113   (* build a table that maps Basis variables to their translation functions *)   (* build a table that maps Basis variables to their translation functions *)
114      val tbl : ((IL.var * Ty.meta_var list * IL.var list) -> IL.assignment list) VTbl.hash_table = let      val tbl : ((IL.var * Ty.meta_arg list * IL.var list) -> IL.assignment list) VTbl.hash_table = let
115            val tbl = VTbl.mkTable (128, Fail "Translate table")            val tbl = VTbl.mkTable (128, Fail "Translate table")
116            val insert = VTbl.insert tbl            val insert = VTbl.insert tbl
117            in            in
# Line 298  Line 266 
266                                          in                                          in
267                                              assignEin(y,S.transform(EinOp.trace, [[d]],[]),xs)                                              assignEin(y,S.transform(EinOp.trace, [[d]],[]),xs)
268                                          end),                                          end),
269                    (BV.fn_transpose,       fn (y, [dv1, dv2], xs) => let
                 (BV.fn_transpose,           fn (y, [dv1, dv2], xs) =>  
                                         let  
270                                              val d1=dimVarToInt dv1                                              val d1=dimVarToInt dv1
271                                              val d2=dimVarToInt dv2                                              val d2=dimVarToInt dv2
272                                          in                                          in
273                                              assignEin(y,S.transform(EinOp.transpose, [[d1],[d2]],[]),xs)                                              assignEin(y,S.transform(EinOp.transpose, [[d1],[d2]],[]),xs)
274                                          end),                                          end),
   
275                  (BV.kn_bspln3,          kernel Kernel.bspln3),                  (BV.kn_bspln3,          kernel Kernel.bspln3),
276                  (BV.kn_bspln5,          kernel Kernel.bspln5),                  (BV.kn_bspln5,          kernel Kernel.bspln5),
277                  (BV.kn_ctmr,            kernel Kernel.ctmr),                  (BV.kn_ctmr,            kernel Kernel.ctmr),
# Line 315  Line 280 
280                  (BV.kn_tent,            kernel Kernel.tent),                  (BV.kn_tent,            kernel Kernel.tent),
281                  (BV.kn_c1tent,          kernel Kernel.tent),                  (BV.kn_c1tent,          kernel Kernel.tent),
282                  (BV.i2r,                simpleOp Op.IntToReal),                  (BV.i2r,                simpleOp Op.IntToReal),
   
283                  (BV.identity,           fn (y, [dv], xs) =>let                  (BV.identity,           fn (y, [dv], xs) =>let
284                                              val d=dimVarToInt dv                                              val d=dimVarToInt dv
285                                          in assignEin(y, S.transform(EinOp.identity,[[d],[d]],[]),xs)                                          in assignEin(y, S.transform(EinOp.identity,[[d],[d]],[]),xs)
286                                          end),                                          end),
   
287               (*   (BV.zero,               fn (y, [sv], []) =>               (*   (BV.zero,               fn (y, [sv], []) =>
288                                            assign(y, Op.Zero(shapeVarToTensor sv), [])),*)                                            assign(y, Op.Zero(shapeVarToTensor sv), [])),*)
289                 (BV.subscript,          fn (y, [tv, dv], xs) =>                 (BV.subscript,          fn (y, [tv, dv], xs) =>
290                                            assign(y,                                            assign(y,
291                                              Op.SeqSub(DstTy.SeqTy(pruneTy tv, pruneDim(MV.toDim dv))),                                              Op.SeqSub(DstTy.SeqTy(pruneTy tv, pruneDim(MV.toDim dv))),
292                                              xs))                                              xs))
   
   
293              (*,              (*,
   
294              (BV.dynSubscript,       fn (y, [tv], args) =>              (BV.dynSubscript,       fn (y, [tv], args) =>
295                                          assign(y, Op.SeqSub(DstTy.DynSeqTy(pruneTy tv)), args))*)                                            assign(y, Op.SeqSub(DstTy.DynSeqTy(pruneTy tv)), args))
296    *)
297                  ];                  ];
   
298            (* add C math functions *)            (* add C math functions *)
299              List.app (fn (n, x) => insert(x, basisFn n)) BV.mathFns;              List.app (fn (n, x) => insert(x, basisFn n)) BV.mathFns;
300              tbl              tbl

Legend:
Removed from v.2489  
changed lines
  Added in v.2490

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