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

SCM Repository

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

Annotation of /branches/vis15/src/compiler/tree-ir/tree-type-of.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4362 - (view) (download)

1 : jhr 3957 (* tree-type-of.sml
2 :     *
3 :     * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     *
5 :     * COPYRIGHT (c) 2016 The University of Chicago
6 :     * All rights reserved.
7 :     *)
8 :    
9 :     structure TreeTypeOf : sig
10 :    
11 :     val exp : TreeIR.exp -> TreeTypes.t
12 :    
13 :     end = struct
14 :    
15 :     structure IR = TreeIR
16 :     structure Ty = TreeTypes
17 :     structure Op = TreeOps
18 :    
19 :     fun operator rator = (case rator
20 :     of Op.IAdd => Ty.IntTy
21 :     | Op.ISub => Ty.IntTy
22 :     | Op.IMul => Ty.IntTy
23 :     | Op.IDiv => Ty.IntTy
24 :     | Op.IMod => Ty.IntTy
25 :     | Op.INeg => Ty.IntTy
26 :     | Op.RAdd => Ty.realTy
27 :     | Op.RSub => Ty.realTy
28 :     | Op.RMul => Ty.realTy
29 :     | Op.RDiv => Ty.realTy
30 :     | Op.RNeg => Ty.realTy
31 :     | Op.RClamp => Ty.realTy
32 :     | Op.RLerp => Ty.realTy
33 :     | Op.RCeiling => Ty.realTy
34 :     | Op.RFloor => Ty.realTy
35 :     | Op.RRound => Ty.realTy
36 :     | Op.RTrunc => Ty.realTy
37 :     | Op.RealToInt => Ty.IntTy
38 :     | Op.LT ty => Ty.BoolTy
39 :     | Op.LTE ty => Ty.BoolTy
40 :     | Op.EQ ty => Ty.BoolTy
41 :     | Op.NEQ ty => Ty.BoolTy
42 :     | Op.GT ty => Ty.BoolTy
43 :     | Op.GTE ty => Ty.BoolTy
44 :     | Op.Not => Ty.BoolTy
45 :     | Op.Abs ty => ty
46 :     | Op.Max ty => ty
47 :     | Op.Min ty => ty
48 :     | Op.VAdd d => Ty.VecTy d
49 :     | Op.VSub d => Ty.VecTy d
50 :     | Op.VScale d => Ty.VecTy d
51 :     | Op.VMul d => Ty.VecTy d
52 :     | Op.VNeg d => Ty.VecTy d
53 :     | Op.VSum d => Ty.realTy
54 : jhr 4090 | Op.VDot d => Ty.realTy
55 : jhr 3957 | Op.VIndex(d, pw, _) => Ty.realTy
56 :     | Op.VClamp d => Ty.VecTy d
57 :     | Op.VMapClamp d => Ty.VecTy d
58 :     | Op.VLerp d => Ty.VecTy d
59 :     | Op.VCeiling d => Ty.VecTy d
60 :     | Op.VFloor d => Ty.VecTy d
61 :     | Op.VRound d => Ty.VecTy d
62 :     | Op.VTrunc d => Ty.VecTy d
63 :     | Op.VToInt(d, pw) => Ty.SeqTy(Ty.IntTy, SOME d)
64 :     | Op.TensorIndex(ty, _) => Ty.realTy
65 :     | Op.ProjectLast(ty as Ty.TensorTy dd, _) => Ty.TensorRefTy[List.last dd]
66 :     | Op.ProjectLast(ty as Ty.TensorRefTy dd, _) => Ty.TensorRefTy[List.last dd]
67 : jhr 4317 | Op.TensorCopy shp => Ty.TensorTy shp
68 :     | Op.TensorRef shp => Ty.TensorRefTy shp
69 : jhr 3957 | Op.EigenVecs2x2 => Ty.TupleTy[
70 :     Ty.SeqTy(Ty.realTy, SOME 2),
71 :     Ty.SeqTy(Ty.TensorTy[2], SOME 2)
72 :     ]
73 :     | Op.EigenVecs3x3 => Ty.TupleTy[
74 :     Ty.SeqTy(Ty.realTy, SOME 3),
75 :     Ty.SeqTy(Ty.TensorTy[3], SOME 3)
76 :     ]
77 :     | Op.EigenVals2x2 => Ty.SeqTy(Ty.realTy, SOME 2)
78 :     | Op.EigenVals3x3 => Ty.SeqTy(Ty.realTy, SOME 3)
79 :     | Op.Select(ty as Ty.TupleTy tys, i) => List.nth(tys, i-1)
80 :     | Op.Subscript(ty as Ty.SeqTy(elemTy, _)) => elemTy
81 :     | Op.MkDynamic(ty, n) => Ty.SeqTy(ty, NONE)
82 :     | Op.Prepend ty => Ty.SeqTy(ty, NONE)
83 :     | Op.Append ty => Ty.SeqTy(ty, NONE)
84 :     | Op.Concat ty => Ty.SeqTy(ty, NONE)
85 :     | Op.Range => Ty.SeqTy(Ty.intTy, NONE)
86 :     | Op.Length ty => Ty.intTy
87 : jhr 4349 | Op.SphereQuery(_, strandTy) => Ty.SeqTy(strandTy, NONE)
88 : jhr 3957 | Op.Sqrt => Ty.realTy
89 :     | Op.Cos => Ty.realTy
90 :     | Op.ArcCos => Ty.realTy
91 :     | Op.Sin => Ty.realTy
92 :     | Op.ArcSin => Ty.realTy
93 :     | Op.Tan => Ty.realTy
94 :     | Op.ArcTan => Ty.realTy
95 :     | Op.Exp => Ty.realTy
96 :     | Op.IntToReal => Ty.realTy
97 : jhr 4362 | Op.Strands(strandTy, _) => Ty.SeqTy(strandTy, NONE)
98 : jhr 4337 | Op.StrandStatus _ => Ty.BoolTy
99 : jhr 3957 | Op.Transform info => let
100 :     val dim = ImageInfo.dim info
101 :     in
102 :     if (dim = 1)
103 :     then Ty.realTy
104 :     else Ty.TensorRefTy[dim, dim]
105 :     end
106 :     | Op.Translate info => let
107 :     val dim = ImageInfo.dim info
108 :     in
109 :     if (dim = 1)
110 :     then Ty.realTy
111 :     else Ty.TensorRefTy[dim]
112 :     end
113 :     | Op.ControlIndex(info, _, _) => Ty.IntTy
114 : jhr 4317 | Op.LoadVoxel info => Ty.realTy
115 : jhr 4151 | Op.Inside _ => Ty.BoolTy
116 :     | Op.ImageDim _ => Ty.IntTy
117 : jhr 3957 | Op.MathFn f => Ty.realTy
118 :     | _ => raise Fail("invalid operator " ^ Op.toString rator)
119 : jhr 4317 (* end case *))
120 : jhr 3957
121 :     fun exp e = (case e
122 : jhr 4317 of IR.E_Global gv => TreeGlobalVar.ty gv
123 :     | IR.E_State(_, sv) => TreeStateVar.ty sv
124 :     | IR.E_Var x => TreeVar.ty x
125 :     | IR.E_Lit(Literal.Int _) => Ty.IntTy
126 :     | IR.E_Lit(Literal.Real _) => Ty.realTy
127 :     | IR.E_Lit(Literal.String _) => Ty.StringTy
128 :     | IR.E_Lit(Literal.Bool _) => Ty.BoolTy
129 :     | IR.E_Op(rator, _) => operator rator
130 :     | IR.E_Apply(f, _) => #1(TreeFunc.ty f)
131 :     | IR.E_Vec(w, pw, _) => Ty.VecTy(w, pw)
132 :     | IR.E_Cons(_, ty) => ty
133 :     | IR.E_Seq(_, ty) => ty
134 :     | IR.E_Pack(layout, _) => Ty.TensorTy[#wid layout]
135 :     | IR.E_VLoad(layout, _, i) => Ty.nthVec(layout, i)
136 :     (* end case *))
137 : jhr 3957
138 :     end

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