X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Ftr%2Fentity_t.h;h=ea87cee7c241675094f19c6ab1490ee1ba7f2b6e;hb=0aa3f54e9f29fbed49bb4781c28ab1157499a92e;hp=fe33ade652e57812d8bc766fe11ae59c34d64534;hpb=f7ff9494d0f76325b53f09452c6491aaad4a6d06;p=libfirm diff --git a/ir/tr/entity_t.h b/ir/tr/entity_t.h index fe33ade65..ea87cee7c 100644 --- a/ir/tr/entity_t.h +++ b/ir/tr/entity_t.h @@ -31,7 +31,44 @@ #include "typerep.h" #include "type_t.h" #include "ident.h" -#include "compound_path.h" + +#define is_entity(thing) _is_entity(thing) +#define get_entity_name(ent) _get_entity_name(ent) +#define get_entity_ident(ent) _get_entity_ident(ent) +#define set_entity_ident(ent, id) _set_entity_ident(ent, id) +#define get_entity_owner(ent) _get_entity_owner(ent) +#define get_entity_ld_ident(ent) _get_entity_ld_ident(ent) +#define set_entity_ld_ident(ent, ld_ident) _set_entity_ld_ident(ent, ld_ident) +#define get_entity_ld_name(ent) _get_entity_ld_name(ent) +#define get_entity_type(ent) _get_entity_type(ent) +#define get_entity_linkage(ent) _get_entity_linkage(ent) +#define get_entity_volatility(ent) _get_entity_volatility(ent) +#define set_entity_volatility(ent, vol) _set_entity_volatility(ent, vol) +#define set_entity_alignment(ent, alignment) _set_entity_alignment(ent, alignment) +#define get_entity_alignment(ent) _get_entity_alignment(ent) +#define get_entity_align(ent) _get_entity_align(ent) +#define set_entity_align(ent, a) _set_entity_align(ent, a) +#define is_entity_compiler_generated(ent) _is_entity_compiler_generated(ent) +#define set_entity_compiler_generated(ent, flag) _set_entity_compiler_generated(ent, flag) +#define get_entity_usage(ent) _get_entity_usage(ent) +#define set_entity_usage(ent, flags) _set_entity_usage(ent, flags) +#define get_entity_offset(ent) _get_entity_offset(ent) +#define set_entity_offset(ent, offset) _set_entity_offset(ent, offset) +#define get_entity_offset_bits_remainder(ent) _get_entity_offset_bits_remainder(ent) +#define set_entity_offset_bits_remainder(ent, o) _set_entity_offset_bits_remainder(ent, o) +#define get_entity_link(ent) _get_entity_link(ent) +#define set_entity_link(ent, l) _set_entity_link(ent, l) +#define get_entity_irg(ent) _get_entity_irg(ent) +#define is_parameter_entity(ent) _is_parameter_entity(ent) +#define get_entity_parameter_number(ent) _get_entity_parameter_number(ent) +#define get_entity_visited(ent) _get_entity_visited(ent) +#define set_entity_visited(ent, num) _set_entity_visited(ent, num) +#define mark_entity_visited(ent) _mark_entity_visited(ent) +#define entity_visited(ent) _entity_visited(ent) +#define entity_not_visited(ent) _entity_not_visited(ent) +#define get_entity_repr_class(ent) _get_entity_repr_class(ent) +#define get_entity_dbg_info(ent) _get_entity_dbg_info(ent) +#define set_entity_dbg_info(ent, db) _set_entity_dbg_info(ent, db) typedef struct ir_initializer_base_t { ir_initializer_kind_t kind; @@ -70,18 +107,11 @@ union ir_initializer_t { ir_initializer_tarval_t tarval; }; -/** The attributes for compound entities. */ -typedef struct compound_ent_attr { - ir_node **values; /**< constant values of compound entities. */ - compound_graph_path **val_paths; - /**< paths corresponding to constant values. */ -} compound_ent_attr; - /** The attributes for methods. */ typedef struct method_ent_attr { ir_graph *irg; /**< The corresponding irg if known. The ir_graph constructor automatically sets this field. */ - mtp_additional_properties irg_add_properties; /**< Additional graph properties can be + mtp_additional_properties properties; /**< Additional graph properties can be stored in a entity if no irg is available. */ unsigned vtable_number; /**< For a dynamically called method, the number assigned @@ -98,9 +128,6 @@ typedef struct code_ent_attr { } code_ent_attr; typedef struct parameter_ent_attr { - /**< parameters might be compounds too */ - compound_ent_attr cmpd_attr; - size_t number; /**< corresponding parameter number */ ir_mode *doubleword_low_mode;/**< entity is a lowered doubleword parameter, so additional stores because of calling @@ -117,6 +144,7 @@ typedef enum ir_entity_kind { IR_ENTITY_COMPOUND_MEMBER, IR_ENTITY_PARAMETER, IR_ENTITY_LABEL, + IR_ENTITY_UNKNOWN, } ir_entity_kind; /** @@ -168,8 +196,6 @@ struct ir_entity { #endif union { - /* ------------- fields for compound entities -------------- */ - compound_ent_attr cmpd_attr; /* ------------- fields for method entities ---------------- */ method_ent_attr mtd_attr; /* fields for code entities */ @@ -180,9 +206,9 @@ struct ir_entity { }; /** Initialize the entity module. */ -void ir_init_entity(void); +void ir_init_entity(ir_prog *irp); /** Cleanup entity module */ -void ir_finish_entity(void); +void ir_finish_entity(ir_prog *irp); /** * Creates an entity corresponding to the start address of a basic block @@ -195,39 +221,41 @@ ir_entity *new_label_entity(ir_label_t label); */ ir_entity *new_d_label_entity(ir_label_t label, dbg_info *dbgi); +void set_entity_irg(ir_entity *ent, ir_graph *irg); + /* ----------------------- inline functions ------------------------ */ static inline int _is_entity(const void *thing) { return get_kind(thing) == k_entity; } -static inline const char *_get_entity_name(const ir_entity *ent) +static inline ident *_get_entity_ident(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); - return get_id_str(get_entity_ident(ent)); + assert(ent->kind == k_entity); + return ent->name; } -static inline ident *_get_entity_ident(const ir_entity *ent) +static inline const char *_get_entity_name(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); - return ent->name; + assert(ent->kind == k_entity); + return get_id_str(get_entity_ident(ent)); } static inline void _set_entity_ident(ir_entity *ent, ident *id) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->name = id; } static inline ir_type *_get_entity_owner(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->owner; } static inline ident *_get_entity_ld_ident(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); if (ent->ld_name == NULL) return ent->name; return ent->ld_name; @@ -235,128 +263,128 @@ static inline ident *_get_entity_ld_ident(const ir_entity *ent) static inline void _set_entity_ld_ident(ir_entity *ent, ident *ld_ident) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->ld_name = ld_ident; } static inline const char *_get_entity_ld_name(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return get_id_str(get_entity_ld_ident(ent)); } static inline ir_type *_get_entity_type(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->type; } static inline ir_linkage _get_entity_linkage(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return (ir_linkage) ent->linkage; } static inline ir_volatility _get_entity_volatility(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return (ir_volatility) ent->volatility; } static inline void _set_entity_volatility(ir_entity *ent, ir_volatility vol) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->volatility = vol; } static inline unsigned _get_entity_alignment(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->alignment; } static inline void _set_entity_alignment(ir_entity *ent, unsigned alignment) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->alignment = alignment; } static inline ir_align _get_entity_aligned(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return (ir_align) ent->aligned; } static inline void _set_entity_aligned(ir_entity *ent, ir_align a) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->aligned = a; } static inline int _is_entity_compiler_generated(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->compiler_gen; } static inline void _set_entity_compiler_generated(ir_entity *ent, int flag) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->compiler_gen = flag ? 1 : 0; } static inline ir_entity_usage _get_entity_usage(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return (ir_entity_usage) ent->usage; } static inline void _set_entity_usage(ir_entity *ent, ir_entity_usage state) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->usage = state; } static inline int _get_entity_offset(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->offset; } static inline void _set_entity_offset(ir_entity *ent, int offset) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->offset = offset; } static inline unsigned char _get_entity_offset_bits_remainder(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->offset_bit_remainder; } static inline void _set_entity_offset_bits_remainder(ir_entity *ent, unsigned char offset) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->offset_bit_remainder = offset; } static inline void *_get_entity_link(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->link; } static inline void _set_entity_link(ir_entity *ent, void *l) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->link = l; } static inline ir_graph *_get_entity_irg(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); - if (!is_Method_type(ent->type) || ent == unknown_entity) { + assert(ent->kind == k_entity); + if (!is_Method_type(ent->type) || is_unknown_entity(ent)) { return NULL; } @@ -365,19 +393,19 @@ static inline ir_graph *_get_entity_irg(const ir_entity *ent) static inline ir_visited_t _get_entity_visited(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->visit; } static inline void _set_entity_visited(ir_entity *ent, ir_visited_t num) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->visit = num; } static inline void _mark_entity_visited(ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); ent->visit = firm_type_visited; } @@ -404,7 +432,7 @@ static inline size_t _get_entity_parameter_number(const ir_entity *entity) static inline ir_type *_get_entity_repr_class(const ir_entity *ent) { - assert(ent && ent->kind == k_entity); + assert(ent->kind == k_entity); return ent->repr_class; } @@ -418,42 +446,4 @@ static inline void _set_entity_dbg_info(ir_entity *ent, dbg_info *db) ent->dbi = db; } -#define is_entity(thing) _is_entity(thing) -#define get_entity_name(ent) _get_entity_name(ent) -#define get_entity_ident(ent) _get_entity_ident(ent) -#define set_entity_ident(ent, id) _set_entity_ident(ent, id) -#define get_entity_owner(ent) _get_entity_owner(ent) -#define get_entity_ld_ident(ent) _get_entity_ld_ident(ent) -#define set_entity_ld_ident(ent, ld_ident) _set_entity_ld_ident(ent, ld_ident) -#define get_entity_ld_name(ent) _get_entity_ld_name(ent) -#define get_entity_type(ent) _get_entity_type(ent) -#define get_entity_linkage(ent) _get_entity_linkage(ent) -#define get_entity_volatility(ent) _get_entity_volatility(ent) -#define set_entity_volatility(ent, vol) _set_entity_volatility(ent, vol) -#define set_entity_alignment(ent, alignment) _set_entity_alignment(ent, alignment) -#define get_entity_alignment(ent) _get_entity_alignment(ent) -#define get_entity_align(ent) _get_entity_align(ent) -#define set_entity_align(ent, a) _set_entity_align(ent, a) -#define is_entity_compiler_generated(ent) _is_entity_compiler_generated(ent) -#define set_entity_compiler_generated(ent, flag) _set_entity_compiler_generated(ent, flag) -#define get_entity_usage(ent) _get_entity_usage(ent) -#define set_entity_usage(ent, flags) _set_entity_usage(ent, flags) -#define get_entity_offset(ent) _get_entity_offset(ent) -#define set_entity_offset(ent, offset) _set_entity_offset(ent, offset) -#define get_entity_offset_bits_remainder(ent) _get_entity_offset_bits_remainder(ent) -#define set_entity_offset_bits_remainder(ent, o) _set_entity_offset_bits_remainder(ent, o) -#define get_entity_link(ent) _get_entity_link(ent) -#define set_entity_link(ent, l) _set_entity_link(ent, l) -#define get_entity_irg(ent) _get_entity_irg(ent) -#define is_parameter_entity(ent) _is_parameter_entity(ent) -#define get_entity_parameter_number(ent) _get_entity_parameter_number(ent) -#define get_entity_visited(ent) _get_entity_visited(ent) -#define set_entity_visited(ent, num) _set_entity_visited(ent, num) -#define mark_entity_visited(ent) _mark_entity_visited(ent) -#define entity_visited(ent) _entity_visited(ent) -#define entity_not_visited(ent) _entity_not_visited(ent) -#define get_entity_repr_class(ent) _get_entity_repr_class(ent) -#define get_entity_dbg_info(ent) _get_entity_dbg_info(ent) -#define set_entity_dbg_info(ent, db) _set_entity_dbg_info(ent, db) - #endif