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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/mid-to-low/ein-to-scalar.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/mid-to-low/ein-to-scalar.sml

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

revision 3728, Wed Apr 6 20:05:42 2016 UTC revision 3741, Sun Apr 10 23:33:56 2016 UTC
# Line 19  Line 19 
19              mapp : int IntRedBlackMap.map,      (* mapping from deBruijn indices to argument IDs *)              mapp : int IntRedBlackMap.map,      (* mapping from deBruijn indices to argument IDs *)
20              params : Ein.param_kind list,       (* formal parameters of Ein operator *)              params : Ein.param_kind list,       (* formal parameters of Ein operator *)
21              body : Ein.ein_exp,                 (* the EIN operator body *)              body : Ein.ein_exp,                 (* the EIN operator body *)
             midArgs : MidIR.var list,           (* MidIR arguments to Ein operator *)  
22              lowArgs : LowIR.var list            (* corresponding LowIR arguments *)              lowArgs : LowIR.var list            (* corresponding LowIR arguments *)
23            } -> LowIR.var            } -> LowIR.var
24    
# Line 39  Line 38 
38            (* end case *))            (* end case *))
39    
40  (* FIXME: we probably do not need the params (depending on how we implement FieldToLow.expand *)  (* FIXME: we probably do not need the params (depending on how we implement FieldToLow.expand *)
41      fun expand {avail, mapp, params, body, midArgs, lowArgs} = let      fun expand {avail, mapp, params, body, lowArgs} = let
42            fun gen (mapp, body) = let            fun gen (mapp, body) = let
43                (*********sumexpression ********)                (*********sumexpression ********)
44                  fun tb n =  List.tabulate (n, fn e => e)                  fun tb n =  List.tabulate (n, fn e => e)
45                  fun sumCheck (mapp, (E.V v, lb, ub) :: sumx, e) = let                  fun sumCheck (mappOrig, (E.V v, lb, ub) :: sumx, e) = let
46                        fun sumloop mapp = gen (mapp, e)                        fun sumloop mapp = gen (mapp, e)
47                        fun sumI1 (left, (v, [i], lb1), [], rest) = let                        fun sumI1 (left, (v, [i], lb1), [], rest) = let
48                              val mapp = IMap.insert (mapp, v, lb1+i)                  (*val _ = print (concat["\ninsert: last item overll", Int.toString v, " to ",Int.toString (lb1+i)]) *)
49                                val mapp = IMap.insert (left, v, lb1+i)
50                              val vD = gen (mapp, e)                              val vD = gen (mapp, e)
51                              in                              in
52                                rest@[vD]                                rest@[vD]
53                              end                              end
54                          | sumI1 (left, (v, i::es, lb1), [], rest) = let                          | sumI1 (left, (v, i::es, lb1), [], rest) = let
55                    (* val _ = print (concat["\ninsertb ", Int.toString v, " to ",Int.toString (i+lb1)])*)
56                              val mapp = IMap.insert (left, v, i+lb1)                              val mapp = IMap.insert (left, v, i+lb1)
57                              val vD = gen (mapp, e)                              val vD = gen (mapp, e)
58                              in                              in
59                                sumI1 (mapp, (v, es, lb1), [], rest@[vD])                                sumI1 (mapp, (v, es, lb1), [], rest@[vD])
60                              end                              end
61                          | sumI1 (left, (v, [i], lb1), (E.V a, lb2, ub2) ::sx, rest) =                          | sumI1 (left, (v, [i], lb1), (E.V a, lb2, ub2) ::sx, rest) = let
62                        (* val _ = print( concat["\n insert- last item in list for item ", Int.toString v, " to ",Int.toString( i+lb1)])*)
63                        in
64                              sumI1 (IMap.insert (left, v, lb1+i), (a, tb (ub2-lb2+1), lb2), sx, rest)                              sumI1 (IMap.insert (left, v, lb1+i), (a, tb (ub2-lb2+1), lb2), sx, rest)
65                        end
66                          | sumI1 (left, (v, s::es, lb1), (E.V a, lb2, ub2) ::sx, rest) = let                          | sumI1 (left, (v, s::es, lb1), (E.V a, lb2, ub2) ::sx, rest) = let
67                        (*val _ = print( concat["\ninsertd ", Int.toString v, " to ",Int.toString (s+lb1)])*)
68                              val mapp = IMap.insert (left, v, s+lb1)                              val mapp = IMap.insert (left, v, s+lb1)
69                              val xx = tb (ub2-lb2+1)                              val xx = tb (ub2-lb2+1)
70                    (* val _ =print( concat["\ndoing inner ", Int.toString a])*)
71                              val rest' = sumI1 (mapp, (a, xx, lb2), sx, rest)                              val rest' = sumI1 (mapp, (a, xx, lb2), sx, rest)
72                              in                              in
73                                sumI1 (mapp, (v, es, lb1), (E.V a, lb2, ub2) ::sx, rest')                                sumI1 (mapp, (v, es, lb1), (E.V a, lb2, ub2) ::sx, rest')
74                              end                              end
75                          | sumI1 _ = raise Fail "None Variable-index in summation"                          | sumI1 _ = raise Fail "None Variable-index in summation"
76                        in                        in
77                          sumI1 (mapp, (v, tb (ub-lb+1), lb), sumx, [])                  sumI1 (mappOrig, (v, tb (ub-lb+1), lb), sumx, [])
78                        end                        end
79                  in                  in
80                    case body                    case body
# Line 111  Line 117 
117                          FieldToLow.expand {                          FieldToLow.expand {
118                              avail = avail, mapp = mapp,                              avail = avail, mapp = mapp,
119                              sx = sx, prod = prod,                              sx = sx, prod = prod,
120                              params = params, (* FIXME: do we need these? *)                              lowArgs = lowArgs
                             midArgs = midArgs, lowArgs = lowArgs  
121                            }                            }
122                      | E.Sum(sumx, e) =>                      | E.Sum(sumx, e) =>
123                          Mk.reduce (avail, Mk.realAdd, sumCheck (mapp, sumx, e))                          Mk.reduce (avail, Mk.realAdd, sumCheck (mapp, sumx, e))
124                (* FIXME:need to add to normalize *)
125                | E.Probe(E.Epsilon e1, e2) => gen(mapp,E.Epsilon e1)
126                | E.Probe(E.Eps2 e1, e2) => gen(mapp,E.Eps2 e1)
127                | E.Probe(E.Const e1, e2) => gen(mapp, E.Const e1)
128                | E.Probe(E.Delta e1, e2) => gen(mapp, E.Delta e1)
129                | E.Probe e => raise Fail("probe ein-exp: " ^ EinPP.expToString body)
130                      | _ => raise Fail("unsupported ein-exp: " ^ EinPP.expToString body)                      | _ => raise Fail("unsupported ein-exp: " ^ EinPP.expToString body)
131                    (*end case*)                    (*end case*)
132                  end                  end

Legend:
Removed from v.3728  
changed lines
  Added in v.3741

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