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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/high-to-mid/clean-params.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/high-to-mid/clean-params.sml

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

revision 3561, Sun Jan 10 15:18:34 2016 UTC revision 3562, Sun Jan 10 16:56:09 2016 UTC
# Line 20  Line 20 
20    end = struct    end = struct
21    
22      structure E = Ein      structure E = Ein
23      structure DstIL = MidIL      structure DstIR = MidIR
24      structure DstV = DstIL.Var      structure DstV = DstIR.Var
25    
26  (* FIXME *)  (* FIXME *)
27      fun insert (key, value) d =fn s =>      fun insert (key, value) d =fn s =>
# Line 32  Line 32 
32    
33      fun err str=raise Fail str      fun err str=raise Fail str
34      fun iTos i =Int.toString i      fun iTos i =Int.toString i
35      fun setEin(params,index,body)=Ein.EIN{params=params, index=index, body=body}      fun cnt (DstIR.V{useCnt, ...}) = !useCnt
36      fun cnt(DstIL.V{useCnt, ...}) = !useCnt      fun incUse (DstIR.V{useCnt, ...}) = (useCnt := !useCnt + 2)
     fun incUse (DstIL.V{useCnt, ...}) = (useCnt := !useCnt + 2)  
37      fun use x = (incUse x; x)      fun use x = (incUse x; x)
38      fun getUse e=String.concat["\n\t Varname "^DstIL.Var.name e," -use ",iTos(cnt e)]      fun getUse e=String.concat["\n\t Varname "^DstIR.Var.name e," -use ",iTos(cnt e)]
     fun assignEinApp(y,params,index,body,args)= (y,DstIL.EINAPP(setEin(params,index,body),args))  
39    
40      (*dictionary to lookup mapp*)      (*dictionary to lookup mapp*)
41      fun lkupIndexSingle(e1,mapp,str)=(case (lookup e1 mapp)      fun lkupIndexSingle(e1,mapp,str)=(case (lookup e1 mapp)
# Line 50  Line 48 
48      * mapp id the dictionary of the new ids      * mapp id the dictionary of the new ids
49      *)      *)
50      fun mkMapp(countmapp,params,args)=let      fun mkMapp(countmapp,params,args)=let
51          val n=(length params)            val n = length params
52          val ix=List.tabulate(n, (fn e=> e))            val ix = List.tabulate(n, fn e => e)
53          fun m([],_,mapp,p, _, a, _)=(mapp,p,a)          fun m([],_,mapp,p, _, a, _)=(mapp,p,a)
54            | m(i::ix,j,mapp,p, p1::params, a, a1::arg)=(case (lookup i countmapp)            | m(i::ix,j,mapp,p, p1::params, a, a1::arg)=(case (lookup i countmapp)
55              of SOME _=>let              of SOME _=>let
                 val _ =testp["\nInserting into dictionary",iTos i,"=>",iTos j]  
56                  val mapp2=insert(i,j) mapp                  val mapp2=insert(i,j) mapp
57                  in                  in
58                      m(ix,j+1,mapp2,p@[p1],params, a@[a1],arg)                      m(ix,j+1,mapp2,p@[p1],params, a@[a1],arg)
59                  end                  end
60              | _ =>  m(ix,j,mapp,p, params, a, arg)              | _ =>  m(ix,j,mapp,p, params, a, arg)
61              (*end case*))              (*end case*))
62          | m (_,_,_,_,_,_,[]) = raise Fail (String.concat["incorrect number of params:more params:",Int.toString(n),              | m (_, _, _, _, _, _, []) = raise Fail (String.concat[
63              "args:",Int.toString(length(args))])                    "incorrect number of params:more params:", Int.toString n,
64                      " args:", Int.toString(length args)
65                    ])
66          | m (_,_,_,_,[],_,_) = raise Fail ("incorrect number of params:more args")          | m (_,_,_,_,[],_,_) = raise Fail ("incorrect number of params:more args")
         (*| m _ = raise Fail ("incorrect number of params:unsure")*)  
         val _ =testp["ix created up to",iTos(n),"length of params",  
                 iTos(length params),"lengths of args",iTos(length args)]  
         val  (mapp,Nparams,Nargs)=m(ix, 0, empty, [],params,[],args)  
