398e56b39915b107c0248e4d156859cb63b0696c
[libfirm] / ir / be / beirgmod.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       Backend IRG modification routines.
23  * @author      Sebastian Hack, Daniel Grund, Matthias Braun, Christian Wuerdig
24  * @date        04.05.2005
25  * @version     $Id$
26  *
27  * This file contains the following IRG modifications for be routines:
28  * - insertion of Perm nodes
29  * - empty block elimination
30  * - a simple dead node elimination (set inputs of unreachable nodes to BAD)
31  */
32 #ifndef FIRM_BE_BEIRGMOD_H
33 #define FIRM_BE_BEIRGMOD_H
34
35 #include "firm_types.h"
36 #include "beirg.h"
37
38 /**
39  * Insert a Perm which permutes all (non-ignore) live values of a given register class
40  * after a certain instruction.
41  * @param lv        Liveness Information.
42  * @param irn       The node to insert the Perm after.
43  * @return          The Perm or NULL if nothing was live before @p irn.
44  */
45 ir_node *insert_Perm_after(be_irg_t *birg, const arch_register_class_t *cls,
46                                                    ir_node *irn);
47
48 /**
49  * Removes basic blocks that only contain a jump instruction
50  * (this will potentially create critical edges).
51  *
52  * @param irg  the graph that will be changed
53  *
54  * @return non-zero if the graph was changed, zero else
55  */
56 int be_remove_empty_blocks(ir_graph *irg);
57
58 #endif /* FIRM_BE_BEIRGMOD_H */