ir_print_visitor.h revision c7b1046a9fa6da916f11fb9e43d61fd772470183
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 3236d8a64a95354d09685e65c5e721038ff81b6d1fIan Romanickextern void _mesa_print_ir(exec_list *instructions, 3336d8a64a95354d09685e65c5e721038ff81b6d1fIan Romanick struct _mesa_glsl_parse_state *state); 3436d8a64a95354d09685e65c5e721038ff81b6d1fIan Romanick 3578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick/** 3678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Abstract base class of visitors of IR instruction trees 3778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */ 3878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickclass ir_print_visitor : public ir_visitor { 3978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickpublic: 4078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick ir_print_visitor() 418c70a621939e55a81a363f04dee3333772339cbeIan Romanick : deref_depth(0) 4278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick { 4378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /* empty */ 4478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick } 4578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 4678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual ~ir_print_visitor() 4778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick { 4878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /* empty */ 4978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick } 5078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 5178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /** 5278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * \name Visit methods 5378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * 5478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * As typical for the visitor pattern, there must be one \c visit method for 5578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * each concrete subclass of \c ir_instruction. Virtual base classes within 5678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * the hierarchy should not have \c visit methods. 5778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */ 5878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /*@{*/ 5978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_variable *); 6078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_function_signature *); 6178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_function *); 6278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick virtual void visit(ir_expression *); 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 *); 713c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick virtual void visit(ir_if *); 72fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick virtual void visit(ir_loop *); 73f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick virtual void visit(ir_loop_jump *); 7478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick /*@}*/ 758c70a621939e55a81a363f04dee3333772339cbeIan Romanick 768c70a621939e55a81a363f04dee3333772339cbeIan Romanickprivate: 778c70a621939e55a81a363f04dee3333772339cbeIan Romanick int deref_depth; 7878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick}; 7978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick 8078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#endif /* IR_PRINT_VISITOR_H */ 81