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 2603, Thu Apr 24 03:58:37 2014 UTC revision 2605, Wed Apr 30 01:46:09 2014 UTC
# Line 7  Line 7 
7      structure P=Printer      structure P=Printer
8      structure F=Filter      structure F=Filter
9      structure G=EpsHelpers      structure G=EpsHelpers
10    
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
15    
16    
17    
18    fun prodAppPartial(es,p1)=(case es
19  fun prodAppPartial ([e1],p1)= E.Apply(E.Partial p1,e1)      of []      => raise Fail "Empty App Partial"
20    | prodAppPartial((e1::e2),p1)=let      | [e1]     => E.Apply(E.Partial p1,e1)
21        | (e1::e2) => let
22      val l= prodAppPartial(e2,p1)      val l= prodAppPartial(e2,p1)
23      val (_,e2')= F.mkProd[e1,l]      val (_,e2')= F.mkProd[e1,l]
24      val (_,e1')=F.mkProd(e2@ [E.Apply(E.Partial p1, e1)])      val (_,e1')=F.mkProd(e2@ [E.Apply(E.Partial p1, e1)])
25      in      in
26          E.Add[e1',e2']          E.Add[e1',e2']
27      end      end
28        (* end case *))
29    
30  (*rewritten Sum*)  (*rewritten Sum*)
31  fun mkSum(c1,e1)=(case e1  fun mkSum(c1,e1)=(case e1
# Line 60  Line 63 
63      | E.Apply(E.Partial d2,e2)  => let      | E.Apply(E.Partial d2,e2)  => let
64                          val E.Partial d3=d1                          val E.Partial d3=d1
65                          in (1,E.Apply(E.Partial(d3@d2),e2)) end                          in (1,E.Apply(E.Partial(d3@d2),e2)) end
66        | E.Apply _   => raise Fail" Apply of non-Partial expression"
67      | E.Neg e2    => (1,E.Neg(E.Apply(d1,e2)))      | E.Neg e2    => (1,E.Neg(E.Apply(d1,e2)))
68      | E.Sum(c2,e2)=> (1,E.Sum(c2,E.Apply(d1,e2)))      | E.Sum(c2,e2)=> (1,E.Sum(c2,E.Apply(d1,e2)))
69      | E.Add e     => (1,E.Add (List.map (fn(a)=>E.Apply(d1,a)) e))      | E.Add e     => (1,E.Add (List.map (fn(a)=>E.Apply(d1,a)) e))
# Line 107  Line 111 
111    
112    
113    
  (*print summation range*)  
 fun handleIndex e= (case e  
     of E.C(cx)=> String.concat["'",Int.toString(cx),"'"]  
     |  E.V(ix)=> Int.toString(ix)  
     (*end case *))  
114    
 fun handleSumRange (mu,lb,ub)= print(String.concat[(handleIndex mu),"[",Int.toString(lb),"-",Int.toString(ub),"]"])  
 fun printSx e=(print "\n $";List.map handleSumRange e; print "$")  
115    
116  fun K gg=String.concatWith "," (List.map (fn (E.V e1,_,_)=> (Int.toString(e1))) gg)  (*fun K gg=String.concatWith "," (List.map (fn (E.V e1,_,_)=> (Int.toString(e1))) gg)*)
117    fun K _= " "
118  fun Kt gg=List.map (fn e1=> print(String.concat["[", (K e1),"]"])) gg  fun Kt gg=List.map (fn e1=> print(String.concat["[", (K e1),"]"])) gg
119    
120  (*Apply normalize to each term in product list  (*Apply normalize to each term in product list
# Line 126  Line 124 
124        val changed = ref false        val changed = ref false
125        val sumIndex=ref []        val sumIndex=ref []
126    
127        fun rewriteBody body =        fun rewriteBody body =(case body
             (case body  
128               of E.Const _=> body               of E.Const _=> body
129                | E.Tensor _ =>body                | E.Tensor _ =>body
130                | E.Field _=> body                | E.Field _=> body
# Line 162  Line 159 
159                  val (c,e3)=mkapply(E.Partial d1,e2)                  val (c,e3)=mkapply(E.Partial d1,e2)
160                  in (case c of 1=>(changed:=true;e3)| _ =>e3 (*end case*))                  in (case c of 1=>(changed:=true;e3)| _ =>e3 (*end case*))
161                  end                  end
162                | E.Apply(E.Prod e1,e2)=>E.Apply(E.Partial(F.filterPartial e1), rewriteBody e2)              | E.Apply _=> raise Fail" Not well-formed Apply expression"
163                | E.Sum([],e)=> (changed:=true;rewriteBody e)                | E.Sum([],e)=> (changed:=true;rewriteBody e)
164                | E.Sum(c,e)=>let                | E.Sum(c,e)=>let
165                  val ref x=sumIndex                  val ref x=sumIndex
# Line 185  Line 182 
182                  end                  end
183    
184                  (*************Product**************)                  (*************Product**************)
185                  | E.Prod [] => raise Fail"missing elements in product"
186                | E.Prod [e1] => rewriteBody e1                | E.Prod [e1] => rewriteBody e1
187                | E.Prod((E.Div(e2,e3))::e4)=>                | E.Prod((E.Div(e2,e3))::e4)=>
188                  (changed :=true; E.Div(E.Prod([e2]@e4), e3 ))                  (changed :=true; E.Div(E.Prod([e2]@e4), e3 ))
# Line 201  Line 199 
199    
200                  (*************Product EPS **************)                  (*************Product EPS **************)
201    
                 (* Apply (d, e) shoudl be convereted to Conv operator *)  
202                | 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
203                   val change= G.matchEps(0,d,[],[i,j,k])                   val change= G.matchEps(0,d,[],[i,j,k])
204                   in case (change,es)                   in case (change,es)
# Line 301  Line 298 
298    
299                             in                             in
300                if !changed                if !changed
301                  then (print(String.concat["\nN =>",Int.toString(count),"--",P.printbody(body')]);                  then let
302                  changed := false ;sumIndex:=[];loop(body',count+1))                      val _= (case testing
303                            of 1=> (print(String.concat["\nN =>",Int.toString(count),"--",P.printbody(body')]);1)
304                            | _=> 1)
305                        in
306                            (changed := false ;sumIndex:=[];loop(body',count+1))
307                        end
308                  else (body',count)                  else (body',count)
309              end              end
310    
311      val (b,count) = loop(body,0)      val (b,count) = loop(body,0)
312      val _ = print(String.concat["\n out of normalize \n",P.printbody(b),"\n Final CounterXX:",Int.toString(count),"\n\n"])      val _ =(case testing
313            of 1 => (print(String.concat["\n out of normalize \n",P.printbody(b),"\n    Final CounterXX:",Int.toString(count),"\n\n"]);1)
314            | _=> 1
315            (*end case*))
316      in      in
317                  (Ein.EIN{params=params, index=index, body=b},count)                  (Ein.EIN{params=params, index=index, body=b},count)
318      end      end

Legend:
Removed from v.2603  
changed lines
  Added in v.2605

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