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 2520, Mon Dec 30 05:08:47 2013 UTC revision 2521, Thu Jan 9 02:17:07 2014 UTC
# Line 20  Line 20 
20      structure DstIL = LowIL      structure DstIL = LowIL
21      structure DstTy = LowILTypes      structure DstTy = LowILTypes
22      structure DstOp = LowOps      structure DstOp = LowOps
23        structure E=Ein
24    
25    
26    (* instantiate the translation environment *)    (* instantiate the translation environment *)
27      local      local
# Line 151  Line 153 
153     *)     *)
154    
155    
         (****************************)  
         (*Note, assuming Mult->IMult,  
         since otherwise would have created a tensor multiply or a scale.  
   
         *)  
         fun decideAdd(n, arg)=  case n  
                 of DstTy.vecTy 1 => DstIL.OP(DstOp.IAdd, arg)  
                 | DstTy.IntTy => DstIL.OP(DstOp.IAdd, arg)  
             |_ =>  let  
                                           val shape = shapeVarToTensor sv  
                                                            val operator = EinOp.addTensors  
                                                         in  
                 DSTIL.EINAPP(S.transform(operator,[len(shape), shape]), n )  
                 end  
156    
157    
158          (****************************)          (****************************)
159    
 (*Is coeff val ints? if so don't need decideadd function, can just used addI *)  
160    
161  fun expandEvalKernel (result, d, h, k, [x]) = let  
162    fun expandEvalKernel (result, d, h, k, [x]) = []
163                  (*let
164            val {isCont, segs} = Kernel.curve (h, k)            val {isCont, segs} = Kernel.curve (h, k)
165          (* degree of polynomial *)          (* degree of polynomial *)
166            val deg = List.length(hd segs) - 1            val deg = List.length(hd segs) - 1
# Line 248  Line 237 
237            in            in
238              coeffVecs @ evalCode              coeffVecs @ evalCode
239            end            end
240                  *)
241  fun peanut(m)= 6  fun peanut(m)= 6
242    
243    
# Line 368  Line 358 
358            fun assign rator' = [(y, DstIL.OP(rator', args'))]            fun assign rator' = [(y, DstIL.OP(rator', args'))]
359            in            in
360              case rator              case rator
361               of SrcOp.IAdd ty => assign (DstOp.IAdd ty)               of SrcOp.IAdd  => assign (DstOp.IAdd )
362                | SrcOp.ISub ty => assign (DstOp.ISub ty)                | SrcOp.ISub  => assign (DstOp.ISub )
363                | SrcOp.IMul ty => assign (DstOp.IMul ty)                | SrcOp.IMul  => assign (DstOp.IMul )
364                | SrcOp.IDiv ty => assign (DstOp.IDiv ty)                | SrcOp.IDiv  => assign (DstOp.IDiv )
365                | SrcOp.INeg ty => assign (DstOp.INeg ty)                | SrcOp.INeg  => assign (DstOp.INeg )
366                | SrcOp.Abs ty => assign (DstOp.Abs ty)                | SrcOp.Abs ty => assign (DstOp.Abs ty)
367                | SrcOp.LT ty => assign (DstOp.LT ty)                | SrcOp.LT ty => assign (DstOp.LT ty)
368                | SrcOp.LTE ty => assign (DstOp.LTE ty)                | SrcOp.LTE ty => assign (DstOp.LTE ty)
# Line 394  Line 384 
384            | SrcOp.EigenVals3x3 => assign (DstOp.EigenVals3x3)            | SrcOp.EigenVals3x3 => assign (DstOp.EigenVals3x3)
385            | SrcOp.Select(ty as SrcTy.TupleTy tys, i) => assign (DstOp.Select(ty, i))            | SrcOp.Select(ty as SrcTy.TupleTy tys, i) => assign (DstOp.Select(ty, i))
386            | SrcOp.Index(ty, i) => assign (DstOp.Index(ty, i))            | SrcOp.Index(ty, i) => assign (DstOp.Index(ty, i))
387            | SrcOp.ISubscript ty => assign (DstOp.ISubscript ty)            | SrcOp.Subscript ty => assign (DstOp.Subscript ty)
388                | SrcOp.Ceiling d => assign (DstOp.Ceiling d)                | SrcOp.Ceiling d => assign (DstOp.Ceiling d)
389                | SrcOp.Floor d => assign (DstOp.Floor d)                | SrcOp.Floor d => assign (DstOp.Floor d)
390                | SrcOp.Round d => assign (DstOp.Round d)                | SrcOp.Round d => assign (DstOp.Round d)
# Line 403  Line 393 
393                | SrcOp.RealToInt d => assign (DstOp.RealToInt d)                | SrcOp.RealToInt d => assign (DstOp.RealToInt d)
394                | SrcOp.VoxelAddress(info, offset) => expandVoxelAddress (y, info, offset, args')                | SrcOp.VoxelAddress(info, offset) => expandVoxelAddress (y, info, offset, args')
395                | SrcOp.LoadVoxels(rty, d) => assign (DstOp.LoadVoxels(rty, d))                | SrcOp.LoadVoxels(rty, d) => assign (DstOp.LoadVoxels(rty, d))
           | SrcOp.Transform info => assign (DstOp.Transform info)  
               | SrcOp.Translate info => assign (DstOp.Translate info)  
396                | SrcOp.EvalKernel(d, h, k) => expandEvalKernel(y, d, h, k, args')                | SrcOp.EvalKernel(d, h, k) => expandEvalKernel(y, d, h, k, args')
397                | SrcOp.LoadImage info => assign (DstOp.LoadImage info)                | SrcOp.LoadImage info => assign (DstOp.LoadImage info)
398                | SrcOp.Inside info => assign (DstOp.Inside info)                | SrcOp.Inside info => assign (DstOp.Inside info)
399                | SrcOp.Input(ty, s, desc) => assign (DstOp.Input(ty, s, desc))                | SrcOp.Input(ty, s, desc) => assign (DstOp.Input(ty, s, desc))
400                | SrcOp.InputWithDefault(ty, s, desc) =>                | SrcOp.InputWithDefault(ty, s, desc) =>
401                    assign (DstOp.InputWithDefault(ty, s, desc))                    assign (DstOp.InputWithDefault(ty, s, desc))
402              | SrcOp.Transform V=> assign (DstOp.Transform V)
403              | SrcOp.Translate V=> assign(DstOp.Translate V)
404                | rator => raise Fail("bogus operator " ^ SrcOp.toString rator)                | rator => raise Fail("bogus operator " ^ SrcOp.toString rator)
405              (* end case *)              (* end case *)
406            end            end
# Line 418  Line 408 
408            fun expandEinOp (env, y, Ein.EIN{params, index, body}, args) = let            fun expandEinOp (env, y, Ein.EIN{params, index, body}, args) = let
409                      fun assign2 rator' =                      fun assign2 rator' =
410                        [(y, DstIL.EINAPP(rator', Env.renameList(env, args)))]                        [(y, DstIL.EINAPP(rator', Env.renameList(env, args)))]
411    (*
412                      fun assign params'=                      fun assign params'=
413                        assign2 Ein.EIN{params=params', index=index, body=body}                        assign2 Ein.EIN{params=params', index=index, body=body}
414                        fun cvtToInt rator' = let                        fun cvtToInt rator' = let
# Line 428  Line 418 
418                          (y, DstIL.OP(DstOp.RealToInt 1, [t]))                          (y, DstIL.OP(DstOp.RealToInt 1, [t]))
419                          ] end                          ] end
420                        fun dummy () = [(y, DstIL.LIT(Literal.Int 0))]                        fun dummy () = [(y, DstIL.LIT(Literal.Int 0))]
421                *)
422    
                     in  
                       case params  
                       of E.Const _ => assign params  
                       | E.Tensor _ => assign params  
                       | E.Field _ => dummy()  
                       | E.Add _ => assign params  
                       | E.Sum _ => assign params  
                       | E.Prod _ => assign params  
                       | E.Div _ => assign params  
                       | E.Sub _ => assign params  
                       | E.Neg _ => assign params  
                       | E.Delta _ => assign params  
                       | E.Epsilon _=> assign params  
                       | E.Conv _ =>  dummy()  
                       | E.Partial _ => assign params  
                       | E.Probe _=> dummy()  
                       | E.Apply _ => assign params  
423    
424                  (* end case *)              in []
425                  end                  end
426          handle ex => (print(concat["error converting ", SrcOp.toString rator, "\n"]); raise ex)          handle ex => (print(concat["error converting  \n"]); raise ex)
427    
428    
429    

Legend:
Removed from v.2520  
changed lines
  Added in v.2521

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