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 3654, Wed Feb 3 23:00:46 2016 UTC revision 3661, Fri Feb 5 00:45:24 2016 UTC
# Line 25  Line 25 
25      structure IMap = IntRedBlackMap      structure IMap = IntRedBlackMap
26    
27      fun indexTensor e = Mk.indexTensor e      fun indexTensor e = Mk.indexTensor e
     fun mkSubSca e =  Mk.mkSubSca e  
     fun mkProdSca e = Mk.mkProdSca e  
     fun mkDivSca e =  Mk.mkDivSca e  
     fun mkMultiple e = Mk.mkMultiple e  
28      fun mkOp1 e =  Mk.mkOp1 e      fun mkOp1 e =  Mk.mkOp1 e
29    
30      fun mapIndex (mapp, id) = (case IMap.find(mapp, id)      fun mapIndex (mapp, id) = (case IMap.find(mapp, id)
# Line 78  Line 74 
74                          indexTensor (avail, mapp, (params, args, id, ix, Ty.realTy))                          indexTensor (avail, mapp, (params, args, id, ix, Ty.realTy))
75                      | E.Op1(E.Neg, e1) =>                      | E.Op1(E.Neg, e1) =>
76  (* QUESTION: why not just negate the tensor? *)  (* QUESTION: why not just negate the tensor? *)
77                          mkProdSca (avail, [Mk.intToRealLit (avail, ~1), gen (mapp, e1)])                          Mk.realMul (avail, Mk.intToRealLit (avail, ~1), gen (mapp, e1))
78                      | E.Op1(op1, e1) => mkOp1 (op1, gen (mapp, e1))                      | E.Op1(op1, e1) => mkOp1 (op1, gen (mapp, e1))
79                      | E.Op2(E.Sub, e1, e2) => mkSubSca (avail, [gen (mapp, e1), gen (mapp, e2)])                      | E.Op2(E.Sub, e1, e2) => Mk.realSub (avail, gen (mapp, e1), gen (mapp, e2))
80                      | E.Opn(E.Add, es) => let                      | E.Opn(E.Add, es) =>
81                          fun iter ([], ids) =                          Mk.reduce (avail, Mk.realAdd, List.map (fn e => gen(mapp, e)) es)
82                                mkMultiple (avail, List.rev ids, Op.addSca, Ty.realTy)                      | E.Opn(E.Prod, es) =>
83                            | iter (e1::es, ids) = iter (es, (gen (mapp, e1))::ids)                          Mk.reduce (avail, Mk.realMul, List.map (fn e => gen(mapp, e)) es)
                         in  
                           iter (es, [])  
                         end  
                     | E.Opn(E.Prod, es) => let  
                         fun iter ([], ids) =  
                               mkMultiple (avail, List.rev ids, Op.prodSca, Ty.realTy)  
                           | iter (e1::es, ids) = iter (es, (gen (mapp, e1))::ids)  
                         in  
                           iter (es, [])  
                         end  
84                      | E.Op2(E.Div, e1 as E.Tensor (_, [_]), e2 as E.Tensor (_, [])) =>                      | E.Op2(E.Div, e1 as E.Tensor (_, [_]), e2 as E.Tensor (_, [])) =>
85                          gen (mapp, E.Opn(E.Prod, [E.Op2 (E.Div, E.Const 1, e2), e1]))                          gen (mapp, E.Opn(E.Prod, [E.Op2 (E.Div, E.Const 1, e2), e1]))
86                      | E.Op2(E.Div, e1, e2) => mkDivSca (avail, [gen (mapp, e2)])                      | E.Op2(E.Div, e1, e2) => Mk.realDiv (avail, gen (mapp, e1), gen (mapp, e2))
87                      | E.Sum(x, E.Opn (E.Prod, (E.Img (Vid, _, _) ::E.Krn (Hid, _, _) ::_))) =>                      | E.Sum(x, E.Opn (E.Prod, (E.Img (Vid, _, _) ::E.Krn (Hid, _, _) ::_))) =>
88                          FieldToLow.expand (avail, mapp, params, body, args)                          FieldToLow.expand (avail, mapp, params, body, args)
89                      | E.Sum(sumx, e) => let                      | E.Sum(sumx, e) =>
90                          val ids = sumCheck (mapp, sumx, e)                          Mk.reduce (avail, Mk.realAdd, sumCheck (mapp, sumx, e))
                         in  
                           mkMultiple (avail, ids, Op.addSca, Ty.realTy)  
                         end  
91                      | _ => raise Fail("unsupported ein-exp: " ^ EinPP.expToString body)                      | _ => raise Fail("unsupported ein-exp: " ^ EinPP.expToString body)
92                    (*end case*)                    (*end case*)
93                  end                  end

Legend:
Removed from v.3654  
changed lines
  Added in v.3661

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