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-einHtM.sml
ViewVC logotype

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

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

revision 2524, Fri Jan 17 20:17:12 2014 UTC revision 2525, Tue Jan 21 19:14:22 2014 UTC
# Line 5  Line 5 
5      structure DstIL = MidIL      structure DstIL = MidIL
6      structure DstTy = MidILTypes      structure DstTy = MidILTypes
7      structure shift=shiftHtM      structure shift=shiftHtM
   
8      structure P=Printer      structure P=Printer
9       structure Var = MidIL.Var       structure Var = MidIL.Var
10    structure HVar = HighIL.Var    structure HVar = HighIL.Var
# Line 28  Line 27 
27  val counter=ref 0  val counter=ref 0
28    
29  (*How to create new ein variable*)  (*How to create new ein variable*)
30  fun fresh _=let  fun fresh ty=let
31      val ref x=counter      val ref x=counter
32      val m=x+1      val m=x+1
33      val x=DstIL.Var.new("Q" ^ Int.toString(m) ,DstTy.intTy)      val x=DstIL.Var.new("Q" ^ Int.toString(m) ,ty)
34      in (counter:=m;x) end      in (counter:=m;x) end
35    
36  fun createnewb (params,index,args,(id,e))=let  fun createnewb (params,index,args,(id,e))=let
# Line 46  Line 45 
45      in (id,a,args)      in (id,a,args)
46  end  end
47    
48    fun findOp e=(case e
49    of E.Neg _=>1
50    | E.Add _=>1
51    | E.Sub _=>1
52    | E.Prod _=>1
53    | E.Div _=>1
54    | E.Sum _ =>1
55    |  _=>0
56    (*end case*))
57    
58    
59    
60  (*Outside Operator is Neg*)  (*Outside Operator is Neg*)
61  fun handleNeg(params, index,e,args)=let  fun handleNeg(params, index,e1,args)=let
62      val id=ref (length params)      val id=ref (length params)
63      val ix=List.map (fn e=> E.V e)  index          val n=length index
64    
65            val ix=List.tabulate (n,fn v=> E.V(v))
66            fun mkTensor _=let val ref idx= id in (id:=(idx+1);E.Tensor(idx,ix)) end
67    
68            fun divsort(e)= let
69                val s=findOp e
70                in (case s
71                    of 0=>(e,[],[],[])
72                    | _=> let
73                        val q=fresh(DstTy.TensorTy(index))
74                        in (mkTensor 0, [(q, e)],[E.TEN(1,index)],[q]) end
75                    (*end case*))
76                end
77    
78                val (lft1, newbies1,params1,args1)=divsort(e1)
79                val (p',b',args')= shift.cleanParams(E.Neg(lft1),params@params1, args@args1)
80                val z1=List.map (fn(e)=> createnewb(params,index,args,e) ) newbies1
81                in
82                    (z1,(p',b',args'))
83                end
84    
85    
86    
87    (*let
88        val id=ref (length params)
89            val n=length index
90            val ix=List.tabulate (n,fn v=> E.V(v))
91      fun mkTensor _=let val ref idx= id in (id:=(idx+1);E.Tensor(idx,ix)) end      fun mkTensor _=let val ref idx= id in (id:=(idx+1);E.Tensor(idx,ix)) end
92    
93      fun replace e'= let      fun replace e'= let
94          val q=fresh 1          val q=fresh(DstTy.TensorTy(index))
95          val t=mkTensor 0          val t=mkTensor 0
96          val newbie=createEin( params,index,e')          val newbie=createEin( params,index,e')
97          in ([(q,newbie,args)],(params@[E.TEN 1], E.Neg t,[q]))          in ([(q,newbie,args)],(params@[E.TEN(1,index)], E.Neg t,[q]))
98          end          end
99    
100        fun sort e1= (case e1
101      in  (case e          of E.Add  _=> replace e1
102          of E.Add  _=> replace e          | E.Sub _=> replace e1
103          | E.Sub _=> replace e          | E.Prod _=> replace e1
104          | E.Prod _=> replace e          | E.Div _=> replace e1
105          | E.Div _=> replace e          | E.Sum _=> replace e1
106          | E.Sum _=> replace e          | _=>([],params, E.Neg e1, args)
         | _=>([],(params, e, args))  
107          (*end case*))          (*end case*))
108    
109        val (newbies1,params1,lft1,args1)=sort e
110        val (p',b',args')= shift.cleanParams(lft1,params@params1, args@args1)
111        val z1=List.map (fn(e)=> createnewb(params,index,args,e) ) newbies1
112        in
113            (z1,(p',b',args'))
114      end      end
115    
116    *)
117    
118    
119    
120    
# Line 83  Line 126 
126      fun mkTensor _=let val ref idx= id in (id:=(idx+1);[E.Tensor(idx,ix)]) end      fun mkTensor _=let val ref idx= id in (id:=(idx+1);[E.Tensor(idx,ix)]) end
127    
128      fun foundOp(e,es,(lft,newbies,params,args))=let      fun foundOp(e,es,(lft,newbies,params,args))=let
129          val q=fresh 1          val q=fresh(DstTy.TensorTy(index))
130          in  (es,(lft@(mkTensor 0),  newbies@[(q, e)],params@[E.TEN 1],args@[q]))          in  (es,(lft@(mkTensor 0),  newbies@[(q, e)],params@[E.TEN(1,index)],args@[q]))
131          end          end
132    
133    
# Line 110  Line 153 
153    
154    
155    
156  fun findOp e=(case e  
     of E.Neg _=>1  
     | E.Add _=>1  
     | E.Sub _=>1  
     | E.Prod _=>1  
     | E.Div _=>1  
     | E.Sum _ =>1  
     |  _=>0  
 (*end case*))  
157    
158    
159  (*Outside Operator is Sub*)  (*Outside Operator is Sub*)
# Line 135  Line 170 
170              of 0=>(e,[],[],[])              of 0=>(e,[],[],[])
171    
172              | _=> let              | _=> let
173                  val q=fresh 1                  val q=fresh(DstTy.TensorTy(index))
174                  in (mkTensor 0, [(q, e)],[E.TEN 1],[q]) end                  in (mkTensor 0, [(q, e)],[E.TEN(1,index)],[q]) end
175              (*end case*))              (*end case*))
176          end          end
177    
# Line 162  Line 197 
197              of 0=>(e,[],[],[])              of 0=>(e,[],[],[])
198    
199              | _=> let              | _=> let
200                  val q=fresh 1                  val q=fresh(DstTy.TensorTy(index))
201                  in (nextfn 0, [(q, e)],[E.TEN 1],[q]) end                  in (nextfn 0, [(q, e)],[E.TEN(1,index)],[q]) end
202              (*end case*))              (*end case*))
203          end          end
204    
# Line 179  Line 214 
214    
215    
216    
217    
218  fun hProd(params, index,list1,args)=let  fun hProd(params, index,list1,args)=let
219      val id=ref (length params)      val id=ref (length params)
220      val n=length index      val n=length index
# Line 190  Line 226 
226    
227    
228      fun foundOp (e,es,(lft,newbies, params, args))=let      fun foundOp (e,es,(lft,newbies, params, args))=let
229          val q=fresh 1  
230          val (p,ix,e')=mkPTensor e          val ref idx= id
231          in (es,(lft@p, newbies@[(q, e',ix)],params@[E.TEN 1],args@[q])) end          val (ix,index',e')=shift.cleanIndex(e, n, index)
232            val (p,ix,e')=([E.Tensor(idx,ix)],index',e')
233             val q=fresh(DstTy.TensorTy(ix))
234            in (es,(lft@p, newbies@[(q, e',ix)],params@[E.TEN(1,ix)],args@[q])) end
235    
236    
237      fun sort([], m)=m      fun sort([], m)=m

Legend:
Removed from v.2524  
changed lines
  Added in v.2525

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