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

SCM Repository

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

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

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

revision 365, Wed Sep 29 20:07:58 2010 UTC revision 394, Thu Oct 14 16:30:29 2010 UTC
# Line 13  Line 13 
13    end = struct    end = struct
14    
15      structure SrcIL = HighIL      structure SrcIL = HighIL
16        structure SrcTy = HighILTypes
17      structure SrcOp = HighOps      structure SrcOp = HighOps
18      structure VTbl = SrcIL.Var.Tbl      structure VTbl = SrcIL.Var.Tbl
19      structure DstIL = MidIL      structure DstIL = MidIL
20        structure DstTy = MidILTypes
21      structure DstOp = MidOps      structure DstOp = MidOps
22    
23      type var_env = DstIL.var SrcIL.Var.Tbl.hash_table      type var_env = DstIL.var VTbl.hash_table
24    
25        fun cvtTy SrcTy.BoolTy = DstTy.BoolTy
26          | cvtTy SrcTy.StringTy = DstTy.StringTy
27          | cvtTy SrcTy.IntTy = DstTy.intTy
28          | cvtTy (SrcTy.TensorTy[]) = DstTy.realTy
29          | cvtTy (SrcTy.TensorTy[d]) = DstTy.VecTy d
30          | cvtTy _ = raise Fail "unexpected higher-order tensor type"
31    
32      fun rename (env : var_env, x) = (case VTbl.find env x      fun rename (env : var_env, x) = (case VTbl.find env x
33             of SOME x' => x'             of SOME x' => x'
34              | NONE => let              | NONE => let
35                  val x' = DstIL.Var.new (SrcIL.Var.name x)                  val x' = DstIL.Var.new (SrcIL.Var.name x, cvtTy(SrcIL.Var.ty x))
36                  in                  in
37                    VTbl.insert env (x, x');                    VTbl.insert env (x, x');
38                    x'                    x'
39                  end                  end
40            (* end case *))            (* end case *))
41        fun renameList (env, xs) = List.map (fn x => rename(env, x)) xs
42    
43    (* expand the field Inside operator into a image-space test *)    (* expand the field Inside operator into a image-space test *)
44      fun expandInside (env, result, pos, fld) = let      fun expandInside (env, result, pos, fld) = let
# Line 38  Line 48 
48                    | _ => raise Fail "bogus field binding"                    | _ => raise Fail "bogus field binding"
49                  (* end case *))                  (* end case *))
50            fun expand (FieldDef.CONV(_, img, _)) = let            fun expand (FieldDef.CONV(_, img, _)) = let
51                  val imgPos = DstIL.Var.new "x"                  val imgPos = DstIL.Var.new ("x", DstTy.VecTy(ImageInfo.dim img))
52                  in [                  in [
53                    (imgPos, DstIL.OP(DstOp.Transform img, [pos])),                    (imgPos, DstIL.OP(DstOp.Transform img, [pos])),
54                    (result, DstIL.OP(DstOp.Inside img, [imgPos]))                    (result, DstIL.OP(DstOp.Inside img, [imgPos]))
# Line 59  Line 69 
69              Probe.expand (result, fld, pos)              Probe.expand (result, fld, pos)
70            end            end
71    
72      fun cvtTy SrcOp.BoolTy = DstOp.BoolTy      fun arity (SrcTy.TensorTy[]) = 1
73        | cvtTy SrcOp.StringTy = DstOp.StringTy        | arity (SrcTy.TensorTy[d]) = d
       | cvtTy SrcOp.IntTy = DstOp.IntTy  
       | cvtTy (SrcOp.TensorTy[]) = DstOp.realTy  
       | cvtTy (SrcOp.TensorTy[d]) = DstOp.VecTy d  
       | cvtTy _ = raise Fail "unexpected higher-order tensor type"  
   
     fun arity (SrcOp.TensorTy[]) = 1  
       | arity (SrcOp.TensorTy[d]) = d  
74        | arity _ = raise Fail "arity"        | arity _ = raise Fail "arity"
75    
76      fun expandOp (env, y, rator, args) = let      fun expandOp (env, y, rator, args) = let
77            fun assign rator' =            fun assign rator' =
78                  [(y, DstIL.OP(rator', List.map (fn x => rename(env, x)) args))]                  [(y, DstIL.OP(rator', renameList(env, args)))]
79            in            in
80              case rator              case rator
81               of SrcOp.Add ty => assign (DstOp.Add(cvtTy ty))               of SrcOp.Add ty => assign (DstOp.Add(cvtTy ty))
# Line 122  Line 125 
125              (* end case *)              (* end case *)
126            end            end
127    
128      (* expand a SrcIL assignment to a list of DstIL assignments *)
129      fun expand (env, (y, rhs)) = let      fun expand (env, (y, rhs)) = let
130            val y' = rename (env, y)            val y' = rename (env, y)
131            fun assign rhs = [(y', rhs)]            fun assign rhs = [(y', rhs)]
# Line 129  Line 133 
133              case rhs              case rhs
134               of SrcIL.VAR x => assign (DstIL.VAR(rename(env, x)))               of SrcIL.VAR x => assign (DstIL.VAR(rename(env, x)))
135                | SrcIL.LIT lit => assign (DstIL.LIT lit)                | SrcIL.LIT lit => assign (DstIL.LIT lit)
136                | SrcIL.OP(rator, args) =>                | SrcIL.OP(rator, args) => expandOp (env, y', rator, args)
137                    expandOp (env, y', rator, args)                | SrcIL.CONS args => assign (DstIL.CONS(renameList(env, args)))
               | SrcIL.CONS args =>  
                   assign (DstIL.CONS(List.map (fn x => rename(env, x)) args))  
138              (* end case *)              (* end case *)
139            end            end
140    
# Line 147  Line 149 
149          val expand = expand          val expand = expand
150        end)        end)
151    
152      fun translate (SrcIL.Program{globals, globalInit, actors}) =      fun translate (SrcIL.Program{globals, globalInit, actors}) = let
153            raise Fail "unimplemented"            val env = VTbl.mkTable (256, Fail "env")
154              fun transMethod (SrcIL.Method{name, stateIn, stateOut, body}) =
155                    DstIL.Method{
156                        name = name,
157                        stateIn = renameList (env, stateIn),
158                        stateOut = renameList (env, stateOut),
159                        body = Trans.translate (env, body)
160                      }
161              fun transActor (SrcIL.Actor{name, params, state, stateInit, methods}) =
162                    DstIL.Actor{
163                        name = name,
164                        params = renameList (env, params),
165                        state = renameList (env, state),
166                        stateInit = Trans.translate (env, stateInit),
167                        methods = List.map transMethod methods
168                      }
169              in
170                DstIL.Program{
171                    globals = renameList (env, globals),
172                    globalInit = Trans.translate (env, globalInit),
173                    actors = List.map transActor actors
174                  }
175              end
176    
177    end    end

Legend:
Removed from v.365  
changed lines
  Added in v.394

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