#ifndef FIRM_COMMON_FIRM_TYPES_H
#define FIRM_COMMON_FIRM_TYPES_H
+#include "begin.h"
+
typedef unsigned long ir_visited_t;
typedef unsigned long ir_exc_region_t;
typedef unsigned long ir_label_t;
typedef struct dbg_info dbg_info, *dbg_info_ptr;
-typedef const struct _ident ident, *ir_ident_ptr;
+typedef struct type_dbg_info type_dbg_info, *type_dbg_info_ptr;
+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_mode ir_mode, *ir_mode_ptr;
-typedef struct _ir_edge_t ir_edge_t, *ir_edge_ptr;
+typedef struct ir_edge_t ir_edge_t, *ir_edge_ptr;
+typedef struct ir_heights_t ir_heights_t;
typedef struct tarval tarval, *ir_tarval_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_extblk ir_extblk, *ir_extblk_ptr;
typedef struct ir_exec_freq ir_exec_freq, *ir_exec_freq_ptr;
typedef struct ir_cdep ir_cdep, *ir_cdep_ptr;
typedef struct sn_entry *seqno_t;
typedef struct arch_irn_ops_t arch_irn_ops_t;
-typedef struct ident_if_t ident_if_t;
typedef struct type_identify_if_t type_identify_if_t;
+typedef struct ir_graph_pass_t ir_graph_pass_t;
+typedef struct ir_prog_pass_t ir_prog_pass_t;
+
+typedef struct ir_graph_pass_manager_t ir_graph_pass_manager_t;
+typedef struct ir_prog_pass_manager_t ir_prog_pass_manager_t;
typedef union ir_initializer_t ir_initializer_t, *ir_initializer_ptr;
/* states */
-/** The state of the interprocedural view.
- *
- * This value indicates the state of the interprocedural view.
- */
-typedef enum {
- ip_view_no, /**< The interprocedural view is not constructed. There are no
- view specific nodes (EndReg, Filter, Break ...) in any graph. */
- ip_view_valid, /**< The interprocedural view is valid. */
- ip_view_invalid /**< The interprocedural view is invalid. Specific nodes are
- all still in the representation, but the graph is no more complete. */
-} ip_view_state;
-
/**
* This function is called, whenever a local variable is used before definition
*
exception or uses memory, else can float. Used internally. */
} op_pin_state;
+/**
+ * A type to express conditional jump predictions.
+ */
+typedef enum {
+ COND_JMP_PRED_NONE, /**< No jump prediction. Default. */
+ COND_JMP_PRED_TRUE, /**< The True case is predicted. */
+ COND_JMP_PRED_FALSE /**< The False case is predicted. */
+} cond_jmp_predicate;
+
/**
* Additional method type properties:
* Tell about special properties of a method type. Some
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 *. */
symconst_ofs_ent, /**< The SymConst is the offset of its entity in the entities
owner type. */
- symconst_enum_const, /**< The SymConst is a enumeration constant of an
+ symconst_enum_const /**< The SymConst is a enumeration constant of an
enumeration type. */
- symconst_label /**< The SymConst is a label address. */
} symconst_kind;
/** SymConst attribute.
*/
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. */
- ir_label_t label; /**< The label of a SymConst. */
} symconst_symbol;
-/**
- * Projection numbers for Cmp are defined several times.
- * The bit patterns are used for various tests, so don't change.
- * The "unordered" values are possible results of comparing
- * floating point numbers.
- * Note that the encoding is imported, so do NOT change the order.
- */
-typedef enum {
- pn_Cmp_False = 0, /**< false */
- pn_Cmp_Eq = 1, /**< equal */
- pn_Cmp_Lt = 2, /**< less */
- pn_Cmp_Le = pn_Cmp_Eq|pn_Cmp_Lt, /**< less or equal */
- pn_Cmp_Gt = 4, /**< greater */
- pn_Cmp_Ge = pn_Cmp_Eq|pn_Cmp_Gt, /**< greater or equal */
- pn_Cmp_Lg = pn_Cmp_Lt|pn_Cmp_Gt, /**< less or greater */
- pn_Cmp_Leg = pn_Cmp_Lt|pn_Cmp_Eq|pn_Cmp_Gt, /**< less, equal or greater = ordered */
- pn_Cmp_Uo = 8, /**< unordered */
- pn_Cmp_Ue = pn_Cmp_Uo|pn_Cmp_Eq, /**< unordered or equal */
- pn_Cmp_Ul = pn_Cmp_Uo|pn_Cmp_Lt, /**< unordered or less */
- pn_Cmp_Ule = pn_Cmp_Uo|pn_Cmp_Eq|pn_Cmp_Lt, /**< unordered, less or equal */
- pn_Cmp_Ug = pn_Cmp_Uo|pn_Cmp_Gt, /**< unordered or greater */
- pn_Cmp_Uge = pn_Cmp_Uo|pn_Cmp_Eq|pn_Cmp_Gt, /**< unordered, greater or equal */
- pn_Cmp_Ne = pn_Cmp_Uo|pn_Cmp_Lt|pn_Cmp_Gt, /**< unordered, less or greater = not equal */
- pn_Cmp_True = 15 /**< true */
- /* not_mask = Leg*/ /* bits to flip to negate comparison * @@ hack for JNI interface */
-} pn_Cmp; /* Projection numbers for Cmp */
-
/** The allocation place. */
typedef enum {
stack_alloc, /**< Alloc allocates the object on the stack. */
ir_bk_trap, /**< GCC __builtin_trap(): insert trap */
ir_bk_debugbreak, /**< MS __debugbreak(): insert debug break */
ir_bk_return_address, /**< GCC __builtin_return_address() */
- ir_bk_frame_addess, /**< GCC __builtin_frame_address() */
+ ir_bk_frame_address, /**< GCC __builtin_frame_address() */
ir_bk_prefetch, /**< GCC __builtin_prefetch() */
ir_bk_ffs, /**< GCC __builtin_ffs(): find first (least) significant 1 bit */
ir_bk_clz, /**< GCC __builtin_clz(): count leading zero */
ir_bk_inner_trampoline, /**< address of a trampoline for GCC inner functions */
} ir_builtin_kind;
+/**
+ * Some projection numbers must be always equal to support automatic phi construction
+ */
+enum pn_generic {
+ pn_Generic_M = 0, /**< The memory result. */
+ pn_Generic_X_regular = 1, /**< Execution result if no exception occurred. */
+ pn_Generic_X_except = 2, /**< The control flow result branching to the exception handler */
+ pn_Generic_other = 3 /**< First free projection number */
+};
+
+#include "end.h"
+
#endif