- implemented a pass manager, so optimizations could be added in advance to "a pass...
[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  * Run all passes of an ir_prog pass manager.
98  *
99  * @param mgr   the manager
100  *
101  * @return 0 if all passes return 0, else 1
102  */
103 int ir_prog_pass_mgr_run(ir_prog_pass_manager_t *mgr);
104
105 /**
106  * Terminate an ir_prog pass manager and all owned passes.
107  *
108  * @param mgr   the manager
109  */
110 void term_prog_pass_mgr(ir_prog_pass_manager_t *mgr);
111
112 #endif