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 2844, Tue Dec 9 18:05:29 2014 UTC revision 2845, Fri Dec 12 06:46:23 2014 UTC
# Line 23  Line 23 
23      structure Probe = ProbeEin      structure Probe = ProbeEin
24      structure P     = Printer      structure P     = Printer
25      structure E=Ein      structure E=Ein
     structure mk=mkOperators  
26      structure Var = MidIL.Var      structure Var = MidIL.Var
     structure HVar = HighIL.Var  
27      structure split =Split      structure split =Split
    structure cleanP=cleanParams  
     structure test=testcases  
28      structure TE=TransformEin      structure TE=TransformEin
29        structure mk= mkOperators
30        structure MidToString =MidToString
31        structure handleE=handleEin
32    
33     datatype peanut=    O of  SrcOp.rator | E of Ein.ein |Nope      val testing =0
   
     val testing =1  
34      fun testp n=(case testing      fun testp n=(case testing
35          of 0=> 1          of 0=> 1
36          | _ =>(print(String.concat n);1)          | _ =>(print(String.concat n);1)
37          (*end case*))          (*end case*))
38        fun incUseD (DstIL.V{useCnt, ...}) = (useCnt := !useCnt + 1)
39        fun useD x = (incUseD x; x)
40        fun iTos e=Int.toString e
41        val cnt = ref 0
42        fun genName prefix = let
43            val n = !cnt
44            in
45                cnt := n+1;
46                String.concat[prefix, "_", Int.toString n]
47        end
48      fun getRHS x  = (case SrcIL.Var.binding x      fun getRHS x  = (case SrcIL.Var.binding x
49          of SrcIL.VB_RHS(SrcIL.OP(rator, args)) => (O rator, args)          of SrcIL.VB_RHS(SrcIL.VAR x') => getRHS x'
50          | SrcIL.VB_RHS(SrcIL.VAR x') => getRHS x'          | SrcIL.VB_RHS e  => e
         | SrcIL.VB_RHS(SrcIL.EINAPP(rator, args)) => (E rator,args)  
51          | vb => raise Fail(concat[          | vb => raise Fail(concat[
52              "expected rhs operator for ", SrcIL.Var.toString x,              "expected rhs operator for ", SrcIL.Var.toString x,
53              "but found ", SrcIL.vbToString vb              "but found ", SrcIL.vbToString vb
54          ])          ])
55          (* end case *))          (* end case *))
56    
   
   
57      fun cvtTy SrcTy.BoolTy = DstTy.BoolTy      fun cvtTy SrcTy.BoolTy = DstTy.BoolTy
58        | cvtTy SrcTy.StringTy = DstTy.StringTy        | cvtTy SrcTy.StringTy = DstTy.StringTy
59        | cvtTy SrcTy.IntTy = DstTy.intTy        | cvtTy SrcTy.IntTy = DstTy.intTy
# Line 78  Line 81 
81                               * about the image for the MidIL type.                               * about the image for the MidIL type.
82                               *)                               *)
83                                case getRHS x                                case getRHS x
84                                 of (O (SrcOp.LoadImage v), _) => DstTy.ImageTy v                                 of SrcIL.OP(SrcOp.LoadImage v, _) => DstTy.ImageTy v
85                                  | _ => raise Fail "bogus image variable"                                  | _ => raise Fail "bogus image variable"
86                                (* end case *))                                (* end case *))
87                            | _ => cvtTy(SrcIL.Var.ty x)                            | _ => cvtTy(SrcIL.Var.ty x)
# Line 147  Line 150 
150            end            end
151    
152    (* expand the field Inside operator into a image-space test *)    (* expand the field Inside operator into a image-space test *)
   
   
153      fun expandInside (env, result, pos, fld) = (case getRHS fld      fun expandInside (env, result, pos, fld) = (case getRHS fld
154             of (E _, [img, h]) =>(case (getRHS img, getRHS h)             of SrcIL.EINAPP( _, [img, h]) =>(case (getRHS img, getRHS h)
155                   of ((O(SrcOp.LoadImage v), _), (O(SrcOp.Kernel(h, _)),_)) => let                   of (SrcIL.OP(SrcOp.LoadImage v, _), SrcIL.OP(SrcOp.Kernel(h, _),_)) => let
156                        val pos = Env.rename (env, pos)                        val pos = Env.rename (env, pos)
157                        val img = Env.rename (env, img)                        val img = Env.rename (env, img)
   
                             (**********FIXME**)  
   
158                        val s = Kernel.support h                        val s = Kernel.support h
159                        val dim=ImageInfo.dim  v                        val dim=ImageInfo.dim  v
                         val _ =print("\n Inside<"^Int.toString dim)  
160                        val(_,x,code)=TE.WorldToImagespace(dim,v,pos,img)                        val(_,x,code)=TE.WorldToImagespace(dim,v,pos,img)
                      val _ =print">\n"  
   
   
161                      in code@[                      in code@[
162                          (result, DstIL.OP(DstOp.Inside(v, s), [x, img]))                          (result, DstIL.OP(DstOp.Inside(v, s), [x, img]))
163                        ] end                              ]
164                        end
165                    | _ => raise Fail "bogus kernel binding"                    | _ => raise Fail "bogus kernel binding"
166                  (* end case *))                  (* end case *))
167              | _ => raise Fail "bogus field binding"              | _ => raise Fail "bogus field binding"
168            (* end case *))            (* end case *))
169    
     fun mkDot n =mk.innerProduct([n],[n])  
     val  mkDivS  =mk.divScalar  
     fun mkScale n=mk.scaleTen [n]  
   
   
     fun mkEin(rator,args)= DstIL.EINAPP(rator, args)  
   
   
