- moved pass constructors from irtools to irpass
[libfirm] / include / libfirm / irpass.h
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
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.
10  *
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.
14  *
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
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief     Manager for transformation passes.
23  * @author    Michael Beck
24  * @version   $Id: $
25  */
26 #ifndef FIRM_IR_PASS_H
27 #define FIRM_IR_PASS_H
28
29 #include "firm_types.h"
30
31 /**
32  * Creates a new ir_graph pass manager.
33  *
34  * @param name        the name of the manager
35  * @param verify_all  if non-zero, all passes of this manager will be verified
36  * @param dump_all    if non-zero, all passes results will be dumped
37  *
38  * @return the newly created manager
39  */
40 ir_graph_pass_manager_t *new_graph_pass_mgr(
41         const char *name, int verify_all, int dump_all);
42
43 /**
44  * Add an ir_graph pass to a graph pass manager.
45  *
46  * @param mgr   the ir_graph pass manager
47  * @param pass  the pass to add
48  */
49 void ir_graph_pass_mgr_add(ir_graph_pass_manager_t *mgr, ir_graph_pass_t *pass);
50
51 /**
52  * Run all passes of an ir_graph pass manager.
53  *
54  * @param mgr   the manager
55  *
56  * @return 0 if all passes return 0, else 1
57  */
58 int ir_graph_pass_mgr_run(ir_graph_pass_manager_t *mgr);
59
60 /**
61  * Terminate an ir_graph pass manager and all owned passes.
62  *
63  * @param mgr   the manager
64  */
65 void term_graph_pass_mgr(ir_graph_pass_manager_t *mgr);
66
67 /**
68  * Creates a new ir_prog pass manager.
69  *
70  * @param name        the name of the manager
71  * @param verify_all  if non-zero, all passes of this manager will be verified
72  * @param dump_all    if non-zero, all passes results will be dumped
73  *
74  * @return  the newly created manager
75  */
76 ir_prog_pass_manager_t *new_prog_pass_mgr(
77         const char *name, int verify_all, int dump_all);
78
79 /**
80  * Add an ir_prog pass to an ir_prog pass manager.
81  *
82  * @param mgr   the ir_prog pass manager
83  * @param pass  the pass to add
84  */
85 void ir_prog_pass_mgr_add(ir_prog_pass_manager_t *mgr, ir_prog_pass_t *pass);
86
87 /**
88  * Add an ir_graph_pass_manager as a pass to an ir_prog pass manager.
89  *
90  * @param mgr        the ir_prog pass manager
91  * @param graph_mgr  the ir_graph pass manager to be added
92  */
93 void ir_prog_pass_mgr_add_graph_mgr(
94         ir_prog_pass_manager_t *mgr, ir_graph_pass_manager_t *graph_mgr);
95
96 /**
97  * Add an ir_graph_pass as a pass to an ir_prog pass manager.
98  *
99  * @param mgr   the ir_prog pass manager
100  * @param pass  the ir_graph pass to be added
101  */
102 void ir_prog_pass_mgr_add_graph_pass(
103         ir_prog_pass_manager_t *mgr, ir_graph_pass_t *pass);
104
105 /**
106  * Run all passes of an ir_prog pass manager.
107  *
108  * @param mgr   the manager
109  *
110  * @return 0 if all passes return 0, else 1
111  */
112 int ir_prog_pass_mgr_run(ir_prog_pass_manager_t *mgr);
113
114 /**
115  * Terminate an ir_prog pass manager and all owned passes.
116  *
117  * @param mgr   the manager
118  */
119 void term_prog_pass_mgr(ir_prog_pass_manager_t *mgr);
120
121 /**
122  * Creates an ir_graph pass for running void function(ir_graph *irg).
123  * Uses the default verifier and dumper.
124  * The pass returns always 0.
125  *
126  * @param name      the name of this pass
127  * @param function  the function to run
128  *
129  * @return  the newly created ir_graph pass
130  */
131 ir_graph_pass_t *def_graph_pass(
132         const char *name, void (*function)(ir_graph *irg));
133
134 /**
135  * Creates an ir_graph pass for running int function(ir_graph *irg).
136  * Uses the default verifier and dumper.
137  * The pass returns the return value of function.
138  *
139  * @param name      the name of this pass
140  * @param function  the function to run
141  *
142  * @return  the newly created ir_graph pass
143  */
144 ir_graph_pass_t *def_graph_pass_ret(
145         const char *name, int (*function)(ir_graph *irg));
146
147 /**
148  * Creates an ir_graph pass for running int function(ir_graph *irg).
149  * Uses the default verifier and dumper.
150  * The pass returns the return value of function.
151  *
152  * @param memory    if non-NULL, an already allocated ir_graph_pass_t
153  * @param name      the name of this pass
154  * @param function  the function to run
155  *
156  * @return  the newly created ir_graph pass
157  */
158 ir_graph_pass_t *def_graph_pass_constructor(
159         ir_graph_pass_t *memory,
160         const char *name, int (*function)(ir_graph *irg, void *context));
161
162 /**
163  * Creates an ir_prog pass for running void function().
164  * Uses the default verifier and dumper.
165  * The pass returns always 0.
166  *
167  * @param name      the name of this pass
168  * @param function  the function to run
169  *
170  * @return  the newly created ir_graph pass
171  */
172 ir_prog_pass_t *def_prog_pass(
173         const char *name, void (*function)(void));
174
175 #endif