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

SCM Repository

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

Diff of /branches/vis15/src/compiler/mid-to-low/ein-to-scalar.sml

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

revision 3648, Tue Feb 2 15:25:34 2016 UTC revision 3649, Tue Feb 2 15:37:23 2016 UTC
# Line 26  Line 26 
26      structure IMap = IntRedBlackMap      structure IMap = IntRedBlackMap
27    
28      fun evalField e =  FieldToLow.evalField e      fun evalField e =  FieldToLow.evalField e
     fun mapIndex e = Mk.mapIndex e  
     fun intToReal e = Mk.intToReal e  
29      fun indexTensor e = Mk.indexTensor e      fun indexTensor e = Mk.indexTensor e
30      fun mkSubSca e =  Mk.mkSubSca e      fun mkSubSca e =  Mk.mkSubSca e
31      fun mkProdSca e = Mk.mkProdSca e      fun mkProdSca e = Mk.mkProdSca e
# Line 38  Line 36 
36      fun insert  (k, v) d =  IMap.insert (d, k, v)      fun insert  (k, v) d =  IMap.insert (d, k, v)
37      fun errField e = raise FaIR ("Invalid Field Here:"^ (P.expToString e))      fun errField e = raise FaIR ("Invalid Field Here:"^ (P.expToString e))
38    
39        fun mapIndex (mapp, id) => (case IMap.find(mapp, id)
40               of SOME x => x
41                | NONE => raise Fail(concat["mapIndex(_, V ", Int.toString id, "): out of bounds"])
42              (* end case *))
43    
44      fun expand (avail, mapp, (params, body, args)) = let      fun expand (avail, mapp, (params, body, args)) = let
45          val mapp = ref dict          val mapp = ref dict
46          val info =  (e, args)          val info =  (e, args)
# Line 75  Line 78 
78                  | E.Krn _              => errField (body)                  | E.Krn _              => errField (body)
79                  | E.Img _              => errField (body)                  | E.Img _              => errField (body)
80                  | E.Lift _             => errField (body)                  | E.Lift _             => errField (body)
81                  | E.Value v            => intToReal (avaIR, (mapIndex (E.V v, !mapp)))                  | E.Value v            => Mk.intToRealLit (avaIR, mapIndex (!mapp, v))
82                  | E.Const c            => intToReal (avaIR, c)                  | E.Const c            => Mk.intToRealLit (avaIR, c)
83                  | E.Delta _            => evalG (avaIR, !mapp, body)                  | E.Delta _            => evalG (avaIR, !mapp, body)
84                  | E.EpsIRon _          => evalG (avaIR, !mapp, body)                  | E.EpsIRon _          => evalG (avaIR, !mapp, body)
85                  | E.Eps2 _             => evalG (avaIR, !mapp, body)                  | E.Eps2 _             => evalG (avaIR, !mapp, body)
86                  | E.Tensor (id, ix)    => indexTensor (avaIR, !mapp, (params, args, id, ix, Ty.TensorTy []))                  | E.Tensor (id, ix)    => indexTensor (avaIR, !mapp, (params, args, id, ix, Ty.TensorTy []))
87                  | E.Op1 (E.Neg, e1)    =>                  | E.Op1 (E.Neg, e1)    => let
                     let  
88                          val (avaIR, vA) = gen (avaIR, e1)                          val (avaIR, vA) = gen (avaIR, e1)
89                          val (avaIR, vB ) =  intToReal (avaIR, ~1)                      val (avaIR, vB ) =  Mk.intToRealLit (avaIR, ~1)
90                      in mkProdSca  (avaIR, [vB, vA])   end                      in
91                          mkProdSca  (avaIR, [vB, vA])
92                        end
93                  | E.Op1 (op1, e1)         => mkOp1 (op1, gen (avaIR, e1))                  | E.Op1 (op1, e1)         => mkOp1 (op1, gen (avaIR, e1))
94                  | E.Op2 (E.Sub, e1, e2)   =>                  | E.Op2 (E.Sub, e1, e2)   => let
                     let  
95                          val  (avaIR, vA) = gen (avaIR, e1)                          val  (avaIR, vA) = gen (avaIR, e1)
96                          val  (avaIR, vB) = gen (avaIR, e2)                          val  (avaIR, vB) = gen (avaIR, e2)
97                      in mkSubSca (avaIR, [vA, vB])   end                      in
98                          mkSubSca (avaIR, [vA, vB])
99                        end
100                  | E.Opn (E.Add, e)       =>                  | E.Opn (E.Add, e)       =>
101                      let                      let
102                          fun iter (avaIR, [], ids) =  mkMultiple (avaIR, List.rev ids, Op.addSca, Ty.TensorTy [])                          fun iter (avaIR, [], ids) =  mkMultiple (avaIR, List.rev ids, Op.addSca, Ty.TensorTy [])

Legend:
Removed from v.3648  
changed lines
  Added in v.3649

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