X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Fentity_t.h;h=e8b6d9d90a57ffacb3065d8276d741c931b42f2d;hb=274626e2d58cfa247b88ee05adaca8906b025d93;hp=3e7c44f935d28fcbe847323868a145b2233f98f2;hpb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;p=libfirm diff --git a/ir/tr/entity_t.h b/ir/tr/entity_t.h index 3e7c44f93..e8b6d9d90 100644 --- a/ir/tr/entity_t.h +++ b/ir/tr/entity_t.h @@ -111,6 +111,14 @@ typedef struct parameter_ent_attr { lowering...) */ } parameter_ent_attr; +typedef enum ir_entity_kind { + IR_ENTITY_NORMAL, + IR_ENTITY_METHOD, + IR_ENTITY_COMPOUND_MEMBER, + IR_ENTITY_PARAMETER, + IR_ENTITY_LABEL, + IR_ENTITY_UNKNOWN, +} ir_entity_kind; /** * An abstract data type to represent program entities. @@ -124,6 +132,7 @@ struct ir_entity { ir_type *type; /**< The type of this entity */ ir_type *owner; /**< The compound type (e.g. class type) this entity belongs to. */ + unsigned entity_kind:3; /**< entity kind */ unsigned linkage:10; /**< Specifies linkage type */ unsigned volatility:1; /**< Specifies volatility of entities content.*/ unsigned aligned:1; /**< Specifies alignment of entities content. */ @@ -139,7 +148,6 @@ struct ir_entity { /**< If the entity is a bit field, this is the offset of the start of the bit field within the byte specified by offset. */ - unsigned is_parameter:1; /**< 1 if this represents a function parameter */ int offset; /**< Offset in bytes for this entity. Fixed when layout of owner is determined. */ unsigned alignment; /**< entity alignment in bytes */ @@ -173,9 +181,22 @@ 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 + * (the basic block is marked with a label id). + */ +ir_entity *new_label_entity(ir_label_t label); + +/** + * Like new_label_entity() but with debug information. + */ +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) @@ -233,12 +254,6 @@ static inline ir_type *_get_entity_type(const ir_entity *ent) return ent->type; } -static inline void _set_entity_type(ir_entity *ent, ir_type *type) -{ - assert(ent && ent->kind == k_entity); - ent->type = type; -} - static inline ir_linkage _get_entity_linkage(const ir_entity *ent) { assert(ent && ent->kind == k_entity); @@ -344,7 +359,7 @@ static inline void _set_entity_link(ir_entity *ent, void *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) { + if (!is_Method_type(ent->type) || is_unknown_entity(ent)) { return NULL; } @@ -381,12 +396,12 @@ static inline int _entity_not_visited(const ir_entity *ent) static inline int _is_parameter_entity(const ir_entity *entity) { - return entity->is_parameter; + return entity->entity_kind == IR_ENTITY_PARAMETER; } static inline size_t _get_entity_parameter_number(const ir_entity *entity) { - assert(entity->is_parameter); + assert(entity->entity_kind == IR_ENTITY_PARAMETER); return entity->attr.parameter.number; } @@ -415,7 +430,6 @@ static inline void _set_entity_dbg_info(ir_entity *ent, dbg_info *db) #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 set_entity_type(ent, type) _set_entity_type(ent, type) #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)