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

SCM Repository

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

Diff of /trunk/src/compiler/high-to-mid/high-to-mid.sml

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

revision 2635, Mon May 26 14:06:39 2014 UTC revision 2636, Tue May 27 16:18:36 2014 UTC
# Line 20  Line 20 
20      structure DstIL = MidIL      structure DstIL = MidIL
21      structure DstTy = MidILTypes      structure DstTy = MidILTypes
22      structure DstOp = MidOps      structure DstOp = MidOps
23        structure InP = Inputs
24    
25      fun getRHS x  = (case SrcIL.Var.binding x      fun getRHS x  = (case SrcIL.Var.binding x
26             of SrcIL.VB_RHS(SrcIL.OP(rator, args)) => (rator, args)             of SrcIL.VB_RHS(SrcIL.OP(rator, args)) => (rator, args)
# Line 30  Line 31 
31                  ])                  ])
32            (* end case *))            (* end case *))
33    
34        fun getRHSImage x = (case getRHS x
35               of (SrcOp.LoadImage(_, _, v), _) => v
36                | (SrcOp.Input(InP.INP{init=SOME(InP.Proxy(_, v)), ...}), _) => v
37                | (SrcOp.Input(InP.INP{init=SOME(InP.Image v), ...}), _) => v
38                | _ => raise Fail "bogus image variable"
39              (* end case *))
40    
41      fun cvtTy SrcTy.BoolTy = DstTy.BoolTy      fun cvtTy SrcTy.BoolTy = DstTy.BoolTy
42        | cvtTy SrcTy.StringTy = DstTy.StringTy        | cvtTy SrcTy.StringTy = DstTy.StringTy
43        | cvtTy SrcTy.IntTy = DstTy.intTy        | cvtTy SrcTy.IntTy = DstTy.intTy
# Line 50  Line 58 
58               of SOME x' => x'               of SOME x' => x'
59                | NONE => let                | NONE => let
60                    val dstTy = (case SrcIL.Var.ty x                    val dstTy = (case SrcIL.Var.ty x
61                           of SrcTy.ImageTy _ => (                           of SrcTy.ImageTy _ =>
62                              (* for variables with image type, we need more detailed information                              (* for variables with image type, we need more detailed information
63                               * about the image for the MidIL type.                               * about the image for the MidIL type.
64                               *)                               *)
65                                case getRHS x                                DstTy.ImageTy(getRHSImage x)
                                of (SrcOp.LoadImage v, _) => DstTy.ImageTy v  
                                 | _ => raise Fail "bogus image variable"  
                               (* end case *))  
66                            | _ => cvtTy(SrcIL.Var.ty x)                            | _ => cvtTy(SrcIL.Var.ty x)
67                          (* end case *))                          (* end case *))
68                    val x' = DstIL.Var.new (SrcIL.Var.name x, dstTy)                    val x' = DstIL.Var.new (SrcIL.Var.name x, dstTy)
# Line 125  Line 130 
130    
131    (* expand the field Inside operator into a image-space test *)    (* expand the field Inside operator into a image-space test *)
132      fun expandInside (env, result, pos, fld) = (case getRHS fld      fun expandInside (env, result, pos, fld) = (case getRHS fld
133             of (SrcOp.Field d, [img, h]) => (case (getRHS img, getRHS h)             of (SrcOp.Field d, [img, h]) => (case (getRHSImage img, getRHS h)
134                   of ((SrcOp.LoadImage v, _), (SrcOp.Kernel(h, _), [])) => let                   of (v, (SrcOp.Kernel(h, _), [])) => let
135                        val pos = Env.rename (env, pos)                        val pos = Env.rename (env, pos)
136                        val img = Env.rename (env, img)                        val img = Env.rename (env, img)
137                        val imgPos = DstIL.Var.new ("x", DstTy.vecTy d)                        val imgPos = DstIL.Var.new ("x", DstTy.vecTy d)
# Line 141  Line 146 
146            (* end case *))            (* end case *))
147    
148      fun expandProbe (env, result, fld, pos) = (case getRHS fld      fun expandProbe (env, result, fld, pos) = (case getRHS fld
149             of (SrcOp.Field _, [img, h]) => (case (getRHS img, getRHS h)             of (SrcOp.Field _, [img, h]) => (case (getRHSImage img, getRHS h)
150                   of ((SrcOp.LoadImage v, _), (SrcOp.Kernel(h, k), _)) => Probe.expand {                   of (v, (SrcOp.Kernel(h, k), _)) => Probe.expand {
151                          result = result,                          result = result,
152                          img = Env.rename (env, img),                          img = Env.rename (env, img),
153                          v = v, h = h, k = k,                          v = v, h = h, k = k,
# Line 254  Line 259 
259                | SrcOp.CeilToInt => cvtToInt (DstOp.Ceiling 1)                | SrcOp.CeilToInt => cvtToInt (DstOp.Ceiling 1)
260                | SrcOp.FloorToInt => cvtToInt (DstOp.Floor 1)                | SrcOp.FloorToInt => cvtToInt (DstOp.Floor 1)
261                | SrcOp.Kernel _ => dummy()                | SrcOp.Kernel _ => dummy()
               | SrcOp.LoadImage info => assign (DstOp.LoadImage info)  
262                | SrcOp.Inside _ => (case args                | SrcOp.Inside _ => (case args
263                     of [pos, fld] => expandInside(env, y, pos, fld)                     of [pos, fld] => expandInside(env, y, pos, fld)
264                    (* end case *))                    (* end case *))
# Line 268  Line 272 
272                | SrcOp.ScaleField => dummy()                | SrcOp.ScaleField => dummy()
273                | SrcOp.NegField => dummy()                | SrcOp.NegField => dummy()
274                | SrcOp.DiffField => dummy()                | SrcOp.DiffField => dummy()
275                | SrcOp.Input(ty, s, desc) => assign (DstOp.Input(cvtTy ty, s, desc))                | SrcOp.LoadImage(ty, nrrd, info) =>
276                | SrcOp.InputWithDefault(ty, s, desc) =>                    assign (DstOp.LoadImage(DstTy.ImageTy info, nrrd, info))
277                    assign (DstOp.InputWithDefault(cvtTy ty, s, desc))                | SrcOp.Input inp => (case Inputs.imageInfo inp
278                       of SOME info => let
279                            val Inputs.INP{name, desc, init, ...} = inp
280                            in
281                              assign (DstOp.Input(Inputs.INP{
282                                  ty = DstTy.ImageTy info,
283                                  name = name, desc = desc,
284                                  init = init
285                                }))
286                            end
287                        | _ => assign (DstOp.Input(Inputs.map cvtTy inp))
288                      (* end case *))
289                | rator => raise Fail("bogus operator " ^ SrcOp.toString rator)                | rator => raise Fail("bogus operator " ^ SrcOp.toString rator)
290              (* end case *)              (* end case *)
291            end            end

Legend:
Removed from v.2635  
changed lines
  Added in v.2636

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