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

SCM Repository

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

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

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

revision 3550, Wed Jan 6 15:51:57 2016 UTC revision 3582, Wed Jan 13 22:14:05 2016 UTC
# Line 52  Line 52 
52            (* end case *))            (* end case *))
53    
54    (* get the image referenced on a RHS and its border control (if any) *)    (* get the image referenced on a RHS and its border control (if any) *)
55      fun getRHSImage x = let      fun getRHSImage x = (case getRHSOp x
56            fun get x = (case getRHSOp x             of (SrcOp.BorderCtlDefault info, [img, v]) => (info, BCtl.Default v)
57                   of (SrcOp.LoadImage(SrcTy.ImageTy v, _), _) => v              | (SrcOp.BorderCtlClamp info, [img]) => (info, BCtl.clamp)
58                    | (SrcOp.Input(InP.INP{init=SOME(InP.Proxy(_, v)), ...}), _) => v              | (SrcOp.BorderCtlMirror info, [img]) => (info, BCtl.mirror)
59                    | (SrcOp.Input(InP.INP{init=SOME(InP.Image v), ...}), _) => v              | (SrcOp.BorderCtlWrap info, [img]) => (info, BCtl.wrap)
60                | (SrcOp.LoadImage(SrcTy.ImageTy info, _), _) => (info, BCtl.None)
61                    | _ => raise Fail "bogus image variable"                    | _ => raise Fail "bogus image variable"
62                  (* end case *))                  (* end case *))
           in  
             case getRHSOp x  
              of (SrcOp.BorderCtlDefault _, [img, v]) => (get img, BCtl.Default v)  
               | (SrcOp.BorderCtlClamp _, [img]) => (get img, BCtl.clamp)  
               | (SrcOp.BorderCtlMirror _, [img]) => (get img, BCtl.mirror)  
               | (SrcOp.BorderCtlWrap _, [img]) => (get img, BCtl.wrap)  
               | (SrcOp.LoadImage(SrcTy.ImageTy v, _), _) => (v, BCtl.None)  
               | (SrcOp.Input(InP.INP{init=SOME(InP.Proxy(_, v)), ...}), _) => (v, BCtl.None)  
               | (SrcOp.Input(InP.INP{init=SOME(InP.Image v), ...}), _) => (v, BCtl.None)  
               | _ => raise Fail "bogus image variable"  
             (* end case *)  
           end  
63    
64      fun cvtTy SrcTy.BoolTy = DstTy.BoolTy      fun cvtTy SrcTy.BoolTy = DstTy.BoolTy
65        | cvtTy SrcTy.StringTy = DstTy.StringTy        | cvtTy SrcTy.StringTy = DstTy.StringTy
66        | cvtTy SrcTy.IntTy = DstTy.intTy        | cvtTy SrcTy.IntTy = DstTy.intTy
67        | cvtTy (SrcTy.TensorTy dd) = DstTy.tensorTy dd        | cvtTy (SrcTy.TensorTy dd) = DstTy.tensorTy dd
       | cvtTy (SrcTy.TupleTy tys) = DstTy.TupleTy(List.map cvtTy tys)  
