remove no-out_of_bounds option from lower_switch
[libfirm] / include / libfirm / irverify.h
1 /*
2  * Copyright (C) 1995-2009 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    Check irnodes for correctness.
23  * @author   Christian Schaefer, Goetz Lindenmaier, Till Riedel
24  */
25 #ifndef FIRM_IR_IRVERIFY_H
26 #define FIRM_IR_IRVERIFY_H
27
28 #include "firm_types.h"
29 #include "begin.h"
30
31 /**
32  * @defgroup irverify  Correctness Tests
33  * @{
34  */
35
36 /**
37  * Tests the modes of checknode and its predecessors.
38  * checknode must be in current_ir_graph.
39  *
40  * @return NON-zero on success
41  */
42 FIRM_API int irn_verify(const ir_node *checknode);
43
44 /**
45  * Tests the modes of checknode and its predecessors.
46  * checknode must be in given ir_graph.
47  *
48  * @return NON-zero on success
49  */
50 FIRM_API int irn_verify_irg(const ir_node *checknode, ir_graph *irg);
51
52 /**
53  * Same as irn_verify_irg, but temporary sets verification mode to
54  * NODE_VERIFICATION_ERROR_ONLY.
55  * @return NON-zero on success
56  */
57 FIRM_API int irn_verify_irg_dump(const ir_node *checknode, ir_graph *irg,
58                                  const char **bad_string);
59
60 /**
61  * Flags for irg_verify().
62  */
63 typedef enum irg_verify_flags_t {
64         VERIFY_NORMAL      = 0,      /**< check SSA property only if dominance information is available */
65         VERIFY_ENFORCE_SSA = 1       /**< check SSA property by enforcing the dominance information recalculation */
66 } irg_verify_flags_t;
67
68 /**
69  * Calls irn_verify() for each node in irg.
70  * Graph must be in state "op_pin_state_pinned".
71  *
72  * @param irg    the IR-graph t check
73  * @param flags  one of irg_verify_flags_t
74  *
75  * @return NON-zero on success.
76  */
77 FIRM_API int irg_verify(ir_graph *irg, unsigned flags);
78
79 /**
80  * Creates an ir_graph pass for irg_verify().
81  *
82  * @param name   the name of this pass or NULL
83  * @param flags  one of irg_verify_flags_t
84  *
85  * @return  the newly created ir_graph pass
86  */
87 FIRM_API ir_graph_pass_t *irg_verify_pass(const char *name, unsigned flags);
88
89 /**
90  * Possible flags for irg_verify_bads().
91  */
92 enum verify_bad_flags_t {
93         BAD_CF      = 1,    /**< Bad nodes are allowed as predecessors of Blocks and Phis. */
94         BAD_DF      = 2,    /**< Bad nodes are allowed as dataflow predecessors. */
95         BAD_BLOCK   = 4,    /**< Bad nodes are allowed as Block input. */
96         TUPLE       = 8     /**< Tuple nodes are allowed. */
97 };
98
99 /**
100  * Verify occurrence of bad nodes in a graph.
101  *
102  * @param irg    The graph to verify
103  * @param flags  combination of verify_bad_flags_t flags describing
104  *               which Bads are allowed
105  * @returns      a value combined of verify_bad_flags_t indicating the problems found.
106  */
107 FIRM_API int irg_verify_bads(ir_graph *irg, int flags);
108
109 /** @} */
110
111 #include "end.h"
112
113 #endif