Home My Page Projects Code Snippets Project Openings diderot

# SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/high-il/normalize-ein.sml
 [diderot] / branches / charisee / src / compiler / high-il / normalize-ein.sml

# Diff of /branches/charisee/src/compiler/high-il/normalize-ein.sml

revision 2613, Wed May 7 04:35:38 2014 UTC revision 2795, Tue Nov 4 21:58:11 2014 UTC
# Line 11  Line 11
11      in      in
12
13  fun err str=raise Fail (String.concat["Ill-formed EIN Operator",str])  fun err str=raise Fail (String.concat["Ill-formed EIN Operator",str])
14  val testing=0  val testing=1
15
16  fun flatProd [e]=e  fun flatProd [e]=e
17  | flatProd e=E.Prod e  | flatProd e=E.Prod e
# Line 61  Line 61
61                          val E.Partial d3=d1                          val E.Partial d3=d1
62                          in (1,E.Conv(v,alpha,h,d2@d3)) end                          in (1,E.Conv(v,alpha,h,d2@d3)) end
63      | E.Field _   => (0,E.Apply(d1,e1))      | E.Field _   => (0,E.Apply(d1,e1))
64      | E.Probe _   => (0,E.Apply(d1,e1))      | E.Probe _   => (0,E.Apply(d1,e1)) (*FIX ME, Should be error actually apply of a tensor result*)
65      | E.Apply(E.Partial d2,e2)  => let      | E.Apply(E.Partial d2,e2)  => let
66                          val E.Partial d3=d1                          val E.Partial d3=d1
67                          in (1,E.Apply(E.Partial(d3@d2),e2)) end                          in (1,E.Apply(E.Partial(d3@d2),e2)) end
# Line 226  Line 226
226              | E.Prod(E.Epsilon eps1::ps)=> (case (G.epsToDels(E.Epsilon eps1::ps))              | E.Prod(E.Epsilon eps1::ps)=> (case (G.epsToDels(E.Epsilon eps1::ps))
227                  of (1,e,[],_,_)      =>(changed:=true;e)(* Changed to Deltas *)                  of (1,e,[],_,_)      =>(changed:=true;e)(* Changed to Deltas *)
228                  | (1,e,sx,_,_)      =>(changed:=true;E.Sum(sx,e))(* Changed to Deltas *)                  | (1,e,sx,_,_)      =>(changed:=true;E.Sum(sx,e))(* Changed to Deltas *)
229                  | (0,_,_,_,[])   =>  body                  | (_,_,_,_,[])   =>  body
230                  | (0,_,_,epsAll,rest) => let                  | (_,_,_,epsAll,rest) => let
231                          val p'=rewriteBody(E.Prod rest)                          val p'=rewriteBody(E.Prod rest)
232                          val(_,b)= F.mkProd(epsAll@[p'])                          val(_,b)= F.mkProd(epsAll@[p'])
233                          in b end                          in b end
# Line 236  Line 236
236              | E.Prod(E.Sum(c1,E.Prod(E.Epsilon e1::es1))::E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es) =>              | E.Prod(E.Sum(c1,E.Prod(E.Epsilon e1::es1))::E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es) =>
237                  (case G.epsToDels([E.Epsilon e1, E.Epsilon e2]@es1@es2@es)                  (case G.epsToDels([E.Epsilon e1, E.Epsilon e2]@es1@es2@es)
238                  of (1,e,sx,_,_)=> (changed:=true; E.Sum(c1@c2@sx,e))                  of (1,e,sx,_,_)=> (changed:=true; E.Sum(c1@c2@sx,e))
239                  | (0,_,_,_,_)=>let                  | (_,_,_,_,_)=>let
240                      val eA=rewriteBody(E.Sum(c1,E.Prod(E.Epsilon e1::es1)))                      val eA=rewriteBody(E.Sum(c1,E.Prod(E.Epsilon e1::es1)))
241                      val eB=rewriteBody(E.Prod(E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es))                      val eB=rewriteBody(E.Prod(E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es))
242                      val (_,e)=F.mkProd([eA,eB])                      val (_,e)=F.mkProd([eA,eB])

Legend:
 Removed from v.2613 changed lines Added in v.2795