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

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

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

revision 3977, Wed Jun 15 19:06:30 2016 UTC revision 3978, Wed Jun 15 19:07:40 2016 UTC
# Line 69  Line 69 
69        | lkupVx (E.C e1, mapp) = E.C e1        | lkupVx (E.C e1, mapp) = E.C e1
70    
71      fun lkupSx ([], mapp) = []      fun lkupSx ([], mapp) = []
72        | lkupSx ((E.V e1, ub, lb)::es, mapp) = (case IMap.find(mapp, e1)        | lkupSx ((e1, ub, lb)::es, mapp) = (case IMap.find(mapp, e1)
73             of SOME l => (E.V l, ub, lb) :: lkupSx(es, mapp)             of SOME l => (l, ub, lb) :: lkupSx(es, mapp)
74              | _ => lkupSx(es, mapp)              | _ => lkupSx(es, mapp)
75            (* end case *))            (* end case *))
76    
# Line 81  Line 81 
81            fun addMus (s, []) = s            fun addMus (s, []) = s
82              | addMus (s, E.V i :: mus) = addMus (ISet.add(s, i), mus)              | addMus (s, E.V i :: mus) = addMus (ISet.add(s, i), mus)
83              | addMus (s, E.C _ :: mus) = addMus (s, mus)              | addMus (s, E.C _ :: mus) = addMus (s, mus)
84              fun addSingle(s, []) = s
85                | addSingle(s, i :: ixs) = addSingle (ISet.add(s, i), ixs)
86            fun shape (b, ixs) = (case b            fun shape (b, ixs) = (case b
87                   of E.Const _ => ixs                   of E.Const _ => ixs
88                    | E.ConstR _ => ixs                    | E.ConstR _ => ixs
89                    | E.Tensor(_, alpha) => addMus(ixs, alpha)                    | E.Tensor(_, alpha) => addMus(ixs, alpha)
90                    | E.Delta(E.V i, E.V j) => ISet.add(ISet.add(ixs, i), j)                    | E.Delta(i, j) => ISet.add(ISet.add(ixs, i), j)
91                    | E.Epsilon(i, j, k) => ISet.add(ISet.add(ISet.add(ixs, i), j), k)                    | E.Epsilon(i, j, k) => ISet.add(ISet.add(ISet.add(ixs, i), j), k)
92                    | E.Eps2(i, j) => ISet.add(ISet.add(ixs, i), j)                    | E.Eps2(i, j) => ISet.add(ISet.add(ixs, i), j)
93                    | E.Field(_, alpha) => addMus(ixs, alpha)                    | E.Field(_, alpha) => addMus(ixs, alpha)
# Line 97  Line 99 
99                    | E.Value e1 => raise Fail "Error in Ashape"                    | E.Value e1 => raise Fail "Error in Ashape"
100                    | E.Img _ => raise Fail "Error in Ashape"                    | E.Img _ => raise Fail "Error in Ashape"
101                    | E.Krn _ => raise Fail "Error in Ashape"                    | E.Krn _ => raise Fail "Error in Ashape"
102                    | E.Sum(sx, e) => shape (e, addMus (ixs, List.map #1 sx))                    | E.Sum(sx, e) => shape (e, addSingle (ixs, List.map #1 sx))
103                    | E.Op1 (_, e) => shape (e, ixs)                    | E.Op1 (_, e) => shape (e, ixs)
104                    | E.Op2(_, e1, e2) => shape (e1, shape(e2, ixs))                    | E.Op2(_, e1, e2) => shape (e1, shape(e2, ixs))
105                    | E.Opn(_, es) => List.foldl shape ixs es                    | E.Opn(_, es) => List.foldl shape ixs es
# Line 122  Line 124 
124                   of E.Const _ => ixs                   of E.Const _ => ixs
125                    | E.ConstR _ => ixs                    | E.ConstR _ => ixs
126                    | E.Tensor(_, alpha) => alpha @ ixs                    | E.Tensor(_, alpha) => alpha @ ixs
127                    | E.Delta(i, j) => i :: j :: ixs                    | E.Delta(i, j) => E.V i :: E.V j :: ixs
128                    | E.Epsilon(i, j, k) => E.V i :: E.V j :: E.V k :: ixs                    | E.Epsilon(i, j, k) => E.V i :: E.V j :: E.V k :: ixs
129                    | E.Eps2(i, j) => E.V i :: E.V j :: ixs                    | E.Eps2(i, j) => E.V i :: E.V j :: ixs
130                    | E.Field(_, alpha) => alpha @ ixs                    | E.Field(_, alpha) => alpha @ ixs
# Line 170  Line 172 
172      fun tShape (index, sx, e) = let      fun tShape (index, sx, e) = let
173          (* outerAlpha = set of indices supported by original EIN *)          (* outerAlpha = set of indices supported by original EIN *)
174            val outerAlpha = let            val outerAlpha = let
175                  fun add ([], _, s) = ISet.addList(s, List.map (fn (E.V v, _, _) => v) sx)                  fun add ([], _, s) = ISet.addList(s, List.map (fn (v, _, _) => v) sx)
176                    | add (_::r, i, s) = add (r, i+1, ISet.add(s, i))                    | add (_::r, i, s) = add (r, i+1, ISet.add(s, i))
177                  in                  in
178                    add (index, 0, ISet.empty)                    add (index, 0, ISet.empty)
# Line 194  Line 196 
196            fun idToMapp (mapp, [],_ ) = mapp            fun idToMapp (mapp, [],_ ) = mapp
197              | idToMapp (mapp, ix::es, cnt) = idToMapp (IMap.insert (mapp, cnt, ix), es,cnt+1)              | idToMapp (mapp, ix::es, cnt) = idToMapp (IMap.insert (mapp, cnt, ix), es,cnt+1)
198            fun sxToMapp (mapp, []) = mapp            fun sxToMapp (mapp, []) = mapp
199              | sxToMapp (mapp, (E.V v, _, ub)::es) = sxToMapp (IMap.insert (mapp, v, ub+1), es)              | sxToMapp (mapp, (v, _, ub)::es) = sxToMapp (IMap.insert (mapp, v, ub+1), es)
200            in            in
201              sxToMapp (idToMapp (IMap.empty, index, 0), sx)              sxToMapp (idToMapp (IMap.empty, index, 0), sx)
202            end            end
# Line 235  Line 237 
237                   of E.Const _ => b                   of E.Const _ => b
238                    | E.ConstR _ => b                    | E.ConstR _ => b
239                    | E.Tensor(id, alpha) => E.Tensor(id, getAlpha alpha)                    | E.Tensor(id, alpha) => E.Tensor(id, getAlpha alpha)
240                    | E.Delta(i, j) => E.Delta(getVx i, getVx j)                    | E.Delta(i, j) => E.Delta(getIx i, getIx j)
241                    | E.Epsilon(i, j, k) => E.Epsilon(getIx  i, getIx  j, getIx k)                    | E.Epsilon(i, j, k) => E.Epsilon(getIx  i, getIx  j, getIx k)
242                    | E.Eps2(i, j) => E.Eps2(getIx i, getIx j)                    | E.Eps2(i, j) => E.Eps2(getIx i, getIx j)
243                    | E.Field(id, alpha) => E.Field(id, getAlpha alpha)                    | E.Field(id, alpha) => E.Field(id, getAlpha alpha)
# Line 250  Line 252 
252                    | E.Img _ => raise Fail "unexpected Img"                    | E.Img _ => raise Fail "unexpected Img"
253                    | E.Krn _ => raise Fail "unexpected Krn"                    | E.Krn _ => raise Fail "unexpected Krn"
254                    | E.Sum(sx, e1) => E.Sum(getSx sx, rewrite e1)                    | E.Sum(sx, e1) => E.Sum(getSx sx, rewrite e1)
                   | E.Op1(E.PowEmb(sx1, n1), e1) => E.Op1(E.PowEmb(getSx sx1, n1), rewrite e1)  
255                    | E.Op1(op1, e1) => E.Op1(op1, rewrite e1)                    | E.Op1(op1, e1) => E.Op1(op1, rewrite e1)
256                    | E.Op2(op2, e1, e2) => E.Op2(op2, rewrite e1, rewrite e2)                    | E.Op2(op2, e1, e2) => E.Op2(op2, rewrite e1, rewrite e2)
257                    | E.Opn(opn, es) => E.Opn(opn, List.map rewrite es)                    | E.Opn(opn, es) => E.Opn(opn, List.map rewrite es)

Legend:
Removed from v.3977  
changed lines
  Added in v.3978

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