Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1901 serge 1
/*
2
 * Copyright © 2010 Intel Corporation
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice (including the next
12
 * paragraph) shall be included in all copies or substantial portions of the
13
 * Software.
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
 * DEALINGS IN THE SOFTWARE.
22
 */
23
 
24
#include "ir.h"
25
#include "ir_hierarchical_visitor.h"
26
 
27
ir_hierarchical_visitor::ir_hierarchical_visitor()
28
{
29
   this->base_ir = NULL;
30
   this->callback = NULL;
31
   this->data = NULL;
32
   this->in_assignee = false;
33
}
34
 
35
ir_visitor_status
36
ir_hierarchical_visitor::visit(ir_variable *ir)
37
{
38
   if (this->callback != NULL)
39
      this->callback(ir, this->data);
40
 
41
   return visit_continue;
42
}
43
 
44
ir_visitor_status
45
ir_hierarchical_visitor::visit(ir_constant *ir)
46
{
47
   if (this->callback != NULL)
48
      this->callback(ir, this->data);
49
 
50
   return visit_continue;
51
}
52
 
53
ir_visitor_status
54
ir_hierarchical_visitor::visit(ir_loop_jump *ir)
55
{
56
   if (this->callback != NULL)
57
      this->callback(ir, this->data);
58
 
59
   return visit_continue;
60
}
61
 
62
ir_visitor_status
63
ir_hierarchical_visitor::visit(ir_dereference_variable *ir)
64
{
65
   if (this->callback != NULL)
66
      this->callback(ir, this->data);
67
 
68
   return visit_continue;
69
}
70
 
71
ir_visitor_status
72
ir_hierarchical_visitor::visit_enter(ir_loop *ir)
73
{
74
   if (this->callback != NULL)
75
      this->callback(ir, this->data);
76
 
77
   return visit_continue;
78
}
79
 
80
ir_visitor_status
81
ir_hierarchical_visitor::visit_leave(ir_loop *ir)
82
{
83
   (void) ir;
84
   return visit_continue;
85
}
86
 
87
ir_visitor_status
88
ir_hierarchical_visitor::visit_enter(ir_function_signature *ir)
89
{
90
   if (this->callback != NULL)
91
      this->callback(ir, this->data);
92
 
93
   return visit_continue;
94
}
95
 
96
ir_visitor_status
97
ir_hierarchical_visitor::visit_leave(ir_function_signature *ir)
98
{
99
   (void) ir;
100
   return visit_continue;
101
}
102
 
103
ir_visitor_status
104
ir_hierarchical_visitor::visit_enter(ir_function *ir)
105
{
106
   if (this->callback != NULL)
107
      this->callback(ir, this->data);
108
 
109
   return visit_continue;
110
}
111
 
112
ir_visitor_status
113
ir_hierarchical_visitor::visit_leave(ir_function *ir)
114
{
115
   (void) ir;
116
   return visit_continue;
117
}
118
 
119
ir_visitor_status
120
ir_hierarchical_visitor::visit_enter(ir_expression *ir)
121
{
122
   if (this->callback != NULL)
123
      this->callback(ir, this->data);
124
 
125
   return visit_continue;
126
}
127
 
128
ir_visitor_status
129
ir_hierarchical_visitor::visit_leave(ir_expression *ir)
130
{
131
   (void) ir;
132
   return visit_continue;
133
}
134
 
135
ir_visitor_status
136
ir_hierarchical_visitor::visit_enter(ir_texture *ir)
137
{
138
   if (this->callback != NULL)
139
      this->callback(ir, this->data);
140
 
141
   return visit_continue;
142
}
143
 
144
ir_visitor_status
145
ir_hierarchical_visitor::visit_leave(ir_texture *ir)
146
{
147
   (void) ir;
148
   return visit_continue;
149
}
150
 
