18895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick/*
28895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * Copyright © 2010 Intel Corporation
38895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick *
48895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * Permission is hereby granted, free of charge, to any person obtaining a
58895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * copy of this software and associated documentation files (the "Software"),
68895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * to deal in the Software without restriction, including without limitation
78895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense,
88895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * and/or sell copies of the Software, and to permit persons to whom the
98895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * Software is furnished to do so, subject to the following conditions:
108895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick *
118895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * The above copyright notice and this permission notice (including the next
128895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * paragraph) shall be included in all copies or substantial portions of the
138895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * Software.
148895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick *
158895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
168895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
178895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
188895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
198895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
208895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
218895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick * DEALINGS IN THE SOFTWARE.
228895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick */
23ac95f2f8c88d39aaa878f61172d9748af13e2c80Eric Anholt
248895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick#include "ir.h"
258895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick#include "ir_hierarchical_visitor.h"
268895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
277c09576a97be3490fe36fff9241b9c148ba558cbIan Romanickir_hierarchical_visitor::ir_hierarchical_visitor()
287c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick{
29352e62c3c26c75ddce1345962339f78c64d0aa95Vinson Lee   this->base_ir = NULL;
307b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   this->callback_enter = NULL;
317b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   this->callback_leave = NULL;
327b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   this->data_enter = NULL;
337b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   this->data_leave = NULL;
34c8ee8e07f7cc8f18d367ffcec065b45f8a6976f4Ian Romanick   this->in_assignee = false;
357c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick}
367c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
378895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
38807e967c615dc80a264af5a89af7649f95481744Kenneth Graunkeir_hierarchical_visitor::visit(ir_rvalue *ir)
39807e967c615dc80a264af5a89af7649f95481744Kenneth Graunke{
407b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
417b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
42807e967c615dc80a264af5a89af7649f95481744Kenneth Graunke
43807e967c615dc80a264af5a89af7649f95481744Kenneth Graunke   return visit_continue;
44807e967c615dc80a264af5a89af7649f95481744Kenneth Graunke}
45807e967c615dc80a264af5a89af7649f95481744Kenneth Graunke
46807e967c615dc80a264af5a89af7649f95481744Kenneth Graunkeir_visitor_status
478895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit(ir_variable *ir)
488895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
497b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
507b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
517c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
528895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
538895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
548895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
558895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
568895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit(ir_constant *ir)
578895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
587b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
597b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
607c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
618895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
628895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
638895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
648895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
658895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit(ir_loop_jump *ir)
668895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
677b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
687b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
697c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
708895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
718895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
728895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
738895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
74f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_hierarchical_visitor::visit(ir_dereference_variable *ir)
75f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick{
767b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
777b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
787c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
79f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick   return visit_continue;
80f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick}
81f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick
82f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_visitor_status
83e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbesir_hierarchical_visitor::visit(ir_barrier *ir)
84e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbes{
85e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbes   if (this->callback_enter != NULL)
86e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbes      this->callback_enter(ir, this->data_enter);
87e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbes
88e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbes   return visit_continue;
89e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbes}
90e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbes
91e7f628c2fc5ef42672e3281e224226c3d47b1bacChris Forbesir_visitor_status
928895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_loop *ir)
938895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
947b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
957b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
967c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
978895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
988895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
998895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1008895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1018895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_loop *ir)
1028895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1037b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
1047b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
1057b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
1068895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1078895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1088895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1098895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1108895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_function_signature *ir)
1118895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1127b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
1137b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
1147c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
1158895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1168895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1178895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1188895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1198895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_function_signature *ir)
1208895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1217b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
1227b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
1237b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
1248895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1258895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1268895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1278895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1288895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_function *ir)
1298895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1307b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
1317b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
1327c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
1338895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1348895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1358895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1368895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1378895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_function *ir)
1388895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1397b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
1407b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
1417b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
1428895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1438895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1448895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1458895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1468895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_expression *ir)
1478895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1487b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
1497b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
1507c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
1518895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1528895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1538895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1548895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1558895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_expression *ir)
1568895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1577b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
1587b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
1597b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
1608895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1618895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1628895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1638895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
16426d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunkeir_hierarchical_visitor::visit_enter(ir_texture *ir)
16526d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke{
1667b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
1677b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
1687c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
16926d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke   return visit_continue;
17026d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke}
17126d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke
17226d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunkeir_visitor_status
17326d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunkeir_hierarchical_visitor::visit_leave(ir_texture *ir)
17426d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke{
1757b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
1767b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
1777b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
17826d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke   return visit_continue;
17926d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke}
18026d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunke
18126d74cd1d140786b8f4b1ccbaf500a16e68eec3cKenneth Graunkeir_visitor_status
1828895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_swizzle *ir)
1838895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1847b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
1857b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
1867c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
1878895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1888895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1898895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1908895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
1918895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_swizzle *ir)
1928895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
1937b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
1947b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
1957b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
1968895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
1978895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
1988895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
1998895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
200f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_hierarchical_visitor::visit_enter(ir_dereference_array *ir)
201f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick{
2027b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
2037b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
2047c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
205f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick   return visit_continue;
206f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick}
207f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick
208f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_visitor_status
209f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_hierarchical_visitor::visit_leave(ir_dereference_array *ir)
210f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick{
2117b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
2127b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
2137b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
214f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick   return visit_continue;
215f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick}
216f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanick
217f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_visitor_status
218f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_hierarchical_visitor::visit_enter(ir_dereference_record *ir)
2198895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2207b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
2217b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
2227c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
2238895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2248895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2258895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2268895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
227f3a002b503542fe2544025c6a42d552fdc4907c2Ian Romanickir_hierarchical_visitor::visit_leave(ir_dereference_record *ir)
2288895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2297b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
2307b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
2317b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
2328895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2338895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2348895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2358895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
2368895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_assignment *ir)
2378895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2387b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
2397b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
2407c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
2418895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2428895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2438895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2448895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
2458895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_assignment *ir)
2468895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2477b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
2487b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
2497b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
2508895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2518895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2528895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2538895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
2548895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_call *ir)
2558895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2567b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
2577b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
2587c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
2598895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2608895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2618895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2628895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
2638895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_call *ir)
2648895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2657b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
2667b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
2677b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
2688895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2698895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2708895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2718895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
2728895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_return *ir)
2738895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2747b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
2757b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
2767c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
2778895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2788895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2798895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2808895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
2818895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_return *ir)
2828895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
2837b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
2847b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
2857b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
2868895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
2878895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
2888895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
2898895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
29016efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunkeir_hierarchical_visitor::visit_enter(ir_discard *ir)
29116efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke{
2927b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
2937b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
29416efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke
29516efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke   return visit_continue;
29616efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke}
29716efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke
29816efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunkeir_visitor_status
29916efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunkeir_hierarchical_visitor::visit_leave(ir_discard *ir)
30016efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke{
3017b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
3027b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
3037b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
30416efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke   return visit_continue;
30516efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke}
30616efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke
30716efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunkeir_visitor_status
3088895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_if *ir)
3098895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
3107b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
3117b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
3127c09576a97be3490fe36fff9241b9c148ba558cbIan Romanick
3138895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
3148895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
3158895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
3168895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status
3178895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_if *ir)
3188895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
3197b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
3207b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
3217b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
3228895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick   return visit_continue;
3238895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
3248895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick
3258639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quirogair_visitor_status
3268639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quirogair_hierarchical_visitor::visit_enter(ir_emit_vertex *ir)
3278639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga{
3287b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
3297b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
3308639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga
3318639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga   return visit_continue;
3328639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga}
3338639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga
3348639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quirogair_visitor_status
3358639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quirogair_hierarchical_visitor::visit_leave(ir_emit_vertex *ir)
3368639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga{
3377b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
3387b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
3397b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
3408639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga   return visit_continue;
3418639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga}
3428639effefeb8c06beedbfcc294694b6bb72db882Iago Toral Quiroga
3434b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quirogair_visitor_status
3444b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quirogair_hierarchical_visitor::visit_enter(ir_end_primitive *ir)
3454b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga{
3467b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_enter != NULL)
3477b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_enter(ir, this->data_enter);
3484b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga
3494b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga   return visit_continue;
3504b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga}
3514b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga
3524b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quirogair_visitor_status
3534b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quirogair_hierarchical_visitor::visit_leave(ir_end_primitive *ir)
3544b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga{
3557b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   if (this->callback_leave != NULL)
3567b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner      this->callback_leave(ir, this->data_leave);
3577b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner
3584b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga   return visit_continue;
3594b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga}
3604b3fc21032a63f483d381c36c8e41bf3540ebfccIago Toral Quiroga
3618895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickvoid
3628895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::run(exec_list *instructions)
3638895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{
3648a1f186cc55979bb9df0a88b48da8d81460c3e7cEric Anholt   visit_list_elements(this, instructions);
3658895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick}
366f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt
367f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt
368f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholtvoid
369f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholtvisit_tree(ir_instruction *ir,
3707b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner	   void (*callback_enter)(class ir_instruction *ir, void *data),
3717b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner	   void *data_enter,
3727b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner	   void (*callback_leave)(class ir_instruction *ir, void *data),
3737b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner           void *data_leave)
374f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt{
375f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt   ir_hierarchical_visitor v;
376f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt
3777b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   v.callback_enter = callback_enter;
3787b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   v.callback_leave = callback_leave;
3797b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   v.data_enter = data_enter;
3807b962a4e6bf4758a5a9994649bd87735657d9a9aMatt Turner   v.data_leave = data_leave;
381f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt
382f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt   ir->accept(&v);
383f66ba4f3579d69841176bfe7ced9df80eac57a80Eric Anholt}
384