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 2628 - (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 OpOld = LowOps(* TreeOps*)
14 :     structure Op = TreeOps
15 :     structure Ty = TreeILTypes
16 : jhr 1115
17 :     datatype program = Program of {
18 : jhr 2356 props : StrandUtil.program_prop list,
19 :     globals : var list,
20 :     inputInit : block,
21 :     globalInit : block,
22 :     strands : strand list,
23 :     initially : {
24 :     isArray : bool,
25 :     iterPrefix : block,
26 :     iters : (var * exp * exp) list,
27 :     createPrefix : block,
28 :     strand : Atom.atom,
29 :     args : exp list
30 :     }
31 : jhr 1115 }
32 :    
33 :     and strand = Strand of {
34 : jhr 2356 name : Atom.atom,
35 :     params : var list,
36 :     state : state_var list,
37 :     stateInit : block,
38 :     methods : method list
39 : jhr 1115 }
40 :    
41 : jhr 1640 and state_var = SV of {
42 : jhr 2356 name : string, (* name (should be unique) *)
43 :     id : Stamp.stamp, (* unique ID *)
44 :     ty : Ty.ty, (* type *)
45 :     varying : bool, (* varies over the lifetime of the strand *)
46 :     output : bool (* is the output value of the strand *)
47 : jhr 1115 }
48 :    
49 :     and method = Method of {
50 : jhr 2356 name : StrandUtil.method_name,
51 :     body : block (* method body *)
52 : jhr 1115 }
53 :    
54 :     and block = Block of {
55 : jhr 2356 locals : var list,
56 :     body : stm list
57 : jhr 1115 }
58 :    
59 :     and stm
60 :     = S_Comment of string list
61 : jhr 1640 | S_Assign of var list * exp
62 : jhr 1115 | S_IfThen of exp * block
63 :     | S_IfThenElse of exp * block * block
64 :     (* special Diderot forms *)
65 : jhr 2356 | S_LoadImage of var * int * exp (* load image data *)
66 : jhr 1301 | S_Input of var * string * string * exp option (* get input *)
67 : jhr 2356 | S_New of Atom.atom * exp list (* new strand creation *)
68 : jhr 1640 | S_Save of state_var list * exp (* save strand state *)
69 : jhr 1115 | S_Exit of exp list
70 :     (* return functions for methods *)
71 : jhr 1640 | S_Active
72 :     | S_Stabilize
73 : jhr 1115 | S_Die
74 :    
75 :     and exp
76 : jhr 1640 = E_State of state_var
77 :     | E_Var of var
78 : jhr 1115 | E_Lit of Literal.literal
79 : cchiw 2624 | E_Op of Op.rator * exp list
80 : jhr 1923 | E_Apply of MathFuns.name * exp list
81 : jhr 1115 | E_Cons of Ty.ty * exp list
82 : cchiw 2628 | E_LoadVec of int * int * int * exp (*Type:NativeVecTy newVec, originalVec,offset, op *)
83 :     | E_mkVec of int *int *Ty.ty* exp list (*vec length, originalVec,Type:vectorLength(list), list of ops*)
84 : cchiw 2627
85 : cchiw 2624
86 : jhr 1115
87 :     and var = V of {
88 : jhr 2356 name : string, (* name (should be unique) *)
89 :     id : Stamp.stamp, (* unique ID *)
90 :     kind : var_kind,
91 :     ty : Ty.ty (* type *)
92 : jhr 1115 }
93 :    
94 :     and var_kind
95 : jhr 2356 = VK_Global (* global variable *)
96 :     | VK_Local (* includes strand parameters *)
97 : jhr 1115
98 :     structure Var : sig
99 :    
100 : jhr 2356 val new : string * var_kind * Ty.ty -> var
101 :     val kind : var -> var_kind
102 :     val name : var -> string
103 :     val toString : var -> string
104 :     val ty : var -> Ty.ty
105 : jhr 1115
106 : jhr 2356 structure Map : ORD_MAP where type Key.ord_key = var
107 : jhr 1115
108 :     end = struct
109 : jhr 2356 fun new (name, kind, ty) = V{
110 :     name = name,
111 :     id = Stamp.new(),
112 :     kind = kind,
113 :     ty = ty
114 :     }
115 :     fun kind (V{kind, ...}) = kind
116 :     fun name (V{name, ...}) = name
117 :     fun toString (V{name, id, ...}) = concat[name, "$", Stamp.toString id]
118 :     fun ty (V{ty, ...}) = ty
119 :     local
120 :     structure VarOrd =
121 :     struct
122 :     type ord_key = var
123 :     fun compare (V{id=a, ...}, V{id=b, ...}) = Stamp.compare(a, b)
124 :     end
125 :     in
126 :     structure Map = RedBlackMapFn (VarOrd)
127 :     end (* local *)
128 : jhr 1115 end
129 :    
130 : jhr 1640 structure StateVar : sig
131 :     val name : state_var -> string
132 :     val ty : state_var -> Ty.ty
133 :     val isOutput : state_var -> bool
134 :     val isVarying : state_var -> bool
135 :     val toString : state_var -> string
136 :     end = struct
137 : jhr 2356 fun name (SV{name, ...}) = name
138 :     fun ty (SV{ty, ...}) = ty
139 :     fun isOutput (SV{output, ...}) = output
140 :     fun isVarying (SV{varying, ...}) = varying
141 :     fun toString (SV{name, ...}) = "self." ^ name
142 : jhr 1640 end
143 : jhr 1131
144 :     fun kindToString k = (case k
145 : jhr 2356 of VK_Global => "Global"
146 :     | VK_Local => "Local"
147 :     (* end case *))
148 : jhr 1131
149 : jhr 1640 fun stateVarToString (SV{name, ...}) = "self." ^ name
150 :    
151 : jhr 1115 end

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