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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/high-to-mid/split.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/high-to-mid/split.sml

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

revision 2867, Tue Feb 10 06:52:58 2015 UTC revision 2870, Wed Feb 25 21:47:43 2015 UTC
# Line 40  Line 40 
40      fun cleanIndex e =cleanI.cleanIndex e      fun cleanIndex e =cleanI.cleanIndex e
41      fun printEINAPP e=MidToString.printEINAPP e      fun printEINAPP e=MidToString.printEINAPP e
42      fun isZero e=handleE.isZero e      fun isZero e=handleE.isZero e
43        fun sweep e=handleE.sweep e
44      fun itos i =Int.toString i      fun itos i =Int.toString i
45      fun err str=raise Fail str      fun err str=raise Fail str
46      val cnt = ref 0      val cnt = ref 0
# Line 85  Line 86 
86          | E.Lift _    => 0          | E.Lift _    => 0
87          | E.Neg _     => 1          | E.Neg _     => 1
88          | E.Sqrt _    => 1          | E.Sqrt _    => 1
89    | E.PowInt _    => 1
90    | E.PowReal _    => 1
91          | E.Add _     => 1          | E.Add _     => 1
92          | E.Sub _     => 1          | E.Sub _     => 1
93          | E.Prod _    => 1          | E.Prod _    => 1
# Line 155  Line 158 
158      end      end
159    
160    
161    (* handlePowInt:var*ein_exp *params*index*args-> (var*einap)*code
162    * calls rewriteOp() lift  on ein_exp
163    *)
164    fun handlePowInt(y,(e1,n1),params,index,args)=let
165    val (e1',params',args',code)=  rewriteOp(DstV.name y, e1,params,index,[],args)
166    val body =E.PowInt(e1',n1)
167    val einapp= rewriteOrig(y,body,params',index,[],args')
168    in
169    (einapp,code)
170    end
171    
172    
173    (* handlePowReal:var*ein_exp *params*index*args-> (var*einap)*code
174    * calls rewriteOp() lift  on ein_exp
175    *)
176    fun handlePowReal(y,(e1,n1),params,index,args)=let
177    val (e1',params',args',code)=  rewriteOp(DstV.name y, e1,params,index,[],args)
178    val body =E.PowReal(e1',n1)
179    val einapp= rewriteOrig(y,body,params',index,[],args')
180    in
181    (einapp,code)
182    end
183    
184    
185     (* handleSub:var*ein_exp*ein_exp *params*index*args-> (var*einap)*code     (* handleSub:var*ein_exp*ein_exp *params*index*args-> (var*einap)*code
186      * calls rewriteOps() lift  on ein_exp      * calls rewriteOps() lift  on ein_exp
187      *)      *)
# Line 216  Line 243 
243        note we leave summation around probe exp        note we leave summation around probe exp
244      *)      *)
245      fun split(y,einapp as DstIL.EINAPP(Ein.EIN{params, index, body},args))=let      fun split(y,einapp as DstIL.EINAPP(Ein.EIN{params, index, body},args))=let
246          val _=testp["\n split \n ",P.printbody body]  
247          val zero=   (setEinZero y,[])          val zero=   (setEinZero y,[])
248          val default=((y,einapp),[])          val default=((y,einapp),[])
249          val sumIndex=ref []          val sumIndex=ref []
250          val str="Poorly formed EIN operator. Argument needs to be applied in High-IL"^(P.printbody body)          val str="Poorly formed EIN operator. Argument needs to be applied in High-IL"^(P.printbody body)
251          fun rewrite b=(case b          fun rewrite b=(case b
252              of E.Probe (E.Conv _,_)   => default              of E.Probe (E.Conv _,_)   => default
253              | E.Probe(E.Field _,_)      => zero              | E.Probe(E.Field _,_)    => raise Fail str
254              | E.Probe _               => raise Fail str              | E.Probe _               => raise Fail str
255              | E.Conv _                => zero              | E.Conv _                => zero
256              | E.Field _               => zero              | E.Field _               => zero
# Line 234  Line 261 
261              | E.Eps2 _                => default              | E.Eps2 _                => default
262              | E.Tensor _              => default              | E.Tensor _              => default
263              | E.Const _               => default              | E.Const _               => default
264                | E.ConstR _               => default
265              | E.Neg e1                => handleNeg(y,e1,params,index,args)              | E.Neg e1                => handleNeg(y,e1,params,index,args)
266              | E.Sqrt e1               => handleSqrt(y,e1,params,index,args)              | E.Sqrt e1               => handleSqrt(y,e1,params,index,args)
267                | E.PowInt e1               => handlePowInt(y,e1,params,index,args)
268                | E.PowReal e1               => handlePowReal(y,e1,params,index,args)
269              | E.Sub (e1,e2)           => handleSub(y,e1,e2,params,index,args)              | E.Sub (e1,e2)           => handleSub(y,e1,e2,params,index,args)
270              | E.Div (e1,e2)           => handleDiv(y,e1,e2,params,index,args)              | E.Div (e1,e2)           => handleDiv(y,e1,e2,params,index,args)
271              | E.Sum(_,E.Prod[E.Eps2 _, E.Probe(E.Conv _,_)  ])      => default              | E.Sum(_,E.Prod[E.Eps2 _, E.Probe(E.Conv _,_)  ])      => default
# Line 278  Line 308 
308          end          end
309    
310      fun iterSplit(y,einapp as DstIL.EINAPP(Ein.EIN{params, index, body},args))=let      fun iterSplit(y,einapp as DstIL.EINAPP(Ein.EIN{params, index, body},args))=let
311          val (einapp2,newbies2)=split (y,einapp)          (*)val _ =print(String.concat["\n******\n",printEINAPP (y,einapp)])*)
312            val b=handleE.sweep body
313            val einapp2=assignEinApp(y,params,index,b,args)
314            val (einapp3,newbies2)=split einapp2
315      in      in
316          iterMultiple(einapp2,newbies2)          iterMultiple(einapp3,newbies2)
317      end      end
318    
319      (* gettest:code*code=> (code*code)      (* gettest:code*code=> (code*code)
# Line 292  Line 325 
325              val star="\n************* SPLIT********\n"              val star="\n************* SPLIT********\n"
326              val _ =print(String.concat[star,"\n","start get test",printEINAPP einapp])              val _ =print(String.concat[star,"\n","start get test",printEINAPP einapp])
327              val (einapp2,newbies)=iterSplit(einapp)              val (einapp2,newbies)=iterSplit(einapp)
328              val a=printEINAPP einapp2              (*val a=printEINAPP einapp2
329              val b=String.concatWith",\n\t"(List.map printEINAPP newbies)              val b=String.concatWith",\n\t"(List.map printEINAPP newbies)
330              val _ =print(String.concat[printEINAPP einapp,"=>",a," newbies\n\t",b, "\n",a,star])              val _ =print(String.concat[printEINAPP einapp,"=>",a," newbies\n\t",b, "\n",a,star])*)
331              in              in
332                  (einapp2,newbies)                  (einapp2,newbies)
333              end              end

Legend:
Removed from v.2867  
changed lines
  Added in v.2870

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