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-to-mid/split.sml
ViewVC logotype

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

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

revision 2866, Thu Feb 5 22:39:59 2015 UTC revision 2867, Tue Feb 10 06:52:58 2015 UTC
# Line 61  Line 61 
61      *creates new param and replacement tensor for the original ein_exp      *creates new param and replacement tensor for the original ein_exp
62      *)      *)
63      fun lift(name,e,params,index,sx,args)=let      fun lift(name,e,params,index,sx,args)=let
64    
65          val (tshape,sizes,body)=cleanIndex(e,index,sx)          val (tshape,sizes,body)=cleanIndex(e,index,sx)
66          val id=length(params)          val id=length(params)
67          val Rparams=params@[E.TEN(1,sizes)]          val Rparams=params@[E.TEN(1,sizes)]
# Line 83  Line 84 
84          | E.Apply _   => 0          | E.Apply _   => 0
85          | E.Lift _    => 0          | E.Lift _    => 0
86          | E.Neg _     => 1          | E.Neg _     => 1
87            | E.Sqrt _    => 1
88          | E.Add _     => 1          | E.Add _     => 1
89          | E.Sub _     => 1          | E.Sub _     => 1
90          | E.Prod _    => 1          | E.Prod _    => 1
# Line 141  Line 143 
143              (einapp,code)              (einapp,code)
144          end          end
145    
146        (* handleSqrt:var*ein_exp *params*index*args-> (var*einap)*code
147        * calls rewriteOp() lift  on ein_exp
148        *)
149        fun handleSqrt(y,e1,params,index,args)=let
150            val (e1',params',args',code)=  rewriteOp(DstV.name y, e1,params,index,[],args)
151            val body =E.Sqrt e1'
152            val einapp= rewriteOrig(y,body,params',index,[],args')
153        in
154            (einapp,code)
155        end
156    
157    
158     (* handleSub:var*ein_exp*ein_exp *params*index*args-> (var*einap)*code     (* handleSub:var*ein_exp*ein_exp *params*index*args-> (var*einap)*code
159      * calls rewriteOps() lift  on ein_exp      * calls rewriteOps() lift  on ein_exp
160      *)      *)
# Line 202  Line 216 
216        note we leave summation around probe exp        note we leave summation around probe exp
217      *)      *)
218      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
219            val _=testp["\n split \n ",P.printbody body]
220          val zero=   (setEinZero y,[])          val zero=   (setEinZero y,[])
221          val default=((y,einapp),[])          val default=((y,einapp),[])
222          val sumIndex=ref []          val sumIndex=ref []
223          val str="Poorly formed EIN operator. Argument needs to be applied in High-IL"          val str="Poorly formed EIN operator. Argument needs to be applied in High-IL"^(P.printbody body)
224          fun rewrite b=(case b          fun rewrite b=(case b
225              of E.Probe (E.Conv _,_)   => default              of E.Probe (E.Conv _,_)   => default
226                | E.Probe(E.Field _,_)      => zero
227              | E.Probe _               => raise Fail str              | E.Probe _               => raise Fail str
228              | E.Conv _                => zero              | E.Conv _                => zero
229              | E.Field _               => zero              | E.Field _               => zero
# Line 219  Line 235 
235              | E.Tensor _              => default              | E.Tensor _              => default
236              | E.Const _               => default              | E.Const _               => default
237              | E.Neg e1                => handleNeg(y,e1,params,index,args)              | E.Neg e1                => handleNeg(y,e1,params,index,args)
238                | E.Sqrt e1               => handleSqrt(y,e1,params,index,args)
239              | E.Sub (e1,e2)           => handleSub(y,e1,e2,params,index,args)              | E.Sub (e1,e2)           => handleSub(y,e1,e2,params,index,args)
240              | E.Div (e1,e2)           => handleDiv(y,e1,e2,params,index,args)              | E.Div (e1,e2)           => handleDiv(y,e1,e2,params,index,args)
241              | E.Sum(_,E.Prod[E.Eps2 _, E.Probe(E.Conv _,_)  ])      => default              | E.Sum(_,E.Prod[E.Eps2 _, E.Probe(E.Conv _,_)  ])      => default
# Line 261  Line 278 
278          end          end
279    
280      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
         (*val (_,_,body')=cleanIndex(body,index,[])  
         val einapp1= assignEinApp(y,params,index,body',args)  
   
         val (_,sizes,body')=cleanIndex(body,index,[])  
         val einapp1= assignEinApp(y,params,index,body',args)  
         val a=testp["\n rewriten einapp\n \t",printEINAPP einapp1]  
         *)  
281          val (einapp2,newbies2)=split (y,einapp)          val (einapp2,newbies2)=split (y,einapp)
282      in      in
283          iterMultiple(einapp2,newbies2)          iterMultiple(einapp2,newbies2)

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

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