ir_print_visitor.cpp revision f8e31e00b1078dc28187a43a1ab8949e154e7533
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", 103dc58b3f8ccd817fdee390a3df5b8e0fb29d5397cEric Anholt "f2b", 104dc58b3f8ccd817fdee390a3df5b8e0fb29d5397cEric Anholt "b2f", 105c2cb84e17b2f7a5db146faa9c9c2a2ffac4b6c19Eric Anholt "i2b", 106c2cb84e17b2f7a5db146faa9c9c2a2ffac4b6c19Eric Anholt "b2i", 107e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "u2f", 108e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "trunc", 109e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "ceil", 110e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "floor", 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 "&&", 128e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "^^", 129e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "||", 130e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "dot", 131e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "min", 132e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt "max", 133ddd2e83db2b6baa062f76f22bb980030144dbcadEric Anholt "pow", 134e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt }; 135e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt 136d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf("(expression "); 137d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick 138e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt assert((unsigned int)ir->operation < 139e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt sizeof(operators) / sizeof(operators[0])); 140d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick 141e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt printf("%s", operators[ir->operation]); 142e65e12fdbc2f51ecc3ca9265993c0c7a03e05a84Eric Anholt printf("("); 143d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick if (ir->operands[0]) 144d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick ir->operands[0]->accept(this); 145d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf(") "); 146d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick 147d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf("("); 148d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick if (ir->operands[1]) 149d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick ir->operands[1]->accept(this); 150d7388f389dfd17e3842e5dfda1b5782c00f454e5Ian Romanick printf(")) "); 15178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 15278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 15378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 154affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunkevoid ir_print_visitor::visit(ir_swizzle *ir) 155affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke{ 156affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke const unsigned swiz[4] = { 157affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.x, 158affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.y, 159affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.z, 160affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->mask.w, 161affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke }; 162affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke 163affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf("(swiz "); 164affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke for (unsigned i = 0; i < ir->mask.num_components; i++) { 165affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf("%c", "xyzw"[swiz[i]]); 166affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke } 167affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf(" "); 168affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke ir->val->accept(this); 169affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf(")"); 170affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke} 171affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke 172affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke 17378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_dereference *ir) 17478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 1758c70a621939e55a81a363f04dee3333772339cbeIan Romanick deref_depth++; 1768c70a621939e55a81a363f04dee3333772339cbeIan Romanick 1778c70a621939e55a81a363f04dee3333772339cbeIan Romanick switch (ir->mode) { 1788c70a621939e55a81a363f04dee3333772339cbeIan Romanick case ir_dereference::ir_reference_variable: { 1798c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(var_ref "); 1808c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->var->accept(this); 181affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke printf(") "); 1828c70a621939e55a81a363f04dee3333772339cbeIan Romanick break; 1838c70a621939e55a81a363f04dee3333772339cbeIan Romanick } 1848c70a621939e55a81a363f04dee3333772339cbeIan Romanick case ir_dereference::ir_reference_array: 1858c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(array_ref "); 1868c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->var->accept(this); 1878c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->selector.array_index->accept(this); 188d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") "); 1898c70a621939e55a81a363f04dee3333772339cbeIan Romanick break; 1908c70a621939e55a81a363f04dee3333772339cbeIan Romanick case ir_dereference::ir_reference_record: 1918c70a621939e55a81a363f04dee3333772339cbeIan Romanick printf("(record_ref "); 1928c70a621939e55a81a363f04dee3333772339cbeIan Romanick ir->var->accept(this); 193d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(%s)) ", ir->selector.field); 1948c70a621939e55a81a363f04dee3333772339cbeIan Romanick break; 1958c70a621939e55a81a363f04dee3333772339cbeIan Romanick } 1968c70a621939e55a81a363f04dee3333772339cbeIan Romanick 1978c70a621939e55a81a363f04dee3333772339cbeIan Romanick deref_depth--; 19878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 19978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 20078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 20178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_assignment *ir) 20278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 203d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(assign ("); 2046044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick 2056044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick if (ir->condition) 2066044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick ir->condition->accept(this); 2076044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick else 2086044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick printf("true"); 2096044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick 210d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") ("); 211d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick 2126044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick ir->lhs->accept(this); 2136044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick 214d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") ("); 215d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick 2166044ae79a013ba6067ffd968cee97c0d29b728c2Ian Romanick ir->rhs->accept(this); 217d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") "); 21878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 21978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 22078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 22178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickvoid ir_print_visitor::visit(ir_constant *ir) 22278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick{ 223795492247369199d5e79f2503c40920ff8a9b686Ian Romanick const glsl_type *const base_type = ir->type->get_base_type(); 224fe10250355682bcfb87d1688151b93b08d0a4e3cIan Romanick 225d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf("(constant ("); 226795492247369199d5e79f2503c40920ff8a9b686Ian Romanick print_type(base_type); 227d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(") "); 228795492247369199d5e79f2503c40920ff8a9b686Ian Romanick 229d811d47609323f99f3718a2c5fb75ce47032f380Ian Romanick printf("(%d) (", ir->type->components()); 230d811d47609323f99f3718a2c5fb75ce47032f380Ian Romanick for (unsigned i = 0; i < ir->type->components(); i++) { 231795492247369199d5e79f2503c40920ff8a9b686Ian Romanick if (i != 0) 232795492247369199d5e79f2503c40920ff8a9b686Ian Romanick printf(", "); 233795492247369199d5e79f2503c40920ff8a9b686Ian Romanick 234795492247369199d5e79f2503c40920ff8a9b686Ian Romanick switch (base_type->base_type) { 235795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_UINT: printf("%u", ir->value.u[i]); break; 236795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_INT: printf("%d", ir->value.i[i]); break; 237795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_FLOAT: printf("%f", ir->value.f[i]); break; 238795492247369199d5e79f2503c40920ff8a9b686Ian Romanick case GLSL_TYPE_BOOL: printf("%d", ir->value.b[i]); break; 239795492247369199d5e79f2503c40920ff8a9b686Ian Romanick default: assert(0); 240795492247369199d5e79f2503c40920ff8a9b686Ian Romanick } 241795492247369199d5e79f2503c40920ff8a9b686Ian Romanick } 242795492247369199d5e79f2503c40920ff8a9b686Ian Romanick printf(")) "); 24378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick} 244ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick 245ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick 246ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanickvoid 247ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanickir_print_visitor::visit(ir_call *ir) 248ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick{ 2495508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick printf("(call (%s) ", ir->callee_name()); 2505508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick foreach_iter(exec_list_iterator, iter, *ir) { 2515508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick ir_instruction *const inst = (ir_instruction *) iter.get(); 252ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick 2535508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick inst->accept(this); 2545508129fd8beb1113ad2b64bdddb36c954a7b5adIan Romanick } 255ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick} 2569578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 2579578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 2589578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanickvoid 2599578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanickir_print_visitor::visit(ir_return *ir) 2609578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick{ 2619578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick printf("(return"); 2629578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 263fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke ir_rvalue *const value = ir->get_value(); 2649578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick if (value) { 2659578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick printf(" "); 2669578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick value->accept(this); 2679578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick } 2689578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick 269d14642739e488c8cb15726de5a63cb01c6ce835cIan Romanick printf(")"); 2709578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick} 2713c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2723c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2733c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanickvoid 2743c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanickir_print_visitor::visit(ir_if *ir) 2753c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick{ 2763c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("(if "); 2773c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick ir->condition->accept(this); 2783c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2793c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("(\n"); 2803c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick foreach_iter(exec_list_iterator, iter, ir->then_instructions) { 2813c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick ir_instruction *const inst = (ir_instruction *) iter.get(); 2823c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2833c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick inst->accept(this); 284b94e402cffc1c1606d8d7375f38ab573877e1c6aEric Anholt printf("\n"); 2853c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick } 2863c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf(")\n"); 2873c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2883c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("(\n"); 2893c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick foreach_iter(exec_list_iterator, iter, ir->else_instructions) { 2903c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick ir_instruction *const inst = (ir_instruction *) iter.get(); 2913c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick 2923c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick inst->accept(this); 293b94e402cffc1c1606d8d7375f38ab573877e1c6aEric Anholt printf("\n"); 2943c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick } 2953c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick printf("))\n"); 2963c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick} 297fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick 298fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick 299fad607a9be59056aecda50176b4d20a8b5319747Ian Romanickvoid 300fad607a9be59056aecda50176b4d20a8b5319747Ian Romanickir_print_visitor::visit(ir_loop *ir) 301fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick{ 302fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick printf("(loop ("); 303fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick if (ir->counter != NULL) 304fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick ir->counter->accept(this); 305fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick printf(") ("); 306fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick if (ir->from != NULL) 307fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick ir->from->accept(this); 308fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick printf(") ("); 309fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick if (ir->to != NULL) 310fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick ir->to->accept(this); 311fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick printf(") ("); 312fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick if (ir->increment != NULL) 313fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick ir->increment->accept(this); 314fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick printf(") ("); 315fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick foreach_iter(exec_list_iterator, iter, ir->body_instructions) { 316fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick ir_instruction *const inst = (ir_instruction *) iter.get(); 317fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick 318fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick inst->accept(this); 319fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick } 320fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick printf("))\n"); 321fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick} 322f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick 323f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick 324f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanickvoid 325f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanickir_print_visitor::visit(ir_loop_jump *ir) 326f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick{ 327f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick printf("%s", ir->is_break() ? "break" : "continue"); 328f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick} 329