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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/tree-ir/check-tree.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/tree-ir/check-tree.sml

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

revision 3857, Sat May 14 14:13:04 2016 UTC revision 3859, Sat May 14 18:04:49 2016 UTC
# Line 8  Line 8 
8   * TODO: check global and state variable consistency   * TODO: check global and state variable consistency
9   *)   *)
10    
11  (* FIXME: this module needs to be parameterized over the vector layout of the target *)  (* FIXME: the cehcking function should be parameterized over the vector layout of the target *)
12    
13  structure CheckTree : sig  structure CheckTree : sig
14    
# Line 48  Line 48 
48      fun eigenSig dim = let      fun eigenSig dim = let
49            val tplTy = Ty.TupleTy[            val tplTy = Ty.TupleTy[
50                    Ty.SeqTy(Ty.realTy, SOME dim),                    Ty.SeqTy(Ty.realTy, SOME dim),
51                    Ty.SeqTy(Ty.vecTy dim, SOME dim)                    Ty.SeqTy(Ty.VecTy(dim, dim), SOME dim)
52                  ]                  ]
53            in            in
54  (* FIXME: what about pieces? *)  (* FIXME: what about pieces? *)
# Line 80  Line 80 
80              | Op.Abs ty => (ty, [ty])              | Op.Abs ty => (ty, [ty])
81              | Op.Max ty => (ty, [ty, ty])              | Op.Max ty => (ty, [ty, ty])
82              | Op.Min ty => (ty, [ty, ty])              | Op.Min ty => (ty, [ty, ty])
83              | Op.VAdd d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d])              | Op.VAdd d => (Ty.VecTy(d, d), [Ty.VecTy(d, d), Ty.VecTy(d, d)])
84              | Op.VSub d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d])              | Op.VSub d => (Ty.VecTy(d, d), [Ty.VecTy(d, d), Ty.VecTy(d, d)])
85              | Op.VScale d => (Ty.vecTy d, [Ty.realTy, Ty.vecTy d])              | Op.VScale d => (Ty.VecTy(d, d), [Ty.realTy, Ty.VecTy(d, d)])
86              | Op.VMul d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d])              | Op.VMul d => (Ty.VecTy(d, d), [Ty.VecTy(d, d), Ty.VecTy(d, d)])
87              | Op.VNeg d => (Ty.vecTy d, [Ty.vecTy d])              | Op.VNeg d => (Ty.VecTy(d, d), [Ty.VecTy(d, d)])
88              | Op.VSum d => (Ty.realTy, [Ty.vecTy d])              | Op.VSum d => (Ty.realTy, [Ty.VecTy(d, d)])
89              | Op.VClamp d => (Ty.vecTy d, [Ty.vecTy d, Ty.realTy, Ty.realTy])              | Op.VClamp d => (Ty.VecTy(d, d), [Ty.VecTy(d, d), Ty.realTy, Ty.realTy])
90              | Op.VMapClamp d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d, Ty.vecTy d])              | Op.VMapClamp d => (Ty.VecTy(d, d), [Ty.VecTy(d, d), Ty.VecTy(d, d), Ty.VecTy(d, d)])
91              | Op.VLerp d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d, Ty.realTy])              | Op.VLerp d => (Ty.VecTy(d, d), [Ty.VecTy(d, d), Ty.VecTy(d, d), Ty.realTy])
92              | Op.TensorIndex(ty, _) => (Ty.realTy, [ty])              | Op.TensorIndex(ty, _) => (Ty.realTy, [ty])
93              | Op.ProjectLast(ty as Ty.TensorTy dd, _) => (Ty.TensorTy[List.last dd], [ty])              | Op.ProjectLast(ty as Ty.TensorTy dd, _) => (Ty.TensorTy[List.last dd], [ty])
94              | Op.EigenVecs2x2 => eigenSig 2              | Op.EigenVecs2x2 => eigenSig 2
# Line 109  Line 109 
109              | Op.Sqrt => (Ty.realTy, [Ty.realTy])              | Op.Sqrt => (Ty.realTy, [Ty.realTy])
110              | Op.Cos => (Ty.realTy, [Ty.realTy])              | Op.Cos => (Ty.realTy, [Ty.realTy])
111              | Op.ArcCos => (Ty.realTy, [Ty.realTy])              | Op.ArcCos => (Ty.realTy, [Ty.realTy])
112              | Op.Sine => (Ty.realTy, [Ty.realTy])              | Op.Sin => (Ty.realTy, [Ty.realTy])
113              | Op.ArcSin => (Ty.realTy, [Ty.realTy])              | Op.ArcSin => (Ty.realTy, [Ty.realTy])
114              | Op.Tan => (Ty.realTy, [Ty.realTy])              | Op.Tan => (Ty.realTy, [Ty.realTy])
115              | Op.ArcTan => (Ty.realTy, [Ty.realTy])              | Op.ArcTan => (Ty.realTy, [Ty.realTy])
116              | Op.Exp => (Ty.realTy, [Ty.realTy])              | Op.Exp => (Ty.realTy, [Ty.realTy])
117              | Op.Ceiling d => (Ty.vecTy d, [Ty.vecTy d])              | Op.Ceiling d => (Ty.VecTy(d, d), [Ty.VecTy(d, d)])
118              | Op.Floor d => (Ty.vecTy d, [Ty.vecTy d])              | Op.Floor d => (Ty.VecTy(d, d), [Ty.VecTy(d, d)])
119              | Op.Round d => (Ty.vecTy d, [Ty.vecTy d])              | Op.Round d => (Ty.VecTy(d, d), [Ty.VecTy(d, d)])
120              | Op.Trunc d => (Ty.vecTy d, [Ty.vecTy d])              | Op.Trunc d => (Ty.VecTy(d, d), [Ty.VecTy(d, d)])
121              | Op.IntToReal => (Ty.realTy, [Ty.intTy])              | Op.IntToReal => (Ty.realTy, [Ty.intTy])
122              | Op.RealToInt 1 => (Ty.IntTy, [Ty.realTy])              | Op.RealToInt 1 => (Ty.IntTy, [Ty.realTy])
123              | Op.RealToInt d => (Ty.SeqTy(Ty.IntTy, SOME d), [Ty.vecTy d])              | Op.RealToInt d => (Ty.SeqTy(Ty.IntTy, SOME d), [Ty.VecTy(d, d)])
124  (* not sure if we will need these  (* not sure if we will need these
125        | R_All of ty        | R_All of ty
126        | R_Exists of ty        | R_Exists of ty
# Line 148  Line 148 
148                  end                  end
149  *)  *)
150              | Op.ControlIndex(info, _, _) => (Ty.IntTy, [Ty.ImageTy info, Ty.IntTy])              | Op.ControlIndex(info, _, _) => (Ty.IntTy, [Ty.ImageTy info, Ty.IntTy])
151              | Op.Inside(info, _) => (Ty.BoolTy, [Ty.vecTy(ImageInfo.dim info), Ty.ImageTy info])              | Op.Inside(info, _) => (Ty.BoolTy, [Ty.VecTy(ImageInfo.dim info), Ty.ImageTy info])
152              | Op.ImageDim(info, _) => (Ty.IntTy, [Ty.ImageTy info])              | Op.ImageDim(info, _) => (Ty.IntTy, [Ty.ImageTy info])
153              | Op.LoadSeq(ty, _) => (ty, [])              | Op.LoadSeq(ty, _) => (ty, [])
154              | Op.LoadImage(ty, _) => (ty, [])              | Op.LoadImage(ty, _) => (ty, [])
155              | Op.MathFn f => MathFns.sigOf (Ty.RealTy, f)              | Op.MathFn f => MathFns.sigOf (Ty.realTy, f)
156              | _ => raise Fail("sigOf: invalid operator " ^ Op.toString rator)              | _ => raise Fail("sigOf: invalid operator " ^ Op.toString rator)
157            (* end case *))            (* end case *))
158    
# Line 179  Line 179 
179                        fun chk e = (case e                        fun chk e = (case e
180                               of IR.E_Global gv => GVar.ty gv                               of IR.E_Global gv => GVar.ty gv
181                                | IR.E_State sv => SVar.ty sv                                | IR.E_State sv => SVar.ty sv
182                                | IR.E_Var x => Var.ty x                                | IR.E_Var x => (checkVar(bvs, x); Var.ty x)
183                                | IR.E_Lit(Literal.Int _) => Ty.IntTy                                | IR.E_Lit(Literal.Int _) => Ty.IntTy
184                                | IR.E_Lit(Literal.Real _) => Ty.realTy                                | IR.E_Lit(Literal.Real _) => Ty.realTy
185                                | IR.E_Lit(Literal.String _) => Ty.StringTy                                | IR.E_Lit(Literal.String _) => Ty.StringTy
# Line 198  Line 198 
198                                          ];                                          ];
199                                      resTy                                      resTy
200                                    end                                    end
201                                  | IR.E_Vec es => raise Fail "FIXME"
202                                | IR.E_Cons([], ty) => (                                | IR.E_Cons([], ty) => (
203                                    errFn [S "empty cons"];                                    errFn [S "empty cons"];
204                                    ty)                                    ty)
# Line 211  Line 212 
212                                            NL, S "  found:    ", S(Int.toString(length es))                                            NL, S "  found:    ", S(Int.toString(length es))
213                                          ]                                          ]
214                                        else ();                                        else ();
215                                      chkElems ("cons", Ty.RealTy, es);                                      chkElems ("cons", Ty.realTy, es);
216                                      consTy                                      consTy
217                                    end                                    end
218                                | IR.E_Cons(es, ty) => (                                | IR.E_Cons(es, ty) => (
# Line 238  Line 239 
239                                    errFn [S "unexpected type for sequence: ", TY ty];                                    errFn [S "unexpected type for sequence: ", TY ty];
240                                    ty)                                    ty)
241                                | IR.E_Pack es => raise Fail "FIXME"                                | IR.E_Pack es => raise Fail "FIXME"
242                                | IR.E_Select(e, i) => raise Fail "FIXME"                                | IR.E_VLoad(e, i) => raise Fail "FIXME"
243                              (* end case *))                              (* end case *))
244                        and chkElems (cxt, ty, []) = ()                        and chkElems (cxt, ty, []) = ()
245                          | chkElems (cxt, ty, e::es) = let                          | chkElems (cxt, ty, e::es) = let
# Line 268  Line 269 
269                                      NL, S "lhs: ", TY(Var.ty x),                                      NL, S "lhs: ", TY(Var.ty x),
270                                      NL, S "rhs: ", TY ty                                      NL, S "rhs: ", TY ty
271                                    ];                                    ];
272                                bvs                                if isDef
273                                    then VSet.add(bvs, x)
274                                    else (checkVar(bvs, x); bvs)
275                              end                              end
276                            | IR.S_MAssign(xs, e) => raise Fail "FIXME"
277                          | IR.S_GAssign(gv, e) => let                          | IR.S_GAssign(gv, e) => let
278                              val ty = chkExp (bvs, e)                              val ty = chkExp (bvs, e)
279                              in                              in
# Line 321  Line 325 
325                              (* end case *);                              (* end case *);
326                              ignore (chkBlock (VSet.add(bvs, x), b));                              ignore (chkBlock (VSet.add(bvs, x), b));
327                              bvs)                              bvs)
328                          | IR.S_LoadNrrd(x, name) => bvs (* FIXME: check type if x *)                          | IR.S_LoadNrrd(x, name) => bvs (* FIXME: check type of x *)
329                          | IR.S_Input(gv, _, _, NONE) => bvs                          | IR.S_Input(gv, _, _, NONE) => bvs
330                          | IR.S_Input(gv, _, _, SOME e) => let                          | IR.S_Input(gv, _, _, SOME e) => let
331                              val ty = chkExp (bvs, e)                              val ty = chkExp (bvs, e)
# Line 361  Line 365 
365                                    ];                                    ];
366                                bvs                                bvs
367                              end                              end
368                          | IR.S_Exit es => (                          | IR.S_Exit => bvs
                             List.app (fn e => ignore (chkExp(bvs, e))) es;  
                             bvs)  
369                          | IR.S_Print(tys, es) => (                          | IR.S_Print(tys, es) => (
370                              if (length tys <> length es)                              if (length tys <> length es)
371                                then errFn [                                then errFn [

Legend:
Removed from v.3857  
changed lines
  Added in v.3859

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