2 * Copyright (C) 1995-2009 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
6 * This file may be distributed and/or modified under the terms of the
7 * GNU General Public License version 2 as published by the Free Software
8 * Foundation and appearing in the file LICENSE.GPL included in the
9 * packaging of this file.
11 * Licensees holding valid libFirm Professional Edition licenses may use
12 * this file in accordance with the libFirm Commercial License.
13 * Agreement provided with the Software.
15 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 #ifndef FIRM_IR_PASS_T_H
20 #define FIRM_IR_PASS_T_H
24 * @brief Manager for optimization passes. Private Header
25 * @author Michael Beck
28 #include "firm_types.h"
29 #include "firm_common.h"
34 * Pass function on an ir_graph.
36 typedef int (*RUN_ON_IRG_FUNC)(ir_graph *irg, void *ctx);
39 * Dump function on an ir_graph.
41 typedef void (*DUMP_ON_IRG_FUNC)(ir_graph *irg, void *ctx, unsigned idx);
44 * Pass function on an ir_prog.
46 typedef int (*RUN_ON_IRPROG_FUNC)(ir_prog *prog, void *ctx);
49 * Dump function on an ir_prog.
51 typedef void (*DUMP_ON_IRPROG_FUNC)(ir_prog *irg, void *ctx, unsigned idx);
54 * Init/Term function on an pass.
56 typedef void (*INIT_TERM_FUNC)(void *ctx);
61 struct ir_graph_pass_t {
65 /** This function is run on every graph on an ir_prog. */
66 RUN_ON_IRG_FUNC run_on_irg;
67 RUN_ON_IRG_FUNC verify_irg;
68 DUMP_ON_IRG_FUNC dump_irg;
69 /** This function is called if this pass is added. */
70 INIT_TERM_FUNC add_to_mgr;
71 /** This function is called if this pass is removed. */
72 INIT_TERM_FUNC rem_from_mgr;
74 /** context parameter for this pass */
77 /** The name of the pass. */
80 /** Links all passes. */
83 unsigned run_parallel:1; /**< if set this pass can run parallel on all graphs. */
89 struct ir_prog_pass_t {
93 /** This function is on an ir_prog. */
94 RUN_ON_IRPROG_FUNC run_on_irprog;
95 RUN_ON_IRPROG_FUNC verify_irprog;
96 DUMP_ON_IRPROG_FUNC dump_irprog;
97 /** This function is called if this pass is added. */
98 INIT_TERM_FUNC add_to_mgr;
99 /** This function is called if this pass is removed. */
100 INIT_TERM_FUNC rem_from_mgr;
102 /** context parameter for this pass */
105 /** The name of the pass. */
108 /** Links all passes */
111 unsigned is_wrapper:1; /**< set if this is a wrapper pass. */
115 * An ir_graph pass manager.
117 struct ir_graph_pass_manager_t {
118 firm_kind kind; /**< The firm kind. */
119 list_head passes; /**< The list of passes. */
120 unsigned n_passes; /**< Number of added passes. */
121 const char *name; /**< the name of the manager. */
122 unsigned run_idx; /**< The run number for the first pass of this manager. */
123 unsigned verify_all:1; /**< Set if every pass should be verified. */
124 unsigned dump_all:1; /**< Set if every pass should be dumped. */
128 * An ir_prog pass manager.
130 struct ir_prog_pass_manager_t {
131 firm_kind kind; /**< The firm kind. */
132 list_head passes; /**< The list of passes. */
133 unsigned n_passes; /**< Number of added passes. */
134 const char *name; /**< the name of the manager. */
135 unsigned run_idx; /**< The run number for the first pass of this manager. */
136 unsigned verify_all:1; /**< Set if every pass should be verified. */
137 unsigned dump_all:1; /**< Set if every pass should be dumped. */
141 * Ensure that no verifier is run an ir_prog pass.
143 int ir_prog_no_verify(ir_prog *prog, void *ctx);
146 * Ensure that no dumper is run from an ir_prog pass.
148 void ir_prog_no_dump(ir_prog *prog, void *ctx, unsigned idx);