170    
171      fun arity (SrcTy.TensorTy[]) = 1      fun arity (SrcTy.TensorTy[]) = 1
172        | arity (SrcTy.TensorTy[d]) = d        | arity (SrcTy.TensorTy[d]) = d
# Line 216  Line 203 
203                | SrcOp.Clamp ty => assign (DstOp.Clamp(cvtTy ty))                | SrcOp.Clamp ty => assign (DstOp.Clamp(cvtTy ty))
204                | SrcOp.Lerp ty => assign (DstOp.Lerp(cvtTy ty))                | SrcOp.Lerp ty => assign (DstOp.Lerp(cvtTy ty))
205                | SrcOp.Sqrt=>assign DstOp.Sqrt                | SrcOp.Sqrt=>assign DstOp.Sqrt
206                  | SrcOp.Norm(SrcTy.TensorTy alpha)=> let
207                        (*Note Norm is implemented with EINAPP as a summation over modulate*)
208                        val t = DstIL.Var.new (genName "t", DstTy.realTy)
209                        val t= useD t
210                        val a=Env.renameList(env, args)
211                        in  [(t,DstIL.EINAPP(mk.norm alpha,a@a)),
212                            (y, DstIL.OP( DstOp.Sqrt,[t]))
213                            ]
214                        end
215                  (*| SrcOp.Norm ty => assign (DstOp.Norm(cvtTy ty))*)
216                | SrcOp.Normalize ty=> assign (DstOp.Normalize(arity ty))                | SrcOp.Normalize ty=> assign (DstOp.Normalize(arity ty))
217                | SrcOp.PrincipleEvec ty => assign (DstOp.PrincipleEvec(cvtTy ty))                | SrcOp.PrincipleEvec ty => assign (DstOp.PrincipleEvec(cvtTy ty))
   
218                | SrcOp.Zero ty => assign (DstOp.Zero(cvtTy ty))                | SrcOp.Zero ty => assign (DstOp.Zero(cvtTy ty))
219                | SrcOp.Slice(ty, mask) => raise Fail "FIXME: Slice"                | SrcOp.Slice(ty, mask) => raise Fail "FIXME: Slice"
220                | SrcOp.TensorSub(ty as SrcTy.TensorTy _) => assign (DstOp.Subscript(cvtTy ty))                | SrcOp.TensorSub(ty as SrcTy.TensorTy _) => assign (DstOp.Subscript(cvtTy ty))
# Line 244  Line 240 
240            end            end
241  handle ex => (print(concat["error converting ", SrcOp.toString rator, "\n"]); raise ex)  handle ex => (print(concat["error converting ", SrcOp.toString rator, "\n"]); raise ex)
242    
243        (*expandEinOp: env* midil.var*EIN*mid-ilvar->DstIL.ASSGN list
244      (*expandEinOp: env* midil.var*EIN*mid-ilvar->code      * splits einapp and expands probes
     * splits einapp and probes it  
245      *)      *)
246      fun expandEinOp(env, y, rator, args) = let      fun expandEinOp(env, y, rator, args) = let
247          val einargs=Env.renameList(env, args)          val einargs=Env.renameList(env, args)
248          val einapp=(y,DstIL.EINAPP(rator,einargs))          val einapp=(y,DstIL.EINAPP(rator,einargs))
249          val (einapp2,newbies)= split.gettest(einapp)          val _=testp["\nOrig "^MidToString.printEINAPP einapp]
250            (*val einapp=handleE.zeroSweep einapp*)
251            val (einapp2,newbies)= split.gettest einapp
252          val code=List.map (fn e=>Probe.expandEinOp e) (newbies@[einapp2])          val code=List.map (fn e=>Probe.expandEinOp e) (newbies@[einapp2])
253          (*val _=test.test()*)          val flatcode= List.foldr op@ [] code
254            (*val _ =splittestcases.test()*)
255          in          in
256             List.foldr op@ [] code              List.map (fn (y,rator)=> DstIL.ASSGN(y,rator)) flatcode
257          end          end
258    
   
   
259    (* expand a SrcIL assignment to a list of DstIL assignments *)    (* expand a SrcIL assignment to a list of DstIL assignments *)
260      fun expand (env, (y, rhs)) = let      fun expand (env, (y, rhs)) = let
261            fun assign rhs = [DstIL.ASSGN(Env.rename (env, y), rhs)]            fun assign rhs = [DstIL.ASSGN(Env.rename (env, y), rhs)]
   
262            in            in
263              case rhs              case rhs
264                  of SrcIL.STATE x => (assign (DstIL.STATE(Env.renameSV(env, x))))                  of SrcIL.STATE x => (assign (DstIL.STATE(Env.renameSV(env, x))))
# Line 273  Line 268 
268                    List.map DstIL.ASSGN (expandOp (env, Env.rename (env, y), rator, args)))                    List.map DstIL.ASSGN (expandOp (env, Env.rename (env, y), rator, args)))
269                | SrcIL.APPLY(f, args) => (assign(DstIL.APPLY(f, Env.renameList(env, args))))                | SrcIL.APPLY(f, args) => (assign(DstIL.APPLY(f, Env.renameList(env, args))))
270                | 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))))
271                | SrcIL.EINAPP(rator, args) =>   List.map (fn (y,rator)=> DstIL.ASSGN(y,rator))                | SrcIL.EINAPP(rator, args) =>
272                  (expandEinOp (env, Env.rename (env, y), rator, args))                  (expandEinOp (env, Env.rename (env, y), rator, args))
   
273              (* end case *)              (* end case *)
274            end            end
275    

Legend:
Removed from v.2844  
changed lines
  Added in v.2845

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