From: Michael Beck Date: Sun, 7 Jan 2007 16:37:32 +0000 (+0000) Subject: address_taken frag added X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;ds=sidebyside;h=361eaea1068f3096838eab0a215aecd4f9a1cca5;p=libfirm address_taken frag added renamed get_entity_final() to is_entity_final() added inline version for is_entity_compiler_generated(), set_*() [r8493] --- diff --git a/ir/tr/entity.c b/ir/tr/entity.c index f0b35d946..de0387cce 100644 --- a/ir/tr/entity.c +++ b/ir/tr/entity.c @@ -116,6 +116,7 @@ new_rd_entity(dbg_info *db, ir_type *owner, ident *name, ir_type *type) res->volatility = volatility_non_volatile; res->stickyness = stickyness_unsticky; res->peculiarity = peculiarity_existent; + res->address_taken = ir_address_taken_unknown; res->final = 0; res->compiler_gen = 0; res->offset = -1; @@ -474,27 +475,35 @@ void } /* set_entity_peculiarity */ /* Checks if an entity cannot be overridden anymore. */ -int (get_entity_final)(const ir_entity *ent) { - return _get_entity_final(ent); -} /* get_entity_final */ +int (is_entity_final)(const ir_entity *ent) { + return _is_entity_final(ent); +} /* is_entity_final */ /* Sets/resets the final flag of an entity. */ void (set_entity_final)(ir_entity *ent, int final) { - _set_entity_final(ent, final); -} + _set_entity_final(ent, final); +} /* set_entity_final */ /* Checks if an entity is compiler generated */ -int is_entity_compiler_generated(const ir_entity *ent) { - assert(is_entity(ent)); - return ent->compiler_gen; +int (is_entity_compiler_generated)(const ir_entity *ent) { + return _is_entity_compiler_generated(ent); } /* is_entity_compiler_generated */ /* Sets/resets the compiler generated flag */ -void set_entity_compiler_generated(ir_entity *ent, int flag) { - assert(is_entity(ent)); - ent->compiler_gen = flag ? 1 : 0; +void (set_entity_compiler_generated)(ir_entity *ent, int flag) { + _set_entity_compiler_generated(ent, flag); } /* set_entity_compiler_generated */ +/* Checks if the address of an entity was taken. */ +ir_address_taken_state (get_entity_address_taken)(const ir_entity *ent) { + return _get_entity_address_taken(ent); +} /* is_entity_address_taken */ + +/* Sets/resets the address taken flag. */ +void (set_entity_address_taken)(ir_entity *ent, ir_address_taken_state flag) { + _set_entity_address_taken(ent, flag); +} /* set_entity_address_taken */ + /* Get the entity's stickyness */ ir_stickyness (get_entity_stickyness)(const ir_entity *ent) { diff --git a/ir/tr/entity.h b/ir/tr/entity.h index 374f5a6b1..22fb1b51a 100644 --- a/ir/tr/entity.h +++ b/ir/tr/entity.h @@ -310,10 +310,10 @@ ir_peculiarity get_entity_peculiarity(const ir_entity *ent); void set_entity_peculiarity(ir_entity *ent, ir_peculiarity pec); /** Checks if an entity cannot be overridden anymore. */ -int get_entity_final(const ir_entity *ent); +int is_entity_final(const ir_entity *ent); /** Sets/resets the final flag of an entity. */ -void set_entity_final(ir_entity *ent, int final); +void set_entity_final(ir_entity *ent, int final); /** Checks if an entity is compiler generated. */ int is_entity_compiler_generated(const ir_entity *ent); @@ -321,6 +321,21 @@ int is_entity_compiler_generated(const ir_entity *ent); /** Sets/resets the compiler generated flag. */ void set_entity_compiler_generated(ir_entity *ent, int flag); +/** + * The state of the address_taken flag. + */ +typedef enum { + ir_address_not_taken = 0, /**< The address is NOT taken. */ + ir_address_taken_unknown = 1, /**< The state of the address taken flag is unknown. */ + ir_address_taken = 2 /**< The address IS taken. */ +} ir_address_taken_state; + +/** Return the state of the address taken flag of an entity. */ +ir_address_taken_state get_entity_address_taken(const ir_entity *ent); + +/** Sets/resets the state of the address taken flag of an entity. */ +void set_entity_address_taken(ir_entity *ent, ir_address_taken_state flag); + /* -- Representation of constant values of entities -- */ /** * Returns true if the the node is representable as code on diff --git a/ir/tr/entity_t.h b/ir/tr/entity_t.h index 8e08842cf..b5a40a4ed 100644 --- a/ir/tr/entity_t.h +++ b/ir/tr/entity_t.h @@ -111,14 +111,14 @@ struct ir_entity { ir_type *type; /**< The type of this entity, e.g., a method type, a basic type of the language or a class itself. */ ir_type *owner; /**< The compound type (e.g. class type) this entity belongs to. */ - ir_allocation allocation:3; /**< Distinguishes static and dynamically allocated - entities and some further cases. */ - ir_visibility visibility:3; /**< Specifies visibility to external program - fragments. */ - ir_variability variability:3; /**< Specifies variability of entities content. */ - ir_volatility volatility:2; /**< Specifies volatility of entities content. */ - ir_stickyness stickyness:2; /**< Specifies whether this entity is sticky. */ - ir_peculiarity peculiarity:3; /**< The peculiarity of this entity. */ + ir_allocation allocation:3; /**< Distinguishes static and dynamically allocated + entities and some further cases. */ + ir_visibility visibility:3; /**< Specifies visibility to external program fragments. */ + ir_variability variability:3; /**< Specifies variability of entities content. */ + ir_volatility volatility:2; /**< Specifies volatility of entities content. */ + ir_stickyness stickyness:2; /**< Specifies whether this entity is sticky. */ + ir_peculiarity peculiarity:3; /**< The peculiarity of this entity. */ + ir_address_taken_state address_taken:2; /**< A flag that can be set to mark address taken entities. */ unsigned final:1; /**< If set, this entity cannot be overridden. */ unsigned compiler_gen:1; /**< If set, this entity was compiler generated. */ int offset; /**< Offset in bytes for this entity. Fixed when layout @@ -292,7 +292,7 @@ _set_entity_stickyness(ir_entity *ent, ir_stickyness stickyness) { } static INLINE int -_get_entity_final(const ir_entity *ent) { +_is_entity_final(const ir_entity *ent) { assert(ent && ent->kind == k_entity); return (int)ent->final; } @@ -303,6 +303,30 @@ _set_entity_final(ir_entity *ent, int final) { ent->final = final ? 1 : 0; } +static INLINE int +_is_entity_compiler_generated(const ir_entity *ent) { + assert(ent && 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); + ent->compiler_gen = flag ? 1 : 0; +} + +static INLINE ir_address_taken_state +_get_entity_address_taken(const ir_entity *ent) { + assert(ent && ent->kind == k_entity); + return ent->address_taken; +} + +static INLINE void +_set_entity_address_taken(ir_entity *ent, ir_address_taken_state flag) { + assert(ent && ent->kind == k_entity); + ent->address_taken = flag; +} + static INLINE int _get_entity_offset(const ir_entity *ent) { assert(ent && ent->kind == k_entity); @@ -403,8 +427,12 @@ _get_entity_repr_class(const ir_entity *ent) { #define set_entity_peculiarity(ent, pec) _set_entity_peculiarity(ent, pec) #define get_entity_stickyness(ent) _get_entity_stickyness(ent) #define set_entity_stickyness(ent, stickyness) _set_entity_stickyness(ent, stickyness) -#define get_entity_final(ent) _get_entity_final(ent) +#define is_entity_final(ent) _is_entity_final(ent) #define set_entity_final(ent, final) _set_entity_final(ent, final) +#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_address_taken(ent) _get_entity_address_taken(ent) +#define set_entity_address_taken(ent, flag) _set_entity_address_taken(ent, flag) #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)