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

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

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

revision 3472, Tue Dec 1 18:45:25 2015 UTC revision 3503, Thu Dec 17 23:13:57 2015 UTC
# Line 46  Line 46 
46      val constflag=true      val constflag=true
47      val detflag =true      val detflag =true
48      val detsumflag=true      val detsumflag=true
49        fun incUse (DstIL.V{useCnt, ...}) = (useCnt := !useCnt + 1)
50        fun decUse (DstIL.V{useCnt, ...}) = (useCnt := !useCnt - 1)
51    
52      val cnt = ref 0      val cnt = ref 0
53      fun transformToIndexSpace e=T.transformToIndexSpace e      fun transformToIndexSpace e=T.transformToIndexSpace e
# Line 353  Line 354 
354    
355          val (_,(lhs0,codeAll))= (case valnumflag          val (_,(lhs0,codeAll))= (case valnumflag
356              of false    => (fieldset,(lhs1, reconstruction(dx,(code1,body1,[]))))              of false    => (fieldset,(lhs1, reconstruction(dx,(code1,body1,[]))))
357              | true      => (case  (einSet.rtnVarN(fieldset,code1))              | true      => (case  (einVarSet.rtnVarN(fieldset,code1))
358                  of (fieldset,NONE)     => (fieldset,(lhs1, reconstruction(dx,(code1,body1,[]))))                  of (fieldset,NONE)     => (fieldset,(lhs1, reconstruction(dx,(code1,body1,[]))))
359                  | (fieldset,SOME m)   =>  (fieldset,(m,[]))                  | (fieldset,SOME m)   =>  (fieldset,(m,[]))
360                  (*end case*))                  (*end case*))
# Line 379  Line 380 
380      * Looks to see if the expression has a probe. If so, replaces it.      * Looks to see if the expression has a probe. If so, replaces it.
381      * Note how we keeps eps expressions so only generate pieces that are used      * Note how we keeps eps expressions so only generate pieces that are used
382      *)      *)
383      fun expandEinOp( e as (y, DstIL.EINAPP(ein,args)),fieldset)=let      fun expandEinOp( e0 as (y, DstIL.EINAPP(ein,args)),fieldset,varset)=let
384          fun rewriteBody(p as E.Probe(E.Conv(_,alpha,_,dx),_))= (case (detflag,alpha,dx)          fun rewriteBody(e,p as E.Probe(E.Conv(_,alpha,_,dx),_))= (case (detflag,alpha,dx)
385              of (true,[E.C(_,true), E.V 0],[])            => getF(e,fieldset,[3],1)              of (true,[E.C(_,true), E.V 0],[])            => getF(e,fieldset,[3],1)
386              | (true,[E.C(_,true), E.V 0],[E.V 1])        => getF(e,fieldset,[3],2)              | (true,[E.C(_,true), E.V 0],[E.V 1])        => getF(e,fieldset,[3],2)
387              | (true,[E.C(_,true), E.V 0],[E.V 1,E.V 2])  => getF(e,fieldset,[3],3)              | (true,[E.C(_,true), E.V 0],[E.V 1,E.V 2])  => getF(e,fieldset,[3],3)
# Line 390  Line 391 
391              | (true,[E.C(_,true)],[E.V 0,E.V 1,E.V 2])   => getF(e,fieldset,[3],3)              | (true,[E.C(_,true)],[E.V 0,E.V 1,E.V 2])   => getF(e,fieldset,[3],3)
392              | _                                          => reconstruction(dx,(e,p,[]))              | _                                          => reconstruction(dx,(e,p,[]))
393              (*end case*))              (*end case*))
394          | rewriteBody(E.Sum(sx,p as E.Probe(E.Conv(_,alpha,_,dx),_)))= (case (detsumflag,sx,alpha,dx)          | rewriteBody(e,E.Sum(sx,p as E.Probe(E.Conv(_,alpha,_,dx),_)))= (case (detsumflag,sx,alpha,dx)
395              of (true,[(E.V 0,0,_)],[E.V 0 ,E.V 0],[])              => getF(e,fieldset,[3,3],0)              of (true,[(E.V 0,0,_)],[E.V 0 ,E.V 0],[])              => getF(e,fieldset,[3,3],0)
396              | (true,[(E.V 1,0,_)],[E.V 1 ,E.V 1],[E.V 0])          => getF(e,fieldset,[3,3],1)              | (true,[(E.V 1,0,_)],[E.V 1 ,E.V 1],[E.V 0])          => getF(e,fieldset,[3,3],1)
397              | (true,[(E.V 2,0,_)],[E.V 2 ,E.V 2],[E.V 0,E.V 1])    => getF(e,fieldset,[3,3],2)              | (true,[(E.V 2,0,_)],[E.V 2 ,E.V 2],[E.V 0,E.V 1])    => getF(e,fieldset,[3,3],2)
# Line 398  Line 399 
399              | (_,_,[],_)                                => reconstruction(dx,(e,p,sx))              | (_,_,[],_)                                => reconstruction(dx,(e,p,sx))
400              | _                                         => replaceProbe(e,p, sx)              | _                                         => replaceProbe(e,p, sx)
401              (* end case *))              (* end case *))
402          | rewriteBody(E.Sum(sx,E.Opn(E.Prod,[eps,E.Probe p])))     = replaceProbe(e,E.Probe p,sx)          | rewriteBody(e,E.Sum(sx,E.Opn(E.Prod,[eps,E.Probe p])))     = replaceProbe(e,E.Probe p,sx)
403          | rewriteBody _  = [e]          | rewriteBody (e,_)  = [e]
404    
405          val b=Ein.body ein          val b=Ein.body ein
406          fun matchField()=(case b          fun matchField()=(case b
# Line 408  Line 409 
409              | E.Sum(_, E.Opn(E.Prod,[ _ ,E.Probe _]))=>1              | E.Sum(_, E.Opn(E.Prod,[ _ ,E.Probe _]))=>1
410              | _ =>0              | _ =>0
411              (*end case*))              (*end case*))
412          val (fieldset,code,flag) = (case valnumflag          val (fieldset,varset,code,flag) = (case valnumflag
413              of true => (case (einSet.rtnVar(fieldset,y,DstIL.EINAPP(ein,args)))              of true => (case (einVarSet.rtnVarN(fieldset,e0))
414                  of (fldset,NONE)     => (fldset,rewriteBody b,0)                 of  (fldset,NONE)     => (fldset,varset,rewriteBody(e0,b),0)
415                  | (fldset,SOME v)    => (fldset,[(y,DstIL.VAR v)],1)                | (fldset,SOME v)    => (fldset,varset,[(y,DstIL.VAR v)],1)
416                     (*of (fldset, NONE)      => (fldset,varset,rewriteBody((y,DstIL.EINAPP(ein,List.map (fn a=>einVarSet.replaceArg(varset,a)) args)), b),0)
417                     | (fldset,SOME v)    => (fldset,einVarSet.VarSet.add(varset,einVarSet.VAR(v,y)),[],1)*)
418                  (*end case*))                  (*end case*))
419              | _     => (fieldset,rewriteBody b,0)              | _     => (fieldset,varset,rewriteBody(e0, b),0)
420              (*end case*))              (*end case*))
421          val m=matchField()          val m=matchField()
422          in  (code,fieldset,m,flag) end          in  (code,fieldset,varset,m,flag) end
423    
424    end; (* local *)    end; (* local *)
425    

Legend:
Removed from v.3472  
changed lines
  Added in v.3503

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