typedef unsigned long ir_label_t;
typedef struct dbg_info dbg_info, *dbg_info_ptr;
+typedef struct type_dbg_info type_dbg_info;
typedef const struct _ident ident, *ir_ident_ptr;
typedef struct ir_node ir_node, *ir_node_ptr;
typedef struct ir_op ir_op, *ir_op_ptr;
typedef struct ir_enum_const ir_enum_const, *ir_enum_const_ptr;
typedef struct ir_type ir_type, *ir_type_ptr;
typedef struct ir_graph ir_graph, *ir_graph_ptr;
+typedef struct ir_prog ir_prog, *ir_prog_ptr;
typedef struct ir_loop ir_loop, *ir_loop_ptr;
typedef struct ir_region ir_region, *ir_region_ptr;
typedef struct ir_reg_tree ir_reg_tree, *ir_reg_tree_ptr;
typedef struct ir_entity ir_entity, *ir_entity_ptr;
-typedef struct compound_graph_path compound_graph_path, *ir_compound_graph_path_ptr;
typedef struct _ir_phase ir_phase, *ir_phase_ptr;
typedef struct _ir_extblk ir_extblk, *ir_extblk_ptr;
typedef struct ir_exec_freq ir_exec_freq, *ir_exec_freq_ptr;
typedef struct ir_graph_pass_t ir_graph_pass_t;
typedef struct ir_prog_pass_t ir_prog_pass_t;
-/**
- * Data structure that holds central information about a program
- * or a module.
- * One irp is created by libFirm on construction, so irp should never be NULL.
- *
- * - main_irg: The ir graph that is the entry point to the program.
- * (Anything not reachable from here may be optimized away
- * if this irp represents a whole program.
- * - irg: List of all ir graphs in the program or module.
- * - type: A list containing all types known to the translated program.
- * Some types can have several entries in this list (as a result of
- * using exchange_types()).
- * - glob_type: The unique global type that is owner of all global entities
- * of this module.
- */
-typedef struct ir_prog ir_prog, *ir_prog_ptr;
-
typedef struct ir_graph_pass_manager_t ir_graph_pass_manager_t;
typedef struct ir_prog_pass_manager_t ir_prog_pass_manager_t;
GCC: __attribute__((naked)). */
mtp_property_malloc = 0x00000020, /**< This method returns newly allocate memory.
GCC: __attribute__((malloc)). */
- mtp_property_weak = 0x00000040, /**< This method is weak. It is expected that
- GCC: __attribute__((weak)). */
- mtp_property_returns_twice = 0x00000080, /**< This method can return more than one (typically setjmp).
+ mtp_property_returns_twice = 0x00000040, /**< This method can return more than one (typically setjmp).
GCC: __attribute__((returns_twice)). */
- mtp_property_intrinsic = 0x00000100, /**< This method is intrinsic. It is expected that
+ mtp_property_intrinsic = 0x00000080, /**< This method is intrinsic. It is expected that
a lowering phase will remove all calls to it. */
- mtp_property_runtime = 0x00000200, /**< This method represents a runtime routine. */
- mtp_property_private = 0x00000400, /**< All method invocations are known, the backend is free to
+ mtp_property_runtime = 0x00000100, /**< This method represents a runtime routine. */
+ mtp_property_private = 0x00000200, /**< All method invocations are known, the backend is free to
optimize the call in any possible way. */
- mtp_property_has_loop = 0x00000800, /**< Set, if this method contains one possible endless loop. */
+ mtp_property_has_loop = 0x00000400, /**< Set, if this method contains one possible endless loop. */
mtp_property_inherited = (1<<31) /**< Internal. Used only in irg's, means property is
inherited from type. */
} mtp_additional_property;
-/** This enum names the three different kinds of symbolic Constants
- represented by SymConst. The content of the attribute type_or_id
- depends on this tag. Use the proper access routine after testing
- this flag. */
-typedef enum {
+/** This enum names the different kinds of symbolic Constants represented by
+ * SymConst. The content of the attribute symconst_symbol depends on this tag.
+ * Use the proper access routine after testing this flag. */
+typedef enum symconst_kind {
symconst_type_tag, /**< The SymConst is a type tag for the given type.
symconst_symbol is type *. */
symconst_type_size, /**< The SymConst is the size of the given type.
symconst_symbol is type *. */
symconst_type_align, /**< The SymConst is the alignment of the given type.
symconst_symbol is type *. */
- symconst_addr_name, /**< The SymConst is a symbolic pointer to be filled in
- by the linker. The pointer is represented by a string.
- symconst_symbol is ident *. */
symconst_addr_ent, /**< The SymConst is a symbolic pointer to be filled in
by the linker. The pointer is represented by an entity.
symconst_symbol is entity *. */
*/
typedef union symconst_symbol {
ir_type *type_p; /**< The type of a SymConst. */
- ident *ident_p; /**< The ident of a SymConst. */
ir_entity *entity_p; /**< The entity of a SymConst. */
ir_enum_const *enum_p; /**< The enumeration constant of a SymConst. */
} symconst_symbol;