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

SCM Repository

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

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

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

revision 2395, Sun Jun 23 18:51:44 2013 UTC revision 2396, Sun Jun 30 00:01:22 2013 UTC
# Line 153  Line 153 
153              | _ => raise Fail "bogus field binding"              | _ => raise Fail "bogus field binding"
154            (* end case *))            (* end case *))
155    
156    
157        (* rator:E.Probe( E.Conv(v, d, h, i), position) args: fld, pos*)
158    
159       fun expandEinProbe(env, y, deltas,fld, pos)=(case getRHS fld
160            of (SrcOp.Field _, [img, h]) => (case (getRHS img, getRHS h)
161                of ((SrcOp.LoadImage v, _), (SrcOp.Kernel(h, k), _)) =>
162                    Probe.expandEin {
163                        result = result,
164                        img = Env.rename (env, img),
165                        v = v, h = h, k = k,
166                        pos = Env.rename (env, pos)
167                    }
168                | _ => raise Fail "bogus image/kernel binding"
169                (* end case *))
170            | _ => raise Fail "bogus field binding"
171            (* end case *)
172    
173    
174    
175    (* expand the outer product of vectors v1 and v2, with dimensions d1 and d2 (resp.) *)    (* expand the outer product of vectors v1 and v2, with dimensions d1 and d2 (resp.) *)
176      fun expandOuter (env, y, d1, d2, v1, v2) = let      fun expandOuter (env, y, d1, d2, v1, v2) = let
177            val rowTy = DstTy.tensorTy[d1]            val rowTy = DstTy.tensorTy[d1]
# Line 203  Line 222 
222            fun dummy () = [(y, DstIL.LIT(Literal.Int 0))]            fun dummy () = [(y, DstIL.LIT(Literal.Int 0))]
223            in            in
224              case rator              case rator
225               of SrcOp.IAdd ty => assign (DstOp.Add(cvtTy ty))               of SrcOp.IAdd  => assign (DstOp.IAdd)
226                | SrcOp.ISub ty => assign (DstOp.Sub(cvtTy ty))                | SrcOp.ISub  => assign (DstOp.ISub)
227                | SrcOp.IMul ty => assign (DstOp.Mul(cvtTy ty))                | SrcOp.IMul  => assign (DstOp.IMul)
228                | SrcOp.IDiv ty => assign (DstOp.Div(cvtTy ty))                | SrcOp.IDiv  => assign (DstOp.IDiv)
229                | SrcOp.INeg ty => assign (DstOp.Neg(cvtTy ty))                | SrcOp.INeg  => assign (DstOp.INeg)
230                | SrcOp.Abs ty => assign (DstOp.Abs(cvtTy ty))                | SrcOp.Abs ty => assign (DstOp.Abs(cvtTy ty))
231                | SrcOp.LT ty => assign (DstOp.LT(cvtTy ty))                | SrcOp.LT ty => assign (DstOp.LT(cvtTy ty))
232                | SrcOp.LTE ty => assign (DstOp.LTE(cvtTy ty))                | SrcOp.LTE ty => assign (DstOp.LTE(cvtTy ty))
# Line 260  Line 279 
279            end            end
280  handle ex => (print(concat["error converting ", SrcOp.toString rator, "\n"]); raise ex)  handle ex => (print(concat["error converting ", SrcOp.toString rator, "\n"]); raise ex)
281    
282    
283        fun expandEinOp (env, y, Ein.EIN{params, index, body}, args) = let
284                fun assign2 rator' =
285                  [(y, DstIL.OP(rator', Env.renameList(env, args)))]
286                fun assign params'=
287                  assign2 Ein.EIN{params=params', index=index, body=body}
288                  fun cvtToInt rator' = let
289                  val t = DstIL.Var.new ("t", DstTy.realTy)
290                  in [
291                    (t, DstIL.OP(rator', Env.renameList(env, args))),
292                    (y, DstIL.OP(DstOp.RealToInt 1, [t]))
293                    ] end
294                  fun dummy () = [(y, DstIL.LIT(Literal.Int 0))]
295    
296                in
297                  case params
298                  of E.Const _ => assign params
299                  | E.Tensor _ => assign params
300                  | E.Field _ => dummy()
301                  | E.Add _ => assign params
302                  | E.Sum _ => assign params
303                  | E.Prod _ => assign params
304                  | E.Div _ => assign params
305                  | E.Sub _ => assign params
306                  | E.Neg _ => assign params
307                  | E.Delta _ => assign params
308                  | E.Epsilon _=> assign params
309                  | E.Conv _ =>  dummy()
310                  | E.Partial _ => assign params
311                  | E.Probe(E.Conv(v, d, h, i), position) => (case args
312                        of [fld, pos] =>
313                        expandEinProbe(env, y, d,fld, pos)
314                        (* end case *))
315                  | E.Probe _=> dummy()
316                  | E.Apply _ => assign params
317    
318            (* end case *)
319            end
320    handle ex => (print(concat["error converting ", SrcOp.toString rator, "\n"]); raise ex)
321    
322    
323    
324    (* expand a SrcIL assignment to a list of DstIL assignments *)    (* expand a SrcIL assignment to a list of DstIL assignments *)
325      fun expand (env, (y, rhs)) = let      fun expand (env, (y, rhs)) = let
326            fun assign rhs = [DstIL.ASSGN(Env.rename (env, y), rhs)]            fun assign rhs = [DstIL.ASSGN(Env.rename (env, y), rhs)]
# Line 273  Line 334 
334                | SrcIL.APPLY(f, args) => assign(DstIL.APPLY(f, Env.renameList(env, args)))                | SrcIL.APPLY(f, args) => assign(DstIL.APPLY(f, Env.renameList(env, args)))
335                | SrcIL.CONS(ty, args) => assign (DstIL.CONS(cvtTy ty, Env.renameList(env, args)))                | SrcIL.CONS(ty, args) => assign (DstIL.CONS(cvtTy ty, Env.renameList(env, args)))
336  (* FIXME: need to rewrite the "f" to handle the translation of probe, etc. *)  (* FIXME: need to rewrite the "f" to handle the translation of probe, etc. *)
337                | SrcIL.EINAPP(f, args) => assign (DstIL.EINAPP(f, Env.renameList(env, args)))  (**)                | SrcIL.EINAPP(rator, args) =>
338                    List.map DstIL.ASSGN (expandEinOp (env, Env.rename (env, y), rator, args))
339    
340              (* end case *)              (* end case *)
341            end            end
342    

Legend:
Removed from v.2395  
changed lines
  Added in v.2396

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