ir_hierarchical_visitor.cpp revision 8895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1
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 */ 238895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick#define NULL 0 248895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick#include "ir.h" 258895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick#include "ir_hierarchical_visitor.h" 268895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 278895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 288895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit(ir_variable *ir) 298895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 308895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 318895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 328895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 338895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 348895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 358895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit(ir_constant *ir) 368895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 378895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 388895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 398895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 408895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 418895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 428895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit(ir_loop_jump *ir) 438895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 448895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 458895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 468895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 478895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 488895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 498895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_loop *ir) 508895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 518895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 528895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 538895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 548895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 558895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 568895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_loop *ir) 578895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 588895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 598895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 608895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 618895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 628895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 638895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_function_signature *ir) 648895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 658895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 668895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 678895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 688895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 698895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 708895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_function_signature *ir) 718895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 728895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 738895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 748895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 758895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 768895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 778895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_function *ir) 788895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 798895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 808895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 818895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 828895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 838895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 848895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_function *ir) 858895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 868895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 878895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 888895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 898895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 908895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 918895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_expression *ir) 928895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 938895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 948895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 958895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 968895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 978895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 988895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_expression *ir) 998895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1008895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1018895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1028895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1038895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1048895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1058895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_swizzle *ir) 1068895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1078895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1088895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1098895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1108895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1118895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1128895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_swizzle *ir) 1138895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1148895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1158895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1168895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1178895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1188895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1198895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_dereference *ir) 1208895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1218895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1228895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1238895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1248895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1258895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1268895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_dereference *ir) 1278895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1288895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1298895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1308895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1318895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1328895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1338895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_assignment *ir) 1348895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1358895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1368895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1378895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1388895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1398895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1408895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_assignment *ir) 1418895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1428895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1438895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1448895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1458895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1468895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1478895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_call *ir) 1488895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1498895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1508895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1518895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1528895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1538895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1548895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_call *ir) 1558895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1568895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1578895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1588895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1598895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1608895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1618895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_return *ir) 1628895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1638895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1648895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1658895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1668895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1678895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1688895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_return *ir) 1698895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1708895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1718895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1728895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1738895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1748895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1758895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_enter(ir_if *ir) 1768895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1778895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1788895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1798895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1808895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1818895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_visitor_status 1828895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::visit_leave(ir_if *ir) 1838895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1848895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick (void) ir; 1858895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick return visit_continue; 1868895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 1878895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1888895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickvoid 1898895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanickir_hierarchical_visitor::run(exec_list *instructions) 1908895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick{ 1918895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick foreach_list(n, instructions) { 1928895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick ir_instruction *ir = (ir_instruction *) n; 1938895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick 1948895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick if (ir->accept(this) != visit_continue) 1958895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick break; 1968895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick } 1978895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1Ian Romanick} 198