ir_print_visitor.cpp revision 3c6fea3048a0d9add2fec621d30c32f3519d8868
178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick/* 278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Copyright © 2010 Intel Corporation 378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Permission is hereby granted, free of charge, to any person obtaining a 578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * copy of this software and associated documentation files (the "Software"), 678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * to deal in the Software without restriction, including without limitation 778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense, 878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * and/or sell copies of the Software, and to permit persons to whom the 978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Software is furnished to do so, subject to the following conditions: 1078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 1178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * The above copyright notice and this permission notice (including the next 1278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * paragraph) shall be included in all copies or substantial portions of the 1378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Software. 1478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 1578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * DEALINGS IN THE SOFTWARE. 2278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */ 2378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#include <cstdio> 2478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#include "ir_print_visitor.h" 25fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick#include "glsl_types.h" 26fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick 27fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanickstatic void 28fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanickprint_type(const glsl_type *t) 29fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick{ 30fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick if (t->base_type == GLSL_TYPE_ARRAY) { 31d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("array ("); 32fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick print_type(t->fields.array); 33d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") (%u))", t->length); 34fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick } else if (t->base_type == GLSL_TYPE_STRUCT) { 35d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("struct (%s %u ", t->name ? t->name : "@", t->length); 36d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(FINISHME: structure fields go here) "); 37fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick printf(")"); 38fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick } else { 39fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick printf("%s", t->name); 40fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick } 41fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick} 42fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick 4378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 4478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_variable *ir) 4578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 468c70a621939e55a81a363f04dee3333772339cbeIan Romanick if (deref_depth) { 478c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(%s)", ir->name); 488c70a621939e55a81a363f04dee3333772339cbeIan Romanick } else { 498c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(declare "); 5078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 518c70a621939e55a81a363f04dee3333772339cbeIan Romanick const char *const cent = (ir->centroid) ? "centroid " : ""; 528c70a621939e55a81a363f04dee3333772339cbeIan Romanick const char *const inv = (ir->invariant) ? "invariant " : ""; 538c70a621939e55a81a363f04dee3333772339cbeIan Romanick const char *const mode[] = { "", "uniform ", "in ", "out ", "inout " }; 548c70a621939e55a81a363f04dee3333772339cbeIan Romanick const char *const interp[] = { "", "flat", "noperspective" }; 5578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 568c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(%s%s%s%s) ", 578c70a621939e55a81a363f04dee3333772339cbeIan Romanick cent, inv, mode[ir->mode], interp[ir->interpolation]); 58fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick 598c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("("); 608c70a621939e55a81a363f04dee3333772339cbeIan Romanick print_type(ir->type); 618c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf(") "); 62d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(%s)) ", ir->name); 638c70a621939e55a81a363f04dee3333772339cbeIan Romanick } 6478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 6578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 6678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 6778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_label *ir) 6878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 69d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("\n(label %s)", ir->label); 7078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 7178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 7278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 7378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_function_signature *ir) 7478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 7578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick printf("%s:%d:\n", __func__, __LINE__); 7678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick (void) ir; 7778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 7878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 7978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 8078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_function *ir) 8178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 8278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick printf("(function %s\n", ir->name); 8378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick printf(")\n"); 8478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 8578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 8678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 8778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_expression *ir) 8878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 89e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt static const char *const operators[] = { 90e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "~", 91e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "!", 92e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "-", 93e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "abs", 94e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "rcp", 95e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "rsq", 9644d68fd06ff8b53fc70a9a07c897dda9b3457ef8Eric Anholt "sqrt", 97e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "exp", 98e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "log", 9901665262e50162e858c45f92a8a7e12b953e56adEric Anholt "exp2", 10001665262e50162e858c45f92a8a7e12b953e56adEric Anholt "log2", 101e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "f2i", 102e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "i2f", 103e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "u2f", 104e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "trunc", 105e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "ceil", 106e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "floor", 107e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "+", 108e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "-", 109e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "*", 110e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "/", 111e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "%", 112e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "<", 113e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt ">", 114e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "<=", 115e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt ">=", 116e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "==", 117e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "!=", 118e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "<<", 119e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt ">>", 120e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "&", 121e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "^", 122e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "|", 123e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "&&", 124e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "^^", 125e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "||", 126e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "!", 127e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "dot", 128e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "min", 129e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "max", 130ddd2e83db2b6baa062f76f22bb980030144dbcadEric Anholt "pow", 131e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt }; 132e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt 133d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf("(expression "); 134d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick 135e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt assert((unsigned int)ir->operation < 136e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt sizeof(operators) / sizeof(operators[0])); 137d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick 138e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt printf("%s", operators[ir->operation]); 139e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt printf("("); 140d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick if (ir->operands[0]) 141d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick ir->operands[0]->accept(this); 142d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf(") "); 143d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick 144d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf("("); 145d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick if (ir->operands[1]) 146d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick ir->operands[1]->accept(this); 147d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf(")) "); 14878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 14978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 15078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 151affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunkevoid ir_print_visitor::visit(ir_swizzle *ir) 152affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke{ 153affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke const unsigned swiz[4] = { 154affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.x, 155affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.y, 156affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.z, 157affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.w, 158affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke }; 159affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke 160affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf("(swiz "); 161affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke for (unsigned i = 0; i < ir->mask.num_components; i++) { 162affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf("%c", "xyzw"[swiz[i]]); 163affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke } 164affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf(" "); 165affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->val->accept(this); 166affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf(")"); 167affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke} 168affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke 169affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke 17078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_dereference *ir) 17178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 1728c70a621939e55a81a363f04dee3333772339cbeIan Romanick deref_depth++; 1738c70a621939e55a81a363f04dee3333772339cbeIan Romanick 1748c70a621939e55a81a363f04dee3333772339cbeIan Romanick switch (ir->mode) { 1758c70a621939e55a81a363f04dee3333772339cbeIan Romanick case ir_dereference::ir_reference_variable: { 1768c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(var_ref "); 1778c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->var->accept(this); 178affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf(") "); 1798c70a621939e55a81a363f04dee3333772339cbeIan Romanick break; 1808c70a621939e55a81a363f04dee3333772339cbeIan Romanick } 1818c70a621939e55a81a363f04dee3333772339cbeIan Romanick case ir_dereference::ir_reference_array: 1828c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(array_ref "); 1838c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->var->accept(this); 1848c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->selector.array_index->accept(this); 185d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") "); 1868c70a621939e55a81a363f04dee3333772339cbeIan Romanick break; 1878c70a621939e55a81a363f04dee3333772339cbeIan Romanick case ir_dereference::ir_reference_record: 1888c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(record_ref "); 1898c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->var->accept(this); 190d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(%s)) ", ir->selector.field); 1918c70a621939e55a81a363f04dee3333772339cbeIan Romanick break; 1928c70a621939e55a81a363f04dee3333772339cbeIan Romanick } 1938c70a621939e55a81a363f04dee3333772339cbeIan Romanick 1948c70a621939e55a81a363f04dee3333772339cbeIan Romanick deref_depth--; 19578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 19678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 19778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 19878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_assignment *ir) 19978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 200d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(assign ("); 2016044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick 2026044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick if (ir->condition) 2036044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick ir->condition->accept(this); 2046044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick else 2056044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick printf("true"); 2066044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick 207d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") ("); 208d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick 2096044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick ir->lhs->accept(this); 2106044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick 211d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") ("); 212d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick 2136044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick ir->rhs->accept(this); 214d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") "); 21578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 21678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 21778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 21878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_constant *ir) 21978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 220795492247369199d5e79f2503c40920ff8a9b686Ian Romanick const glsl_type *const base_type = ir->type->get_base_type(); 221fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick 222d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(constant ("); 223795492247369199d5e79f2503c40920ff8a9b686Ian Romanick print_type(base_type); 224d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") "); 225795492247369199d5e79f2503c40920ff8a9b686Ian Romanick 226d811d47609323f99f3718a2c5fb75ce47032f380Ian Romanick printf("(%d) (", ir->type->components()); 227d811d47609323f99f3718a2c5fb75ce47032f380Ian Romanick for (unsigned i = 0; i < ir->type->components(); i++) { 228795492247369199d5e79f2503c40920ff8a9b686Ian Romanick if (i != 0) 229795492247369199d5e79f2503c40920ff8a9b686Ian Romanick printf(", "); 230795492247369199d5e79f2503c40920ff8a9b686Ian Romanick 231795492247369199d5e79f2503c40920ff8a9b686Ian Romanick switch (base_type->base_type) { 232795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_UINT: printf("%u", ir->value.u[i]); break; 233795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_INT: printf("%d", ir->value.i[i]); break; 234795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_FLOAT: printf("%f", ir->value.f[i]); break; 235795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_BOOL: printf("%d", ir->value.b[i]); break; 236795492247369199d5e79f2503c40920ff8a9b686Ian Romanick default: assert(0); 237795492247369199d5e79f2503c40920ff8a9b686Ian Romanick } 238795492247369199d5e79f2503c40920ff8a9b686Ian Romanick } 239795492247369199d5e79f2503c40920ff8a9b686Ian Romanick printf(")) "); 24078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 241ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick 242ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick 243ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanickvoid 244ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanickir_print_visitor::visit(ir_call *ir) 245ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick{ 2465508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick printf("(call (%s) ", ir->callee_name()); 2475508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick foreach_iter(exec_list_iterator, iter, *ir) { 2485508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick ir_instruction *const inst = (ir_instruction *) iter.get(); 249ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick 2505508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick inst->accept(this); 2515508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick } 252ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick} 2539578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 2549578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 2559578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanickvoid 2569578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanickir_print_visitor::visit(ir_return *ir) 2579578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick{ 2589578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick printf("(return"); 2599578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 260fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke ir_rvalue *const value = ir->get_value(); 2619578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick if (value) { 2629578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick printf(" "); 2639578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick value->accept(this); 2649578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick } 2659578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 266d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(")"); 2679578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick} 2683c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2693c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2703c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanickvoid 2713c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanickir_print_visitor::visit(ir_if *ir) 2723c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick{ 2733c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("(if "); 2743c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick ir->condition->accept(this); 2753c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2763c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("(\n"); 2773c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick foreach_iter(exec_list_iterator, iter, ir->then_instructions) { 2783c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick ir_instruction *const inst = (ir_instruction *) iter.get(); 2793c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2803c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick inst->accept(this); 2813c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick } 2823c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf(")\n"); 2833c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2843c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("(\n"); 2853c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick foreach_iter(exec_list_iterator, iter, ir->else_instructions) { 2863c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick ir_instruction *const inst = (ir_instruction *) iter.get(); 2873c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2883c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick inst->accept(this); 2893c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick } 2903c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("))\n"); 2913c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick} 292