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 3766, Mon Apr 18 16:13:31 2016 UTC revision 3767, Mon Apr 18 18:42:10 2016 UTC
# 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, SOME dim)
52                  ]                  ]
53            in            in
54              (tplTy, [Ty.TensorTy[dim, dim]])  (* FIXME: what about pieces? *)
55                (tplTy, [Ty.TensorTy(dim, Ty.vecTy dim)])
56            end            end
57    
58    (* Return the signature of a TreeIR operator. *)    (* Return the signature of a TreeIR operator. *)
# Line 79  Line 80 
80              | Op.Min ty => (ty, [ty, ty])              | Op.Min ty => (ty, [ty, ty])
81              | Op.Clamp ty => (ty, [Ty.realTy, Ty.realTy, ty])              | Op.Clamp ty => (ty, [Ty.realTy, Ty.realTy, ty])
82              | Op.Lerp ty => (ty, [ty, ty, Ty.realTy])              | Op.Lerp ty => (ty, [ty, ty, Ty.realTy])
83              | Op.VAdd d => (Ty.VecTy d, [Ty.VecTy d, Ty.VecTy d])              | Op.VAdd d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d])
84              | Op.VSub d => (Ty.VecTy d, [Ty.VecTy d, Ty.VecTy d])              | Op.VSub d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d])
85              | Op.VScale d => (Ty.VecTy d, [Ty.realTy, Ty.VecTy d])              | Op.VScale d => (Ty.vecTy d, [Ty.realTy, Ty.vecTy d])
86              | Op.VMul d => (Ty.VecTy d, [Ty.VecTy d, Ty.VecTy d])              | Op.VMul d => (Ty.vecTy d, [Ty.vecTy d, Ty.vecTy d])
87              | Op.VNeg d => (Ty.VecTy d, [Ty.VecTy d])              | Op.VNeg d => (Ty.vecTy d, [Ty.vecTy d])
88              | Op.VSum d => (Ty.realTy, [Ty.VecTy d])              | Op.VSum d => (Ty.realTy, [Ty.vecTy d])
89  (*  (*
90  TensorIndex  TensorIndex
91  *)  *)
92              | Op.EigenVecs2x2 => eigenSig 2              | Op.EigenVecs2x2 => eigenSig 2
93              | Op.EigenVecs3x3 => eigenSig 3              | Op.EigenVecs3x3 => eigenSig 3
94              | Op.EigenVals2x2 => (Ty.SeqTy(Ty.realTy, SOME 2), [Ty.TensorTy[2,2]])  (* FIXME: what about pieces? *)
95              | Op.EigenVals3x3 => (Ty.SeqTy(Ty.realTy, SOME 3), [Ty.TensorTy[3,3]])              | Op.EigenVals2x2 => (Ty.SeqTy(Ty.realTy, SOME 2), [Ty.TensorTy(2, Ty.vecTy 2)])
96                | Op.EigenVals3x3 => (Ty.SeqTy(Ty.realTy, SOME 3), [Ty.TensorTy(3, Ty.vecTy 3)])
97              | Op.Zero ty => (ty, [])              | Op.Zero ty => (ty, [])
98              | Op.Select(ty as Ty.TupleTy tys, i) => (List.nth(tys, i-1), [ty])              | Op.Select(ty as Ty.TupleTy tys, i) => (List.nth(tys, i-1), [ty])
99              | Op.Subscript(ty as Ty.SeqTy(elemTy, _)) => (elemTy, [ty, Ty.intTy])              | Op.Subscript(ty as Ty.SeqTy(elemTy, _)) => (elemTy, [ty, Ty.intTy])
# Line 116  Line 118 
118              | Op.Trunc d => (Ty.vecTy d, [Ty.vecTy d])              | Op.Trunc d => (Ty.vecTy d, [Ty.vecTy d])
119              | Op.IntToReal => (Ty.realTy, [Ty.intTy])              | Op.IntToReal => (Ty.realTy, [Ty.intTy])
120              | Op.RealToInt 1 => (Ty.IntTy, [Ty.realTy])              | Op.RealToInt 1 => (Ty.IntTy, [Ty.realTy])
121              | Op.RealToInt d => (Ty.SeqTy(Ty.IntTy, SOME d), [Ty.VecTy d])              | Op.RealToInt d => (Ty.SeqTy(Ty.IntTy, SOME d), [Ty.vecTy d])
122  (* not sure if we will need these  (* not sure if we will need these
123        | R_All of ty        | R_All of ty
124        | R_Exists of ty        | R_Exists of ty
# Line 247  Line 249 
249                        end                        end
250                  fun chkStm (stm, bvs) = (case stm                  fun chkStm (stm, bvs) = (case stm
251                         of IR.S_Comment _ => bvs                         of IR.S_Comment _ => bvs
252                          | IR.S_Assign(xs, e) => let                          | IR.S_Unpack(xs, e) => let
253                              fun chkVar (x, ty) = if Ty.same(Var.ty x, ty)                              fun chkVar (x, ty) = if Ty.same(Var.ty x, ty)
254                                    then ()                                    then ()
255                                    else errFn[                                    else errFn[
# Line 257  Line 259 
259                                      ]                                      ]
260                              in                              in
261                                case (xs, chkExp (bvs, e))                                case (xs, chkExp (bvs, e))
262                                 of (_, Ty.CompVecTy dd) => (                                 of (_, Ty.VecTy(w, _, dd)) => (
263                                      if (List.length xs <> List.length dd)                                      if (List.length xs <> List.length dd)
264                                        then errFn [                                        then errFn [
265                                            S "arity mismatch in assigning composite vector",                                            S "arity mismatch in assigning composite vector",
# Line 265  Line 267 
267                                            NL, S"  rhs arity: ", S(Int.toString(List.length dd))                                            NL, S"  rhs arity: ", S(Int.toString(List.length dd))
268                                          ]                                          ]
269                                        else ();                                        else ();
270                                      ListPair.app (fn (sv, d) => chkVar(sv, Ty.VecTy d)) (xs, dd))                                      ListPair.app (fn (x, d) => chkVar(x, Ty.vecTy d)) (xs, dd))
271                                  | ([sv], ty) => chkVar (sv, ty)                                  | ([x], ty) => chkVar (x, ty)
272                                  | (_::_, ty) => errFn [                                  | (_::_, ty) => errFn [
273                                        S "assignment of non-composite value to (",                                        S "assignment of non-composite value to (",
274                                        S(String.concatWithMap "," Var.name xs), S ")"                                        S(String.concatWithMap "," Var.name xs), S ")"
# Line 274  Line 276 
276                                (* end case *);                                (* end case *);
277                                bvs                                bvs
278                              end                              end
279                            | IR.S_Assign(x, e) => let
280                                val ty = chkExp (bvs, e)
281                                in
282                                  if Ty.same(Var.ty x, ty)
283                                    then ()
284                                    else errFn[
285                                        S "type mismatch in assignment to local ", S(Var.name x),
286                                        NL, S "lhs: ", TY(Var.ty x),
287                                        NL, S "rhs: ", TY ty
288                                      ];
289                                  bvs
290                                end
291                          | IR.S_GAssign(gv, e) => let                          | IR.S_GAssign(gv, e) => let
292                              val ty = chkExp (bvs, e)                              val ty = chkExp (bvs, e)
293                              in                              in
# Line 352  Line 366 
366                          | IR.S_New(_, es) => (                          | IR.S_New(_, es) => (
367                              List.app (fn e => ignore (chkExp(bvs, e))) es;                              List.app (fn e => ignore (chkExp(bvs, e))) es;
368                              bvs)                              bvs)
369                          | IR.S_Save(svs, e) => let                          | IR.S_Save(sv, e) => let
370                              fun chkVar (sv, ty) = if Ty.same(SVar.ty sv, ty)                              val ty = chkExp (bvs, e)
371                                in
372                                  if Ty.same(SVar.ty sv, ty)
373                                    then ()                                    then ()
374                                    else errFn[                                    else errFn[
375                                        S "type mismatch in assignment to state variable ",                                        S "type mismatch in assignment to state variable ",
376                                        S(SVar.name sv),                                        S(SVar.name sv),
377                                        NL, S "lhs: ", TY(SVar.ty sv),                                        NL, S "lhs: ", TY(SVar.ty sv),
378                                        NL, S "rhs: ", TY ty                                        NL, S "rhs: ", TY ty
379                                      ]                                    ];
                             in  
                               case (svs, chkExp (bvs, e))  
                                of (_, Ty.CompVecTy dd) => (  
                                     if (List.length svs <> List.length dd)  
                                       then errFn [  
                                           S "arity mismatch in assigning composite vector",  
                                           NL, S"  lhs arity: ", S(Int.toString(List.length svs)),  
                                           NL, S"  rhs arity: ", S(Int.toString(List.length dd))  
                                         ]  
                                       else ();  
                                     ListPair.app (fn (sv, d) => chkVar(sv, Ty.VecTy d)) (svs, dd))  
                                 | ([sv], ty) => chkVar (sv, ty)  
                                 | (_::_, ty) => errFn [  
                                       S "assignment of non-composite value to (",  
                                       S(String.concatWithMap "," SVar.name svs), S ")"  
                                     ]  
                               (* end case *);  
380                                bvs                                bvs
381                              end                              end
382                          | IR.S_Exit es => (                          | IR.S_Exit es => (

Legend:
Removed from v.3766  
changed lines
  Added in v.3767

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