68        | cvtTy (SrcTy.SeqTy(ty, n)) = DstTy.SeqTy(cvtTy ty, n)        | cvtTy (SrcTy.SeqTy(ty, n)) = DstTy.SeqTy(cvtTy ty, n)
69      (* we replace Kernel and Field operations by 0, so the types are mapped to int *)      (* we replace Kernel and Field operations by 0, so the types are mapped to int *)
70        | cvtTy SrcTy.KernelTy = DstTy.KernelTy        | cvtTy SrcTy.KernelTy = DstTy.KernelTy
# Line 106  Line 94 
94                  val t = DstIR.Var.new("n", DstTy.realTy)                  val t = DstIR.Var.new("n", DstTy.realTy)
95                  in [                  in [
96                    (t, DstIR.OP(DstOp.IntToReal, [Env.rename(env, n)])),                    (t, DstIR.OP(DstOp.IntToReal, [Env.rename(env, n)])),
97                    (y, DstIR.APPLY(MathFuns.pow, [x, t]))                    (y, DstIR.OP(DstOp.MathFn MathFns.POW, [x, t]))
98                  ] end                  ] end
99            in            in
100              case getConst n              case getConst n
# Line 135  Line 123 
123                        val pos = Env.rename (env, pos)                        val pos = Env.rename (env, pos)
124                        val img = Env.rename (env, img)                        val img = Env.rename (env, img)
125                        val s = Kernel.support h                        val s = Kernel.support h
126                        val dim = ImageInfo.dim  v                        val (_, x, code) = CoordSpaceTransform.worldToImage{info = v, img = img, pos = pos}
                       val (_, x, code) = TransformEin.worldToImagespace(dim, v, pos, img)  
127                        in                        in
128                          code @ [(result, DstIR.OP(DstOp.Inside(v, s), [x, img]))]                          code @ [(result, DstIR.OP(DstOp.Inside(v, s), [x, img]))]
129                        end                        end
# Line 159  Line 146 
146                    (y, DstIR.OP(DstOp.RealToInt 1, [t]))                    (y, DstIR.OP(DstOp.RealToInt 1, [t]))
147                  ] end                  ] end
148            fun dummy () = [(y, DstIR.LIT(Literal.Int 0))]            fun dummy () = [(y, DstIR.LIT(Literal.Int 0))]
149              fun copy () = let val [x] = args
150                    in
151                      [(y, DstIR.VAR(Env.rename(env, x)))]
152                    end
153            in            in
154              case rator              case rator
155               of SrcOp.IAdd => assign (DstOp.IAdd)               of SrcOp.IAdd => assign DstOp.IAdd
156                | SrcOp.ISub => assign (DstOp.ISub)                | SrcOp.ISub => assign DstOp.ISub
157                | SrcOp.IMul => assign (DstOp.IMul)                | SrcOp.IMul => assign DstOp.IMul
158                | SrcOp.IDiv => assign (DstOp.IDiv)                | SrcOp.IDiv => assign DstOp.IDiv
159                | SrcOp.IMod => assign (DstOp.IMod)                | SrcOp.IMod => assign DstOp.IMod
160                | SrcOp.INeg => assign (DstOp.INeg)                | SrcOp.INeg => assign DstOp.INeg
161                | SrcOp.LT ty => assign (DstOp.LT(cvtTy ty))                | SrcOp.LT ty => assign (DstOp.LT(cvtTy ty))
162                | SrcOp.LTE ty => assign (DstOp.LTE(cvtTy ty))                | SrcOp.LTE ty => assign (DstOp.LTE(cvtTy ty))
163                | SrcOp.EQ ty => assign (DstOp.EQ(cvtTy ty))                | SrcOp.EQ ty => assign (DstOp.EQ(cvtTy ty))
# Line 199  Line 190 
190                      [(y, DstIR.EINAPP(rator, a))]                      [(y, DstIR.EINAPP(rator, a))]
191                    end                    end
192                | SrcOp.TensorIndex(ty as SrcTy.TensorTy _) => assign (DstOp.Subscript(cvtTy ty))                | SrcOp.TensorIndex(ty as SrcTy.TensorTy _) => assign (DstOp.Subscript(cvtTy ty))
               | SrcOp.Select(ty as SrcTy.TupleTy _, i) => assign (DstOp.Select(cvtTy ty, i))  
