ir_print_visitor.h revision 36d8a64a95354d09685e65c5e721038ff81b6d1f
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 *);
6478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_dereference *);
6578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_assignment *);
6678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_constant *);
67ed45ec6a515f3529f12fc23d51621e435d3b6cdfIan Romanick   virtual void visit(ir_call *);
689578c87ce23a98472d52f15b0a7063f4df036c4dIan Romanick   virtual void visit(ir_return *);
693c6fea3048a0d9add2fec621d30c32f3519d8868Ian Romanick   virtual void visit(ir_if *);
70fad607a9be59056aecda50176b4d20a8b5319747Ian Romanick   virtual void visit(ir_loop *);
71f8e31e00b1078dc28187a43a1ab8949e154e7533Ian Romanick   virtual void visit(ir_loop_jump *);
7278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   /*@}*/
738c70a621939e55a81a363f04dee3333772339cbeIan Romanick
748c70a621939e55a81a363f04dee3333772339cbeIan Romanickprivate:
758c70a621939e55a81a363f04dee3333772339cbeIan Romanick   int deref_depth;
7678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick};
7778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick
7878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#endif /* IR_PRINT_VISITOR_H */
79