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

SCM Repository

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

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

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

revision 2552, Fri Feb 28 19:03:27 2014 UTC revision 2553, Sun Mar 2 19:53:33 2014 UTC
# Line 14  Line 14 
14      | mkAdd(e)=let      | mkAdd(e)=let
15      fun flatten((i, (E.Add l)::l'))= flatten(1,l@l')      fun flatten((i, (E.Add l)::l'))= flatten(1,l@l')
16          |flatten(i,((E.Const c):: l'))=          |flatten(i,((E.Const c):: l'))=
17              if (c>0.0 orelse c<0.0) then let              if (c>0 orelse c<0) then let
18                      val(b,a)=flatten(i,l') in (b,[E.Const c]@a) end                      val(b,a)=flatten(i,l') in (b,[E.Const c]@a) end
19              else flatten(1,l')              else flatten(1,l')
20          | flatten(i,[])=(i,[])          | flatten(i,[])=(i,[])
# Line 23  Line 23 
23    
24       val (b,a)=flatten(0,e)       val (b,a)=flatten(0,e)
25      in case a      in case a
26       of [] => (1,E.Const(1.0))       of [] => (1,E.Const(1))
27                  | [e] => (1,e)                  | [e] => (1,e)
28                  | es => (b,E.Add es)                  | es => (b,E.Add es)
29                  (* end case *)                  (* end case *)
# Line 34  Line 34 
34      | mkProd(e)=let      | mkProd(e)=let
35      fun flatten(i,((E.Prod l)::l'))= flatten(1,l@l')      fun flatten(i,((E.Prod l)::l'))= flatten(1,l@l')
36          |flatten(i,((E.Const c)::l'))=          |flatten(i,((E.Const c)::l'))=
37                  if(c>0.0 orelse  0.0>c) then (3,[E.Const 0.0])                  if(c>0 orelse  0>c) then (3,[E.Const 0])
38                  else flatten(i,l')                  else flatten(i,l')
39           | flatten(i,[])=(i,[])           | flatten(i,[])=(i,[])
40           | flatten (i,e::l') =  let val(a,b)=flatten(i,l') in (a,[e]@b) end           | flatten (i,e::l') =  let val(a,b)=flatten(i,l') in (a,[e]@b) end
41       val (change,a)=flatten(0,e)       val (change,a)=flatten(0,e)
42       in if(change=3) then (1,E.Const(0.0))       in if(change=3) then (1,E.Const(0))
43          else case a          else case a
44          of [] => (1,E.Const(0.0))          of [] => (1,E.Const(0))
45          | [e] => (1,e)          | [e] => (1,e)
46          | es => (change, E.Prod es)          | es => (change, E.Prod es)
47          (* end case *)          (* end case *)
# Line 194  Line 194 
194    
195  (*Apply*)  (*Apply*)
196  fun mkApply(E.Apply(E.Partial d,e))=(case e  fun mkApply(E.Apply(E.Partial d,e))=(case e
197      of E.Tensor(a,[])=>(1,E.Const 0.0)      of E.Tensor(a,[])=>(1,E.Const 0)
198      | E.Const _ =>(1,E.Const 0.0)      | E.Const _ =>(1,E.Const 0)
199      | E.Delta _ =>(1,E.Const 0.0)      | E.Delta _ =>(1,E.Const 0)
200      | E.Value _ =>(1,E.Const 0.0)      | E.Value _ =>(1,E.Const 0)
201      | E.Epsilon _ =>(1,E.Const 0.0)      | E.Epsilon _ =>(1,E.Const 0)
202      | E.Conv (fid,alpha,tid, delta)=> (1, E.Conv(fid,alpha, tid, delta@d))      | E.Conv (fid,alpha,tid, delta)=> (1, E.Conv(fid,alpha, tid, delta@d))
203      | E.Add l => (1,E.Add(List.map (fn e => E.Apply(E.Partial d, e)) l))      | E.Add l => (1,E.Add(List.map (fn e => E.Apply(E.Partial d, e)) l))
204      | E.Sub(e2, e3) =>(1, E.Sub(E.Apply(E.Partial d, e2), E.Apply(E.Partial d, e3)))      | E.Sub(e2, e3) =>(1, E.Sub(E.Apply(E.Partial d, e2), E.Apply(E.Partial d, e3)))
# Line 231  Line 231 
231             (*             (*
232    
233  fun epsapply(c,eps,dels,post)=let  fun epsapply(c,eps,dels,post)=let
234      fun  applyEps(change,count,[],[],rest,done)= (print "kkk";(0,E.Const 0.0))      fun  applyEps(change,count,[],[],rest,done)= (print "kkk";(0,E.Const 0))
235          | applyEps(change,count,eps,epsrest,[],done)=(print "yyyy";(0,E.Const 0.0))          | applyEps(change,count,eps,epsrest,[],done)=(print "yyyy";(0,E.Const 0))
236          | applyEps(change,count,[],epsrest,r::rest,done)=(print "bb";applyEps(change,count,epsrest,[],rest,done@[r]))          | applyEps(change,count,[],epsrest,r::rest,done)=(print "bb";applyEps(change,count,epsrest,[],rest,done@[r]))
237          | applyEps(change,count,eps1::eps,epsrest,r::rest,done)=( print "lrr";(case (r,eps1)          | applyEps(change,count,eps1::eps,epsrest,r::rest,done)=( print "lrr";(case (r,eps1)
238              of (E.Sum(c2,E.Prod(E.Epsilon eps2::s2)),_)=> let              of (E.Sum(c2,E.Prod(E.Epsilon eps2::s2)),_)=> let
# Line 248  Line 248 
248                  end                  end
249              | (E.Conv(v,vx, h ,d),E.Epsilon(i,j,k))=> let              | (E.Conv(v,vx, h ,d),E.Epsilon(i,j,k))=> let
250                  val change'= matchEps(0,d,[],[i,j,k])                  val change'= matchEps(0,d,[],[i,j,k])
251                  in (case change' of 1=>  (1,E.Const 0.0)                  in (case change' of 1=>  (1,E.Const 0)
252                      |_=>  applyEps(0,count,epsrest@[eps1],[],rest,done@[r]))                      |_=>  applyEps(0,count,epsrest@[eps1],[],rest,done@[r]))
253                  end                  end
254              |_=>applyEps(0,count,epsrest@[eps1],[],rest,done@[r])              |_=>applyEps(0,count,epsrest@[eps1],[],rest,done@[r])
# Line 337  Line 337 
337                | E.Prod(E.Epsilon(i,j,k)::E.Apply(E.Partial d,e)::es)=>let                | E.Prod(E.Epsilon(i,j,k)::E.Apply(E.Partial d,e)::es)=>let
338                   val change= matchEps(0,d,[],[i,j,k])                   val change= matchEps(0,d,[],[i,j,k])
339                   in case (change,es)                   in case (change,es)
340                  of (1,_) =>(changed:=true; E.Const 0.0)                  of (1,_) =>(changed:=true; E.Const 0)
341                      | (_,[]) =>E.Prod[E.Epsilon(i,j,k),rewriteBody (E.Apply(E.Partial d,e))]                      | (_,[]) =>E.Prod[E.Epsilon(i,j,k),rewriteBody (E.Apply(E.Partial d,e))]
342                      |(_,_)=> let                      |(_,_)=> let
343                          val a=rewriteBody(E.Prod([E.Apply(E.Partial d,e)]@ es))                          val a=rewriteBody(E.Prod([E.Apply(E.Partial d,e)]@ es))
# Line 348  Line 348 
348    
349                  val change= matchEps(0,d,[],[i,j,k])                  val change= matchEps(0,d,[],[i,j,k])
350                  in case (change,es)                  in case (change,es)
351                      of (1,_) =>(changed:=true; E.Const 0.0)                      of (1,_) =>(changed:=true; E.Const 0)
352                      | (_,[]) =>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)]
353                      | (_,_) =>let                      | (_,_) =>let
354                          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 358  Line 358 
358    
359    
360                | E.Prod[(E.Epsilon(e1,e2,e3)), E.Tensor(_,[E.V i1,E.V i2])]=>                | E.Prod[(E.Epsilon(e1,e2,e3)), E.Tensor(_,[E.V i1,E.V i2])]=>
361                      if(e2=i1 andalso e3=i2) then (changed :=true;E.Const(0.0))                      if(e2=i1 andalso e3=i2) then (changed :=true;E.Const(0))
362                      else body                      else body
363    
364    

Legend:
Removed from v.2552  
changed lines
  Added in v.2553

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