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