1986b8f798272d3ae2898617c8fb089156a5941c0Ian Romanick/* -*- c++ -*- */ 278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick/* 378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Copyright © 2010 Intel Corporation 478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Permission is hereby granted, free of charge, to any person obtaining a 678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * copy of this software and associated documentation files (the "Software"), 778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * to deal in the Software without restriction, including without limitation 878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense, 978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * and/or sell copies of the Software, and to permit persons to whom the 1078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Software is furnished to do so, subject to the following conditions: 1178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 1278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * The above copyright notice and this permission notice (including the next 1378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * paragraph) shall be included in all copies or substantial portions of the 1478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Software. 1578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 1678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * DEALINGS IN THE SOFTWARE. 2378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */ 2478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 2578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#pragma once 2678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#ifndef IR_PRINT_VISITOR_H 2778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#define IR_PRINT_VISITOR_H 2878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 2978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#include "ir.h" 3078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#include "ir_visitor.h" 3178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 3256ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunkeextern "C" { 3356ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke#include "program/symbol_table.h" 3456ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke} 3556ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke 3636d8a64a95354d09685e65c5e721038ff81b6d1fIan Romanickextern void _mesa_print_ir(exec_list *instructions, 3736d8a64a95354d09685e65c5e721038ff81b6d1fIan Romanick struct _mesa_glsl_parse_state *state); 3836d8a64a95354d09685e65c5e721038ff81b6d1fIan Romanick 3978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick/** 4078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Abstract base class of visitors of IR instruction trees 4178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */ 4278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickclass ir_print_visitor : public ir_visitor { 4378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickpublic: 4456ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke ir_print_visitor(); 4556ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke virtual ~ir_print_visitor(); 4678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 47bf496862be1ba863285aa2c1a2262b2d764c3e53Eric Anholt void indent(void); 48bf496862be1ba863285aa2c1a2262b2d764c3e53Eric Anholt 4978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /** 5078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * \name Visit methods 5178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 5278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * As typical for the visitor pattern, there must be one \c visit method for 5378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * each concrete subclass of \c ir_instruction. Virtual base classes within 5478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * the hierarchy should not have \c visit methods. 5578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */ 5678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /*@{*/ 57807e967c615dc80a264af5a89af7649f95481744Kenneth Graunke virtual void visit(ir_rvalue *); 5878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_variable *); 5978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_function_signature *); 6078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_function *); 6178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_expression *); 62be298063b501a3e0bd769209f531fd23e4e4646eKenneth Graunke virtual void visit(ir_texture *); 63affc1413ac9f1f077a4ba1a1b7135f73d7a71167Kenneth Graunke virtual void visit(ir_swizzle *); 64c7b1046a9fa6da916f11fb9e43d61fd772470183Ian Romanick virtual void visit(ir_dereference_variable *); 65c7b1046a9fa6da916f11fb9e43d61fd772470183Ian Romanick virtual void visit(ir_dereference_array *); 66c7b1046a9fa6da916f11fb9e43d61fd772470183Ian Romanick virtual void visit(ir_dereference_record *); 6778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_assignment *); 6878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_constant *); 69ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick virtual void visit(ir_call *); 709578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick virtual void visit(ir_return *); 7116efab1c4dee6e6a827ba5f1c482378159545ae5Kenneth Graunke virtual void visit(ir_discard *); 723c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick virtual void visit(ir_if *); 73fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick virtual void visit(ir_loop *); 74f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick virtual void visit(ir_loop_jump *); 7578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /*@}*/ 768c70a621939e55a81a363f04dee3333772339cbeIan Romanick 778c70a621939e55a81a363f04dee3333772339cbeIan Romanickprivate: 7856ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke /** 7956ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke * Fetch/generate a unique name for ir_variable. 8056ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke * 8156ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke * GLSL IR permits multiple ir_variables to share the same name. This works 8256ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke * fine until we try to print it, when we really need a unique one. 8356ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke */ 8456ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke const char *unique_name(ir_variable *var); 8556ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke 8656ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke /** A mapping from ir_variable * -> unique printable names. */ 8756ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke hash_table *printable_names; 8856ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke _mesa_symbol_table *symbols; 8956ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke 9056ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke void *mem_ctx; 9156ef62d9885f805bbfb2243dc860ff425d5b4d3bKenneth Graunke 92bf496862be1ba863285aa2c1a2262b2d764c3e53Eric Anholt int indentation; 9378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick}; 9478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 9578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#endif /* IR_PRINT_VISITOR_H */ 96