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

SCM Repository

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

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

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

revision 2397, Sat Jul 6 20:50:46 2013 UTC revision 2398, Sat Jul 6 23:07:40 2013 UTC
# Line 60  Line 60 
60    (* convert a rational to a FloatLit.float value.  We do this by long division    (* convert a rational to a FloatLit.float value.  We do this by long division
61     * with a cutoff when we get to 12 digits.     * with a cutoff when we get to 12 digits.
62     *)     *)
63    
64      fun ratToFloat r = (case Rational.explode r      fun ratToFloat r = (case Rational.explode r
65             of {sign=0, ...} => FloatLit.zero false             of {sign=0, ...} => FloatLit.zero false
66              | {sign, num, denom=1} => FloatLit.fromInt(IntInf.fromInt sign * num)              | {sign, num, denom=1} => FloatLit.fromInt(IntInf.fromInt sign * num)
# Line 112  Line 113 
113              fun ilit (r : DstIL.var, n) = (r, DstIL.LIT(Literal.Int(IntInf.fromInt n)))              fun ilit (r : DstIL.var, n) = (r, DstIL.LIT(Literal.Int(IntInf.fromInt n)))
114              fun radd (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IAdd DstTy.realTy, [a, b]))              fun radd (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IAdd DstTy.realTy, [a, b]))
115          *)          *)
116    
117      fun imul (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IMul, [a, b]))      fun imul (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IMul, [a, b]))
118      fun iadd (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IAdd, [a, b]))      fun iadd (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IAdd, [a, b]))
119      fun ilit (r : DstIL.var, n) = (r, DstIL.LIT(Literal.Int(IntInf.fromInt n)))      fun ilit (r : DstIL.var, n) = (r, DstIL.LIT(Literal.Int(IntInf.fromInt n)))
120      fun radd (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IAdd, [a, b]))      fun radd (r : DstIL.var, a, b) = (r, DstIL.OP(DstOp.IAdd, [a, b]))
121    
122    
123    
124    (* expand the EvalKernel operations into vector operations.  The parameters    (* expand the EvalKernel operations into vector operations.  The parameters
125     * are     * are
126     *    result  -- the lhs variable to store the result     *    result  -- the lhs variable to store the result
# Line 158  Line 162 
162              |_ =>  let              |_ =>  let
163                                            val shape = shapeVarToTensor sv                                            val shape = shapeVarToTensor sv
164                                                             val operator = EinOp.addTensors                                                             val operator = EinOp.addTensors
165                                                            in
166                  DSTIL.EINAPP(S.transform(operator,[len(shape), shape]), n )                  DSTIL.EINAPP(S.transform(operator,[len(shape), shape]), n )
167                    end
168    
169    
170          (****************************)          (****************************)
# Line 227  Line 233 
233                        [(result, DstIL.VAR a0)]                        [(result, DstIL.VAR a0)]
234                    | a0::r => let                    | a0::r => let
235                        val (m, stms) = eval (1, r)                        val (m, stms) = eval (1, r)
236                  (**COME BACK HERE *)                          val replaceAdd=decideAdd(ty, [a0,m])
237                        in                        in
238                          List.rev ((result, DstIL.OP(DstOp.IAdd ty, [a0, m]))::stms)                                  List.rev ((result, replaceAdd)::stms)
239                            (*List.rev ((result, DstIL.OP(DstOp.IAdd ty, [a0, m]))::stms)*)
240    
241                        end                        end
242                  (* end case *))                  (* end case *))
243            in            in
# Line 284  Line 292 
292     * arithmetic, where the offset will be automatically scaled by the size of the     * arithmetic, where the offset will be automatically scaled by the size of the
293     * elements.     * elements.
294     *)     *)
295    
296    
297      fun expandVoxelAddress (result, info, offset, [img, ix]) = let      fun expandVoxelAddress (result, info, offset, [img, ix]) = let
298            val dim = ImageInfo.dim info            val dim = ImageInfo.dim info
299            val stride = ImageInfo.stride info            val stride = ImageInfo.stride info
# Line 291  Line 301 
301            val (offp, code) = adjustForStrideAndOffset (stride, offset, ix, [])            val (offp, code) = adjustForStrideAndOffset (stride, offset, ix, [])
302            val addrTy = DstTy.AddrTy info            val addrTy = DstTy.AddrTy info
303            val base = DstIL.Var.new ("imgBaseAddr", addrTy)            val base = DstIL.Var.new ("imgBaseAddr", addrTy)
304    
305            (*Add here is of address type, assume it is okay to keep IADD since not tensors*)
306            val code = (result, DstIL.OP(DstOp.IAdd addrTy, [base, offp])) ::            val code = (result, DstIL.OP(DstOp.IAdd addrTy, [base, offp])) ::
307                  (base, DstIL.OP(DstOp.ImageAddress info, [img])) ::                  (base, DstIL.OP(DstOp.ImageAddress info, [img])) ::
308                  code                  code
# Line 368  Line 380 
380                | SrcOp.Lerp ty => assign (DstOp.Lerp ty)                | SrcOp.Lerp ty => assign (DstOp.Lerp ty)
381                    | SrcOp.Norm ty => assign (DstOp.Norm ty)                    | SrcOp.Norm ty => assign (DstOp.Norm ty)
382                | SrcOp.Normalize d => assign (DstOp.Normalize d)                | SrcOp.Normalize d => assign (DstOp.Normalize d)
383                | SrcOp.Scale ty => assign (DstOp.Scale ty)  
384                | SrcOp.Zero ty => assign (DstOp.Zero ty)                | SrcOp.Zero ty => assign (DstOp.Zero ty)
385                | SrcOp.PrincipleEvec ty => assign (DstOp.PrincipleEvec ty)                | SrcOp.PrincipleEvec ty => assign (DstOp.PrincipleEvec ty)
386                | SrcOp.EigenVals2x2 => assign (DstOp.EigenVals2x2)                | SrcOp.EigenVals2x2 => assign (DstOp.EigenVals2x2)
# Line 397  Line 409 
409              (* end case *)              (* end case *)
410            end            end
411    
412              fun expandEinOp (env, y, Ein.EIN{params, index, body}, args) = let
413                        fun assign2 rator' =
414                          [(y, DstIL.EINAPP(rator', Env.renameList(env, args)))]
415    
416                        fun assign params'=
417                          assign2 Ein.EIN{params=params', index=index, body=body}
418                          fun cvtToInt rator' = let
419                          val t = DstIL.Var.new ("t", DstTy.realTy)
420                          in [
421                            (t, DstIL.OP(rator', Env.renameList(env, args))),
422                            (y, DstIL.OP(DstOp.RealToInt 1, [t]))
423                            ] end
424                          fun dummy () = [(y, DstIL.LIT(Literal.Int 0))]
425    
426                        in
427                          case params
428                          of E.Const _ => assign params
429                          | E.Tensor _ => assign params
430                          | E.Field _ => dummy()
431                          | E.Add _ => assign params
432                          | E.Sum _ => assign params
433                          | E.Prod _ => assign params
434                          | E.Div _ => assign params
435                          | E.Sub _ => assign params
436                          | E.Neg _ => assign params
437                          | E.Delta _ => assign params
438                          | E.Epsilon _=> assign params
439                          | E.Conv _ =>  dummy()
440                          | E.Partial _ => assign params
441                          | E.Probe _=> dummy()
442                          | E.Apply _ => assign params
443    
444                    (* end case *)
445                    end
446            handle ex => (print(concat["error converting ", SrcOp.toString rator, "\n"]); raise ex)
447    
448    
449    
450    (* expand a SrcIL assignment to a DstIL CFG *)    (* expand a SrcIL assignment to a DstIL CFG *)
451      fun expand (env, (y, rhs)) = let      fun expand (env, (y, rhs)) = let
452            val y' = Env.rename (env, y)            val y' = Env.rename (env, y)
# Line 409  Line 459 
459                | SrcIL.OP(rator, args) => List.map DstIL.ASSGN (expandOp (env, y', rator, args))                | SrcIL.OP(rator, args) => List.map DstIL.ASSGN (expandOp (env, y', rator, args))
460                | SrcIL.APPLY(f, args) => assign (DstIL.APPLY(f, Env.renameList(env, args)))                | SrcIL.APPLY(f, args) => assign (DstIL.APPLY(f, Env.renameList(env, args)))
461                | SrcIL.CONS(ty, args) => assign (DstIL.CONS(ty, Env.renameList(env, args)))                | SrcIL.CONS(ty, args) => assign (DstIL.CONS(ty, Env.renameList(env, args)))
462                       | SrcIL.EINAPP(rator, args) =>
463                             List.map DstIL.EINAPP (expandEinOp (env, Env.rename (env, y), rator, args))
464              (* end case *)              (* end case *)
465            end            end
466    
467    
468    (* expand a SrcIL multi-assignment to a DstIL CFG *)    (* expand a SrcIL multi-assignment to a DstIL CFG *)
469      fun mexpand (env, (ys, rator, xs)) = let      fun mexpand (env, (ys, rator, xs)) = let
470            val ys' = Env.renameList(env, ys)            val ys' = Env.renameList(env, ys)

Legend:
Removed from v.2397  
changed lines
  Added in v.2398

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