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

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/tree-il/tree-il.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/tree-il/tree-il.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2680 - (view) (download)

1 : jhr 1115 (* tree-il.sml
2 :     *
3 :     * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *
6 :     * This representation restores the block structure and nested expression syntax
7 :     * of the source language.
8 :     *)
9 :    
10 :     structure TreeIL =
11 :     struct
12 :    
13 : cchiw 2615 structure Op = TreeOps
14 :     structure Ty = TreeILTypes
15 : cchiw 2646 structure ILF=TreeFunc
16 :     structure OprSet=ILF.OprSet
17 :     structure TySet=ILF.TySet
18 : jhr 1115
19 : cchiw 2637
20 : jhr 2632
21 : jhr 1115 datatype program = Program of {
22 : jhr 2356 props : StrandUtil.program_prop list,
23 : cchiw 2637
24 :     types : Ty.ty list,
25 : cchiw 2646 oprations : ILF.oprator list,
26 : cchiw 2637
27 : jhr 2356 globals : var list,
28 :     inputInit : block,
29 :     globalInit : block,
30 :     strands : strand list,
31 :     initially : {
32 :     isArray : bool,
33 :     iterPrefix : block,
34 :     iters : (var * exp * exp) list,
35 :     createPrefix : block,
36 :     strand : Atom.atom,
37 :     args : exp list
38 :     }
39 : jhr 1115 }
40 :    
41 :     and strand = Strand of {
42 : jhr 2356 name : Atom.atom,
43 :     params : var list,
44 :     state : state_var list,
45 :     stateInit : block,
46 :     methods : method list
47 : jhr 1115 }
48 :    
49 : jhr 1640 and state_var = SV of {
50 : jhr 2356 name : string, (* name (should be unique) *)
51 :     id : Stamp.stamp, (* unique ID *)
52 :     ty : Ty.ty, (* type *)
53 :     varying : bool, (* varies over the lifetime of the strand *)
54 :     output : bool (* is the output value of the strand *)
55 : jhr 1115 }
56 :    
57 :     and method = Method of {
58 : jhr 2356 name : StrandUtil.method_name,
59 :     body : block (* method body *)
60 : jhr 1115 }
61 :    
62 : cchiw 2637 and subblock = Pink of {
63 :     locals : var list,
64 :     types: TySet.set,
65 :     opr: OprSet.set,
66 :     body : stm list
67 :     }
68 : jhr 1115 and block = Block of {
69 : jhr 2356 locals : var list,
70 :     body : stm list
71 : cchiw 2637 }
72 : jhr 1115
73 :     and stm
74 :     = S_Comment of string list
75 : jhr 1640 | S_Assign of var list * exp
76 : jhr 1115 | S_IfThen of exp * block
77 :     | S_IfThenElse of exp * block * block
78 :     (* special Diderot forms *)
79 : jhr 2356 | S_LoadImage of var * int * exp (* load image data *)
80 : jhr 1301 | S_Input of var * string * string * exp option (* get input *)
81 : jhr 2356 | S_New of Atom.atom * exp list (* new strand creation *)
82 : jhr 1640 | S_Save of state_var list * exp (* save strand state *)
83 : jhr 1115 | S_Exit of exp list
84 :     (* return functions for methods *)
85 : jhr 1640 | S_Active
86 :     | S_Stabilize
87 : jhr 1115 | S_Die
88 : cchiw 2680 | S_StoreVectoArr of var * bool*int *int * exp*Ty.ty* exp list
89 : jhr 1115
90 :     and exp
91 : jhr 1640 = E_State of state_var
92 :     | E_Var of var
93 : jhr 1115 | E_Lit of Literal.literal
94 : cchiw 2624 | E_Op of Op.rator * exp list
95 : jhr 1923 | E_Apply of MathFuns.name * exp list
96 : jhr 1115 | E_Cons of Ty.ty * exp list
97 : cchiw 2680 | E_LoadArr of bool*int * int * exp * exp (*aligned, Type:NativeVecTy newVec,originalVec, addr, offset *)
98 :     | E_LoadVec of bool*int * int * exp * exp (*aligned, Type:NativeVecTy newVec,originalVec, addr, offset *)
99 : cchiw 2671 | E_mkVec of bool*int *int * exp*Ty.ty* exp
100 :     (*aligned, vec length, originalVec,indexAt,Type:vectorLength(list), single op exp*)
101 : cchiw 2680 | E_StoreVectoArr of var* bool*int *int * exp*Ty.ty* exp list
102 : cchiw 2671 (*aligned, -,-, -, VectorLengths, op exps*)
103 : cchiw 2680 | E_StoreVectoVec of var* bool*int *int * exp*Ty.ty* exp list
104 :     (*aligned, -,-, -, VectorLengths, op exps*)
105 : cchiw 2671
106 : cchiw 2646
107 : jhr 1115 and var = V of {
108 : jhr 2356 name : string, (* name (should be unique) *)
109 :     id : Stamp.stamp, (* unique ID *)
110 :     kind : var_kind,
111 :     ty : Ty.ty (* type *)
112 : jhr 1115 }
113 :    
114 :     and var_kind
115 : jhr 2356 = VK_Global (* global variable *)
116 :     | VK_Local (* includes strand parameters *)
117 : jhr 1115
118 : cchiw 2637
119 :    
120 :    
121 : jhr 1115 structure Var : sig
122 :    
123 : jhr 2356 val new : string * var_kind * Ty.ty -> var
124 :     val kind : var -> var_kind
125 :     val name : var -> string
126 :     val toString : var -> string
127 :     val ty : var -> Ty.ty
128 : jhr 1115
129 : jhr 2356 structure Map : ORD_MAP where type Key.ord_key = var
130 : jhr 1115
131 :     end = struct
132 : jhr 2356 fun new (name, kind, ty) = V{
133 :     name = name,
134 :     id = Stamp.new(),
135 :     kind = kind,
136 :     ty = ty
137 :     }
138 :     fun kind (V{kind, ...}) = kind
139 :     fun name (V{name, ...}) = name
140 :     fun toString (V{name, id, ...}) = concat[name, "$", Stamp.toString id]
141 :     fun ty (V{ty, ...}) = ty
142 :     local
143 :     structure VarOrd =
144 :     struct
145 :     type ord_key = var
146 :     fun compare (V{id=a, ...}, V{id=b, ...}) = Stamp.compare(a, b)
147 :     end
148 :     in
149 :     structure Map = RedBlackMapFn (VarOrd)
150 :     end (* local *)
151 : jhr 1115 end
152 :    
153 : jhr 1640 structure StateVar : sig
154 :     val name : state_var -> string
155 :     val ty : state_var -> Ty.ty
156 :     val isOutput : state_var -> bool
157 :     val isVarying : state_var -> bool
158 :     val toString : state_var -> string
159 :     end = struct
160 : jhr 2356 fun name (SV{name, ...}) = name
161 :     fun ty (SV{ty, ...}) = ty
162 :     fun isOutput (SV{output, ...}) = output
163 :     fun isVarying (SV{varying, ...}) = varying
164 :     fun toString (SV{name, ...}) = "self." ^ name
165 : jhr 1640 end
166 : jhr 1131
167 :     fun kindToString k = (case k
168 : jhr 2356 of VK_Global => "Global"
169 :     | VK_Local => "Local"
170 :     (* end case *))
171 : jhr 1131
172 : jhr 1640 fun stateVarToString (SV{name, ...}) = "self." ^ name
173 :    
174 : cchiw 2637
175 :     fun q m=Int.toString(m)
176 :    
177 : cchiw 2680 fun toString(E_LoadVec(_,tyNew, tyOrig, arg, offset)) = String.concat[" LDVec<",q tyNew ,
178 :     ":",q tyOrig, ">", "( ", toString arg, ",", toString offset, ")"]
179 :     | toString(E_LoadArr(_,tyNew, tyOrig, arg, offset)) = String.concat[" LDVArray<",q tyNew ,
180 :     ":",q tyOrig, ">", "( ", toString arg, ",", toString offset, ")"]
181 : cchiw 2668 | toString(E_mkVec(_,tyNew, tyOrig,indexAt,pieces,args)) =let
182 : cchiw 2671 val a= toString args
183 : cchiw 2637 in
184 : cchiw 2680 String.concat["Store-VectoArr:",q tyNew,"|",q tyOrig,"@",toString indexAt,"[",
185 :     Ty.toString pieces ,"]",a]
186 : cchiw 2637 end
187 : cchiw 2680 | toString(E_StoreVectoArr(x,_,tyNew, tyOrig,indexAt,pieces,args)) =let
188 :     val a= String.concatWith ",\n\t" (List.map toString args)
189 : cchiw 2671 in
190 : cchiw 2680 String.concat[Var.name x, "=:Store-VectoArr:",q tyNew,"|",q tyOrig,"@",toString indexAt,"[",
191 : cchiw 2671 Ty.toString pieces ,"]\n\t",a]
192 :     end
193 : cchiw 2668
194 : cchiw 2680
195 :     | toString(E_StoreVectoVec(x,_,tyNew, tyOrig,indexAt,pieces,args)) =let
196 :     val a= String.concatWith ",\n\t" (List.map toString args)
197 :     in
198 :     String.concat[Var.name x, "=:Store-VectoVec:",q tyNew,"|",q tyOrig,"@",toString indexAt,"[",
199 :     Ty.toString pieces ,"]\n\t",a]
200 :     end
201 :    
202 :    
203 :    
204 : cchiw 2637 | toString (E_Op(rator, args)) = String.concat[Op.toString rator,"(",
205 :     String.concatWith"," (List.map toString args),")"]
206 :     | toString (E_Cons(ty, args)) =String.concat ["Cons:", Ty.toString ty, "(",
207 :     String.concatWith"," (List.map toString args),")"]
208 :     | toString (E_State x) = "State"
209 : cchiw 2680 | toString (E_Var x) = "Var:"^Var.name x
210 : cchiw 2637 | toString (E_Lit lit) = Literal.toString lit
211 : cchiw 2680 | toString(E_Apply(mathfn, args))=String.concat["Apply (",
212 :     String.concatWith"," (List.map toString args),")"]
213 : cchiw 2666
214 : cchiw 2680
215 : cchiw 2666 fun toStringS(S_Assign( _,e))=String.concat["Assignments=",toString e]
216 : cchiw 2680 |toStringS( S_Comment _ )=String.concat["Comment"]
217 :    
218 :     | toStringS(S_IfThen _ )=String.concat["ifthen"]
219 :     | toStringS(S_IfThenElse _ )=String.concat["ifthenelse"]
220 :    
221 :     | toStringS(S_LoadImage _ )=String.concat["ldimage"]
222 :     |toStringS( S_Input _ )=String.concat["input"]
223 :     |toStringS( S_New _ )=String.concat["new"]
224 :     |toStringS( S_Save _ )=String.concat["save"]
225 :     |toStringS( S_Exit _ )=String.concat["exit"]
226 :     | toStringS(S_Active )=String.concat["active"]
227 :     |toStringS( S_Stabilize )=String.concat["stablize"]
228 :     |toStringS( S_Die )=String.concat["die"]
229 :     | toStringS(S_StoreVectoArr(x,_,tyNew, tyOrig,indexAt,pieces,args)) =let
230 :     val a= String.concatWith "," (List.map toString args)
231 :     in
232 :     String.concat["Statment Store-VectoArr: ",Var.name x, "=",q tyNew,"|",q tyOrig,"@",toString indexAt,"[",
233 :     Ty.toString pieces ,"]",a]
234 :     end
235 : cchiw 2668
236 : cchiw 2666
237 :    
238 : jhr 1115 end

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