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