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