67          in          in
68              (mapp,Nparams,Nargs)              m (ix, 0, empty, [], params, [], args)
69          end          end
70    
71      (*getIdCount: ein_exp ->dict      (*getIdCount: ein_exp ->dict
72      *rewrite ids in exp using mapp      *rewrite ids in exp using mapp
73      *)      *)
74      fun getIdCount b =let      fun getIdCount b =let
75          fun rewriteExp(b,mapp)=let            fun rewrite (b, mapp) = (case b
76              fun iterList([],mapp)=mapp                   of E.Tensor(id, _) => insert(id,1) mapp
             | iterList(e1::es,mapp)=let  
                 val mapp1=rewriteExp(e1,mapp)  
                 in iterList(es,mapp1) end  
             in (case b  
                 of E.B _                 => mapp  
                 | E.Tensor(id,_)       => insert(id,1) mapp  
                 | E.G _                => mapp  
                 | E.Field _            => mapp  
                 | E.Lift _             => mapp  
77                  | E.Conv(v,_,h,_)      => insert(h,1) (insert(v,1) mapp)                  | E.Conv(v,_,h,_)      => insert(h,1) (insert(v,1) mapp)
78                  | E.Partial _          => mapp                    | E.Probe(e1, e2) => rewrite (e2, rewrite (e1, mapp))
79                  | E.Apply _            => mapp                    | E.Value _ => err "should not be here"
                 | E.Probe(e1,e2)       => iterList ([e1,e2],mapp)  
                 | E.Value _            => err "Should not be here"  
80                  | E.Img _              => err  "should not be here"                  | E.Img _              => err  "should not be here"
81                  | E.Krn _              => err "Should not be here"                    | E.Krn _ => err "should not be here"
82                  | E.Sum(_ ,e1)         => rewriteExp (e1,mapp)                    | E.Sum(_, e1) => rewrite (e1, mapp)
83                  | E.Op1(_,e1)          => rewriteExp (e1,mapp)                    | E.Op1(_, e1) => rewrite (e1, mapp)
84                  | E.Op2(_,e1,e2)       => iterList ([e1,e2],mapp)                    | E.Op2(_, e1, e2) => rewrite (e2, rewrite (e1, mapp))
85                  | E.Opn(_, es)         => iterList (es,mapp)                    | E.Opn(_, es) => List.foldl rewrite mapp ex
86                      | _ => mapp
87                  (*end case*))                  (*end case*))
88              end              end
89      in      in
90          rewriteExp(b,empty)              rewrite (b, empty)
91      end      end
92    
93      (*rewriteParam:dict*ein_exp ->ein_exp      (*rewriteParam:dict*ein_exp ->ein_exp
# Line 111  Line 96 
96      fun rewriteParam(mapp,e)=let      fun rewriteParam(mapp,e)=let
97          fun getId id  = lkupIndexSingle(id,mapp,"Mapp doesn't have Param Id ")          fun getId id  = lkupIndexSingle(id,mapp,"Mapp doesn't have Param Id ")
98          fun rewriteExp b=(case b          fun rewriteExp b=(case b
99              of  E.B _              => b                   of E.Tensor(id, alpha) => E.Tensor(getId id, alpha)
100              | E.Tensor(id,alpha)   => E.Tensor(getId id, alpha)                    | E.Probe(E.Conv(v, alpha, h, dx), t) =>
101              | E.G _ => b                        E.Probe(E.Conv(getId v, alpha,getId h,dx),rewriteExp t)
             | E.Field _            => raise Fail "should have been swept"  
             | E.Lift _             => raise Fail "should have been swept"  
             | E.Conv _             => raise Fail "should have been swept"  
             | E.Partial _          => raise Fail "should have been swept"  
             | E.Apply _            => raise Fail "should have been swept"  
             | E.Probe(E.Conv(v,alpha,h,dx),t)  
                                   => E.Probe(E.Conv(getId v, alpha,getId h,dx),rewriteExp t)  
             | E.Probe _            => raise Fail "should have been swept"  
             | E.Value e1           => raise Fail"Should not be here"  
             | E.Img _              => raise Fail "should not be here"  
             | E.Krn _              => raise Fail"Should not be here"  
102              | E.Sum(sx ,e1)        => E.Sum(sx,rewriteExp e1)              | E.Sum(sx ,e1)        => E.Sum(sx,rewriteExp e1)
103              | E.Op1(op1, e1)       => E.Op1(op1,rewriteExp e1)              | E.Op1(op1, e1)       => E.Op1(op1,rewriteExp e1)
104              | E.Op2(op2, e1,e2)    => E.Op2(op2,rewriteExp e1,rewriteExp e2)              | E.Op2(op2, e1,e2)    => E.Op2(op2,rewriteExp e1,rewriteExp e2)
# Line 140  Line 114 
114      fun clean (y, body, params, index, args) = let      fun clean (y, body, params, index, args) = let
115          val countmapp=getIdCount body          val countmapp=getIdCount body
116          val (mapp,Nparams,Nargs)=mkMapp(countmapp,params,args)          val (mapp,Nparams,Nargs)=mkMapp(countmapp,params,args)
117          val Nargs =List.map (fn e=> use e) Nargs            val Nargs = List.map use Nargs
118          val Nbody=rewriteParam(mapp,body)          val Nbody=rewriteParam(mapp,body)
         val einapp= assignEinApp(y,Nparams,index,Nbody,Nargs)  
119          in          in
120              einapp              (y, DstIR.EINAPP(Ein.EIN{params=Nparams, index=index, body=Nbody}, Nargs))
121          end          end
122    
123    end (* CleanParam *)    end (* CleanParam *)

Legend:
Removed from v.3561  
changed lines
  Added in v.3562

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