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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/high-il/app-ein.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/high-il/app-ein.sml

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

revision 3447, Fri Nov 20 17:21:39 2015 UTC revision 3448, Fri Nov 20 20:33:38 2015 UTC
# Line 1  Line 1 
1  (* substitution  (* substitution  179
2   * Apply EIN opperator arguments to EIN operator.   * Apply EIN opperator arguments to EIN operator.
3   *   *
4   * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)   * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
# Line 58  Line 58 
58              | mapSum ((a,b,c)::e)=[((mapMu a),b,c)]@mapSum(e)              | mapSum ((a,b,c)::e)=[((mapMu a),b,c)]@mapSum(e)
59          fun mapParam(id)= mapId2(id, subId, 0)          fun mapParam(id)= mapId2(id, subId, 0)
60          fun apply e=(case e          fun apply e=(case e
61              of E.Const _          => e              of E.B _          => e
             | E.ConstR _          => e  
             | E.Value _           => raise Fail "expression before expand"  
             | E.Krn _             => raise Fail "expression before expand"  
             | E.Img  _            => raise Fail "expression before expand"  
62              | E.Tensor(id, mx)    => E.Tensor(mapParam id,mapAlpha mx)              | E.Tensor(id, mx)    => E.Tensor(mapParam id,mapAlpha mx)
63                | E.G(E.Delta (i,j))        => E.G(E.Delta(mapMu i,mapMu j))
64                | E.G(E.Epsilon(i, j, k))   => E.G(E.Epsilon(mapSingle i, mapSingle j, mapSingle k))
65                | E.G(E.Eps2(i, j))         => E.G(E.Eps2(mapSingle i, mapSingle j))
66              | E.Field(id, mx)     => E.Field(mapParam id,mapAlpha mx)              | E.Field(id, mx)     => E.Field(mapParam id,mapAlpha mx)
             | E.Delta (i,j)       => E.Delta(mapMu i,mapMu j)  
             | E.Epsilon(i, j, k)  => E.Epsilon(mapSingle i, mapSingle j, mapSingle k)  
             | E.Eps2(i, j)        => E.Eps2(mapSingle i, mapSingle j)  
             | E.Sum(c,esum)       => E.Sum(mapSum c, apply esum)  
             | E.Neg e1            => E.Neg(apply e1)  
67              | E.Lift e1           => E.Lift(apply e1)              | E.Lift e1           => E.Lift(apply e1)
68              | E.Sqrt e1           => E.Sqrt(apply e1)              | E.Conv (v,mx,h,ux)        => E.Conv(mapParam v, mapAlpha mx, mapParam h, mapAlpha ux)
             | E.Trig(t1,e1)       => E.Trig(t1,apply e1)  
             | E.PowInt(e1,n1)     => E.PowInt(apply e1,n1)  
             | E.PowReal(e1,n1)    => E.PowReal(apply e1,n1)  
             | E.Add es            => E.Add(List.map apply es)  
             | E.Sub(e1, e2)       => E.Sub(apply e1, apply e2)  
             | E.Prod es           => E.Prod(List.map apply es)  
             | E.Div(e1, e2)       => E.Div(apply e1, apply e2)  
69              | E.Partial mx        => E.Partial (mapAlpha mx)              | E.Partial mx        => E.Partial (mapAlpha mx)
70              | E.Apply(e1, e2)     => E.Apply(apply e1, apply e2)              | E.Apply(e1, e2)     => E.Apply(apply e1, apply e2)
             | E.Conv (v,mx,h,ux)  =>  
                     E.Conv(mapParam v, mapAlpha mx, mapParam h, mapAlpha ux)  
71              | E.Probe(f, pos)     => E.Probe(apply f, apply pos)              | E.Probe(f, pos)     => E.Probe(apply f, apply pos)
72              | E.PowEmb(e1,sx,n)   => E.PowEmb(apply e1,mapSum sx,n)              | E.Value _                 => raise Fail "expression before expand"
73              | E.Exp e1            => E.Exp(apply e1)              | E.Img  _                  => raise Fail "expression before expand"
74                | E.Krn _                   => raise Fail "expression before expand"
75                | E.Sum(c,esum)             => E.Sum(mapSum c, apply esum)
76                | E.Op1(E.PowEmb(sx,n),e1)  => E.Op1(E.PowEmb(mapSum sx,n),apply e1)
77                | E.Op1(op1,e1)             => E.Op1(op1,apply e1)
78                | E.Op2(op2,e1,e2)          => E.Op2(op2,apply e1,apply e2)
79                | E.Opn(opn,e1)             => E.Opn(opn,List.map apply e1)
80              (*end case*))              (*end case*))
81              in              in
82                  apply e                  apply e
# Line 126  Line 117 
117              if(id=place) then              if(id=place) then
118                  if(length(mx)=length(index2)) then                  if(length(mx)=length(index2)) then
119                      (changed:=1; rewriteSubst(body2,substId,mx,paramShift,x,newArgs,done))                      (changed:=1; rewriteSubst(body2,substId,mx,paramShift,x,newArgs,done))
120                  else ( raise Fail(err);E.Const 0)                  else ( raise Fail(err);E.B(E.Const 0))
121              else (case e              else (case e
122                  of E.Tensor(id,mx) => E.Tensor(mapId(id,origId,0), mx)                  of E.Tensor(id,mx) => E.Tensor(mapId(id,origId,0), mx)
123                  | E.Field(id,mx) =>    E.Field(mapId(id,origId,0), mx)                  | E.Field(id,mx) =>    E.Field(mapId(id,origId,0), mx)
# Line 138  Line 129 
129              in v end              in v end
130    
131          fun apply b=(case b          fun apply b=(case b
132              of E.Value _          => raise Fail "expression before expand"              of E.B _                    => b
             | E.Krn _             => raise Fail "expression before expand"  
             | E.Img  _            => raise Fail "expression before expand"  
             | E.Const _           => b  
             | E.ConstR _          => b  
             | E.Delta _           => b  
             | E.Epsilon(i, j, k)  => b  
             | E.Eps2(i, j)        => b  
             | E.Partial mx        => b  
133              | E.Tensor(id, mx)    => rewrite (id,mx,b)              | E.Tensor(id, mx)    => rewrite (id,mx,b)
134                | E.G _                     => b
135              | E.Field(id, mx)     => rewrite (id,mx,b)              | E.Field(id, mx)     => rewrite (id,mx,b)
             | E.Sum(c,esum)       => (sumIndex:=sumI(c); E.Sum(c, apply esum))  
136              | E.Lift e1           => E.Lift(apply e1)              | E.Lift e1           => E.Lift(apply e1)
             | E.Sqrt e1           => E.Sqrt(apply e1)  
             | E.Trig(t1,e1)       => E.Trig(t1,apply e1)  
             | E.Exp e1            => E.Exp(apply e1)  
             | E.PowInt(e1,n1)     => E.PowInt(apply e1,n1)  
             | E.PowReal(e1,n1)    => E.PowReal(apply e1,n1)  
             | E.Neg e1            => E.Neg(apply e1)  
             | E.Add es            => E.Add(List.map apply es)  
             | E.Sub(e1, e2)       => E.Sub(apply e1, apply e2)  
             | E.Prod es           => E.Prod(List.map apply es)  
             | E.Div(e1, e2)       => E.Div(apply e1, apply e2)  
             | E.Apply(e1, e2)     => E.Apply(apply e1, apply e2)  
137              | E.Conv (v,mx,h,ux)  => E.Conv(mapId(v, origId,0), mx, mapId(h,origId,0), ux)              | E.Conv (v,mx,h,ux)  => E.Conv(mapId(v, origId,0), mx, mapId(h,origId,0), ux)
138                | E.Partial mx              => b
139                | E.Apply(e1, e2)           => E.Apply(apply e1, apply e2)
140              | E.Probe(f, pos)     => E.Probe(apply f, apply pos)              | E.Probe(f, pos)     => E.Probe(apply f, apply pos)
141              | E.PowEmb(e1,sx,n)   => (sumIndex:=sumI(sx); E.PowEmb(apply e1,sx,n))              | E.Value _                 => raise Fail "expression before expand"
142                | E.Img  _                  => raise Fail "expression before expand"
143                | E.Krn _                   => raise Fail "expression before expand"
144                | E.Sum(c,esum)             => (sumIndex:=sumI(c); E.Sum(c, apply esum))
145                | E.Op1(E.PowEmb(sx,n),e1)    => (sumIndex:=sumI(sx);E.Op1(E.PowEmb(sx,n),apply e1))
146                | E.Op1(op1, e1)            => E.Op1(op1,apply e1)
147                | E.Op2(op2, e1,e2)         => E.Op2(op2,apply e1,apply e2)
148                | E.Opn(opn, es)            => E.Opn(opn,List.map apply es)
149          (*end case*))          (*end case*))
150          val body''=apply body          val body''=apply body
151          val ref g=changed          val ref g=changed

Legend:
Removed from v.3447  
changed lines
  Added in v.3448

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