193                | SrcOp.Select(ty as SrcTy.SeqTy _, i) => assign (DstOp.Index(cvtTy ty, i))                | SrcOp.Select(ty as SrcTy.SeqTy _, i) => assign (DstOp.Index(cvtTy ty, i))
194                | SrcOp.Subscript(ty as SrcTy.SeqTy _) => assign (DstOp.Subscript(cvtTy ty))                | SrcOp.Subscript(ty as SrcTy.SeqTy _) => assign (DstOp.Subscript(cvtTy ty))
195                  | SrcOp.MkDynamic(ty, n) => assign (DstOp.MkDynamic(cvtTy ty, n))
196                  | SrcOp.Append ty => assign (DstOp.Append(cvtTy ty))
197                  | SrcOp.Prepend ty => assign (DstOp.Prepend(cvtTy ty))
198                  | SrcOp.Concat ty => assign (DstOp.Concat(cvtTy ty))
199                  | SrcOp.Range => assign DstOp.Range
200                  | SrcOp.Length ty => assign (DstOp.Length(cvtTy ty))
201                  | SrcOp.SphereQuery(ty1, ty2) => assign (DstOp.SphereQuery(cvtTy ty1, cvtTy ty2))
202                | SrcOp.IntToReal => assign DstOp.IntToReal                | SrcOp.IntToReal => assign DstOp.IntToReal
203                | SrcOp.TruncToInt => cvtToInt (DstOp.Trunc 1)                | SrcOp.TruncToInt => cvtToInt (DstOp.Trunc 1)
204                | SrcOp.RoundToInt => cvtToInt (DstOp.Round 1)                | SrcOp.RoundToInt => cvtToInt (DstOp.Round 1)
205                | SrcOp.CeilToInt => cvtToInt (DstOp.Ceiling 1)                | SrcOp.CeilToInt => cvtToInt (DstOp.Ceiling 1)
206                | SrcOp.FloorToInt => cvtToInt (DstOp.Floor 1)                | SrcOp.FloorToInt => cvtToInt (DstOp.Floor 1)
207    (* FIXME: are we going to use these? *)
208                  | SrcOp.R_All ty => assign (DstOp.R_All(cvtTy ty))
209                  | SrcOp.R_Exists ty => assign (DstOp.R_Exists(cvtTy ty))
210                  | SrcOp.R_Max ty => assign (DstOp.R_Max(cvtTy ty))
211                  | SrcOp.R_Min ty => assign (DstOp.R_Min(cvtTy ty))
212                  | SrcOp.R_Sum ty => assign (DstOp.R_Sum(cvtTy ty))
213                  | SrcOp.R_Product ty => assign (DstOp.R_Product(cvtTy ty))
214                  | SrcOp.R_Mean ty => assign (DstOp.R_Mean(cvtTy ty))
215                  | SrcOp.R_Variance ty => assign (DstOp.R_Variance(cvtTy ty))
216                | SrcOp.Kernel h => assign (DstOp.Kernel h)                | SrcOp.Kernel h => assign (DstOp.Kernel h)
217                | SrcOp.Inside _ => (case args                | SrcOp.Inside _ => (case args
218                     of [pos, fld] => expandInside(env, y, pos, fld)                     of [pos, fld] => expandInside(env, y, pos, fld)
219                    (* end case *))                    (* end case *))
220                | SrcOp.LoadImage(ty, info) => assign (DstOp.LoadImage(DstTy.ImageTy info, info))                | SrcOp.ImageDim(info, i) => assign (DstOp.ImageDim(info, i))
221                  | SrcOp.BorderCtlDefault info => (case args
222                       of [x, _] => [(y, DstIR.VAR(Env.rename(env, x)))]
223                      (* end case *))
224                  | SrcOp.BorderCtlClamp info => copy()
225                  | SrcOp.BorderCtlMirror info => copy()
226                  | SrcOp.BorderCtlWrap info => copy()
227                  | SrcOp.LoadSeq(ty, file) => assign (DstOp.LoadSeq(cvtTy ty, file))
228                  | SrcOp.LoadImage(ty, file) => assign (DstOp.LoadImage(cvtTy ty, file))
229                | rator => raise Fail("bogus operator " ^ SrcOp.toString rator)                | rator => raise Fail("bogus operator " ^ SrcOp.toString rator)
230              (* end case *)              (* end case *)
231            end            end

Legend:
Removed from v.3550  
changed lines
  Added in v.3582

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