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

SCM Repository

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

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

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

revision 2845, Fri Dec 12 06:46:23 2014 UTC revision 2856, Thu Jan 15 01:42:24 2015 UTC
# Line 58  Line 58 
58          | E.Lift e    => (1,E.Lift(E.Sum(c1,e)))          | E.Lift e    => (1,E.Lift(E.Sum(c1,e)))
59          | E.Sum(c2,e2)=> (1,E.Sum(c1@c2,e2))          | E.Sum(c2,e2)=> (1,E.Sum(c1@c2,e2))
60          | E.Prod p    => filterSca(c1,p)          | E.Prod p    => filterSca(c1,p)
61            | E.Const 0   => (1,E.Const 0) (*expression could have been changed to 0*)
62          | E.Const _   => err("Sum of Const")          | E.Const _   => err("Sum of Const")
63          | E.Partial _ => err("Sum of Partial")          | E.Partial _ => err("Sum of Partial")
64          | E.Krn _     => err("Krn used before expand")          | E.Krn _     => err("Krn used before expand")
# Line 105  Line 106 
106              val E.Partial d3=d1              val E.Partial d3=d1
107              in mkProd(pre@[prodAppPartial(post,d3)])              in mkProd(pre@[prodAppPartial(post,d3)])
108              end              end
109          | E.Const _   => err("Const without Lift")          | E.Const _   => (1,E.Const 0)(*err("Const without Lift")*)
110          | E.Tensor _  => err("Tensor without Lift")          | E.Tensor _  => err("Tensor without Lift")
111          | E.Delta _   => err("Apply of Delta")          | E.Delta _   => err("Apply of Delta")
112          | E.Epsilon _ => err("Apply of Eps")          | E.Epsilon _ => err("Apply of Eps")
# Line 131  Line 132 
132          | E.Sub (a,b) => (1,E.Sub(E.Probe(a,x),E.Probe(b,x)))          | E.Sub (a,b) => (1,E.Sub(E.Probe(a,x),E.Probe(b,x)))
133          | E.Neg e'    => (1,E.Neg(E.Probe(e',x)))          | E.Neg e'    => (1,E.Neg(E.Probe(e',x)))
134          | E.Div (a,b) => (1,E.Div(E.Probe(a,x),E.Probe(b,x)))          | E.Div (a,b) => (1,E.Div(E.Probe(a,x),E.Probe(b,x)))
135          | E.Const _   => err("Const without Lift")          | E.Const _   => (1,e1)(*err("Const without Lift")*)
136          | E.Tensor _  => err("Tensor without Lift")          | E.Tensor _  => err("Tensor without Lift")
137          | E.Delta _   => (0,e1)          | E.Delta _   => (0,e1)
138          | E.Epsilon _ => (0,e1)          | E.Epsilon _ => (0,e1)
# Line 228  Line 229 
229                      val (_,b)=mkProd [E.Epsilon(i,j,k),a]                      val (_,b)=mkProd [E.Epsilon(i,j,k),a]
230                      in b end                      in b end
231              end              end
232    (*
233            | E.Prod(E.Epsilon(i,j,k)::E.Conv(V1,[a1], h1, d1)::E.Conv(V,alpha, h, d)::es)=>let
234                val change= G.matchEps(0,alpha@d,[],[i,j,k])
235                in case (change,es)
236                    of (1,_) =>(changed:=true; E.Lift(E.Const 0))
237                    | (_,[]) =>E.Prod[E.Epsilon(i,j,k),E.Conv(V1,[a1], h1, d1),E.Conv(V,alpha, h, d)]
238                    | (_,_) =>let
239                        val a=rewriteBody(E.Prod([E.Conv(V1,[a1], h1, d1),E.Conv(V,alpha, h, d)]@ es))
240                        val (_,b) = mkProd [E.Epsilon(i,j,k),a]
241                        in b end
242                end
243    *)
244          | E.Prod(E.Epsilon(i,j,k)::E.Conv(V,alpha, h, d)::es)=>let          | E.Prod(E.Epsilon(i,j,k)::E.Conv(V,alpha, h, d)::es)=>let
245              val change= G.matchEps(0,d,[],[i,j,k])              val change= G.matchEps(0,d,[],[i,j,k])
246              in case (change,es)              in case (change,es)
247                  of (1,_) =>(changed:=true; E.Const 0)                  of (1,_) =>(changed:=true; E.Lift(E.Const 0))
248                  | (_,[]) =>E.Prod[E.Epsilon(i,j,k),E.Conv(V,alpha, h, d)]                  | (_,[]) =>E.Prod[E.Epsilon(i,j,k),E.Conv(V,alpha, h, d)]
249                  | (_,_) =>let                  | (_,_) =>let
250                      val a=rewriteBody(E.Prod([E.Conv(V,alpha, h, d)]@ es))                      val a=rewriteBody(E.Prod([E.Conv(V,alpha, h, d)]@ es))
# Line 242  Line 255 
255              if(e2=i1 andalso e3=i2)              if(e2=i1 andalso e3=i2)
256              then (changed :=true;E.Const(0))              then (changed :=true;E.Const(0))
257              else body              else body
258    (*
259            | E.Prod(E.Epsilon e1::E.Sum(c1,E.Prod(E.Sum(c2,E.Prod(E.Epsilon e2::es3))::es2))::es1) =>
260                (case G.epsToDels([E.Epsilon e1, E.Epsilon e2]@es3@es2@es1)
261                of (1,e,sx,_,_)=> (changed:=true; E.Sum(c1@c2@sx,e))
262                | (_,_,_,_,_)=>let
263                        val eA=rewriteBody(E.Epsilon e1)
264                        val eB=rewriteBody(E.Prod(E.Sum(c1,E.Prod(E.Sum(c2,E.Prod(E.Epsilon e2::es3))::es2))::es1))
265                        val (_,e)=mkProd([eA,eB])
266                    in
267                        e
268                    end
269                (*end case*))*)
270          | 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))
271              of (1,e,[],_,_)      =>(changed:=true;e)(* Changed to Deltas *)              of (1,e,[],_,_)      =>(changed:=true;e)(* Changed to Deltas *)
272              | (1,e,sx,_,_)      =>(changed:=true;E.Sum(sx,e))              | (1,e,sx,_,_)      =>(changed:=true;E.Sum(sx,e))
# Line 267  Line 291 
291          | E.Prod[E.Delta d, E.Neg e]=> (changed:=true;E.Neg(E.Prod[E.Delta d, e]))          | E.Prod[E.Delta d, E.Neg e]=> (changed:=true;E.Neg(E.Prod[E.Delta d, e]))
292          | E.Prod(E.Delta d::es)=>let          | E.Prod(E.Delta d::es)=>let
293              val (pre',eps, dels,post)= filterGreek(E.Delta d::es)              val (pre',eps, dels,post)= filterGreek(E.Delta d::es)
294                 val _= testp["\n\n Reduce delta--",P.printbody(body)]
295              val (change,a)=G.reduceDelta(eps, dels, post)              val (change,a)=G.reduceDelta(eps, dels, post)
296                  val _= testp["\n\n ---delta moved--",P.printbody(a)]
297              in (case (change,a)              in (case (change,a)
298                  of (0, _)=> E.Prod [E.Delta d,rewriteBody(E.Prod es)]                  of (0, _)=> E.Prod [E.Delta d,rewriteBody(E.Prod es)]
299                  | (_, E.Prod p)=>let                  | (_, E.Prod p)=>let
# Line 304  Line 330 
330      val (b,count) = loop(body,0)      val (b,count) = loop(body,0)
331      val _ =testp["\n Out of normalize \n",P.printbody(b),      val _ =testp["\n Out of normalize \n",P.printbody(b),
332          "\n    Final CounterXX:",Int.toString(count),"\n\n"]          "\n    Final CounterXX:",Int.toString(count),"\n\n"]
333           val xx =G.reduceDelta([],[E.Delta(E.V 2,E.V 1),E.Delta(E.V 3,E.V 0)],[E.Conv(0,[E.V 1,E.V 3],1,[E.V 0])])
334      in      in
335          (Ein.EIN{params=params, index=index, body=b},count)          (Ein.EIN{params=params, index=index, body=b},count)
336      end      end

Legend:
Removed from v.2845  
changed lines
  Added in v.2856

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