2 * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
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.
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.
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
22 * @brief common firm declarations
23 * @author Martin Trapp, Christian Schaefer, Goetz Lindenmaier
25 #ifndef FIRM_COMMON_FIRM_COMMON_H
26 #define FIRM_COMMON_FIRM_COMMON_H
28 #include "firm_types.h"
32 * @defgroup initalization Library Initialization
33 * The functions in this section deal with initialization and deinitalization
34 * of the libFirm library.
39 * Initializes the firm library. Allocates default data structures.
41 FIRM_API void ir_init(void);
44 * Frees all memory occupied by the firm library.
46 FIRM_API void ir_finish(void);
48 /** returns the libFirm major version number */
49 FIRM_API unsigned ir_get_version_major(void);
50 /** returns libFirm minor version number */
51 FIRM_API unsigned ir_get_version_minor(void);
52 /** returns string describing libFirm revision */
53 FIRM_API const char *ir_get_version_revision(void);
54 /** returns string describing libFirm build */
55 FIRM_API const char *ir_get_version_build(void);
58 * A list of firm kinds.
59 * Most important datastructures in firm contain a firm_kind field at the
60 * beginning so given void* pointer you can usually still guess the kind
61 * of thing the pointer points to.
62 * This is used in debug helper functions and printers.
64 typedef enum firm_kind {
65 k_BAD = 0, /**< An invalid firm node. */
66 k_entity, /**< An entity. */
67 k_type, /**< A type. */
68 k_ir_graph, /**< An IR graph. */
69 k_ir_node, /**< An IR node. */
70 k_ir_mode, /**< An IR mode. */
71 k_ir_op, /**< An IR opcode. */
72 k_tarval, /**< A tarval. */
73 k_ir_loop, /**< A loop. */
74 k_ir_prog, /**< A program representation (irp). */
75 k_ir_graph_pass, /**< An ir_graph pass. */
76 k_ir_prog_pass, /**< An ir_prog pass. */
77 k_ir_graph_pass_mgr, /**< An ir_graph pass manager. */
78 k_ir_prog_pass_mgr, /**< An ir_prog pass manager. */
79 k_ir_max /**< maximum value -- illegal for firm nodes. */
83 * Returns the kind of a thing.
85 * @param firm_thing pointer representing a firm object
87 FIRM_API firm_kind get_kind(const void *firm_thing);