151
ir_visitor_status
152
ir_hierarchical_visitor::visit_enter(ir_swizzle *ir)
153
{
154
   if (this->callback != NULL)
155
      this->callback(ir, this->data);
156
 
157
   return visit_continue;
158
}
159
 
160
ir_visitor_status
161
ir_hierarchical_visitor::visit_leave(ir_swizzle *ir)
162
{
163
   (void) ir;
164
   return visit_continue;
165
}
166
 
167
ir_visitor_status
168
ir_hierarchical_visitor::visit_enter(ir_dereference_array *ir)
169
{
170
   if (this->callback != NULL)
171
      this->callback(ir, this->data);
172
 
173
   return visit_continue;
174
}
175
 
176
ir_visitor_status
177
ir_hierarchical_visitor::visit_leave(ir_dereference_array *ir)
178
{
179
   (void) ir;
180
   return visit_continue;
181
}
182
 
183
ir_visitor_status
184
ir_hierarchical_visitor::visit_enter(ir_dereference_record *ir)
185
{
186
   if (this->callback != NULL)
187
      this->callback(ir, this->data);
188
 
189
   return visit_continue;
190
}
191
 
192
ir_visitor_status
193
ir_hierarchical_visitor::visit_leave(ir_dereference_record *ir)
194
{
195
   (void) ir;
196
   return visit_continue;
197
}
198
 
199
ir_visitor_status
200
ir_hierarchical_visitor::visit_enter(ir_assignment *ir)
201
{
202
   if (this->callback != NULL)
203
      this->callback(ir, this->data);
204
 
205
   return visit_continue;
206
}
207
 
208
ir_visitor_status
209
ir_hierarchical_visitor::visit_leave(ir_assignment *ir)
210
{
211
   (void) ir;
212
   return visit_continue;
213
}
214
 
215
ir_visitor_status
216
ir_hierarchical_visitor::visit_enter(ir_call *ir)
217
{
218
   if (this->callback != NULL)
219
      this->callback(ir, this->data);
220
 
221
   return visit_continue;
222
}
223
 
224
ir_visitor_status
225
ir_hierarchical_visitor::visit_leave(ir_call *ir)
226
{
227
   (void) ir;
228
   return visit_continue;
229
}
230
 
231
ir_visitor_status
232
ir_hierarchical_visitor::visit_enter(ir_return *ir)
233
{
234
   if (this->callback != NULL)
235
      this->callback(ir, this->data);
236
 
237
   return visit_continue;
238
}
239
 
240
ir_visitor_status
241
ir_hierarchical_visitor::visit_leave(ir_return *ir)
242
{
243
   (void) ir;
244
   return visit_continue;
245
}
246
 
247
ir_visitor_status
248
ir_hierarchical_visitor::visit_enter(ir_discard *ir)
249
{
250
   if (this->callback != NULL)
251
      this->callback(ir, this->data);
252
 
253
   return visit_continue;
254
}
255
 
256
ir_visitor_status
257
ir_hierarchical_visitor::visit_leave(ir_discard *ir)
258
{
259
   (void) ir;
260
   return visit_continue;
261
}
262
 
263
ir_visitor_status
264
ir_hierarchical_visitor::visit_enter(ir_if *ir)
265
{
266
   if (this->callback != NULL)
267
      this->callback(ir, this->data);
268
 
269
   return visit_continue;
270
}
271
 
272
ir_visitor_status
273
ir_hierarchical_visitor::visit_leave(ir_if *ir)
274
{
275
   (void) ir;
276
   return visit_continue;
277
}
278
 
279
void
280
ir_hierarchical_visitor::run(exec_list *instructions)
281
{
282
   visit_list_elements(this, instructions);
283
}
284
 
285
 
286
void
287
visit_tree(ir_instruction *ir,
288
	   void (*callback)(class ir_instruction *ir, void *data),
289
	   void *data)
290
{
291
   ir_hierarchical_visitor v;
292
 
293
   v.callback = callback;
294
   v.data = data;
295
 
296
   ir->accept(&v);
297
}