X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Ftyperep.h;h=fdc888006521cbe6ea2b1b662ce30b2187c1257f;hb=f7a0dee11313faad6f2ff54edc8eaadabd03e433;hp=4e43b8ae5563dccf8a97853c35c53f9582fd8c42;hpb=b41ce1d070a9f7d216f024fc969ad49908098c0c;p=libfirm diff --git a/include/libfirm/typerep.h b/include/libfirm/typerep.h index 4e43b8ae5..fdc888006 100644 --- a/include/libfirm/typerep.h +++ b/include/libfirm/typerep.h @@ -143,11 +143,14 @@ typedef enum { GCC: __attribute__((naked)). */ mtp_property_malloc = 0x00000020, /**< This method returns newly allocate memory. GCC: __attribute__((malloc)). */ - mtp_property_intrinsic = 0x00000040, /**< This method is intrinsic. It is expected that + mtp_property_weak = 0x00000040, /**< This method is weak. It is expected that + GCC: __attribute__((weak)). */ + mtp_property_intrinsic = 0x00000080, /**< This method is intrinsic. It is expected that a lowering phase will remove all calls to it. */ - mtp_property_runtime = 0x00000080, /**< This method represents a runtime routine. */ - mtp_property_private = 0x00000100, /**< 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 = 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; @@ -397,22 +400,26 @@ int is_entity_backend_marked(const ir_entity *ent); void set_entity_backend_marked(ir_entity *ent, int flag); /** - * The state of the address_taken flag. + * Bitfield type indicating the way an entity is used. */ 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); + ir_usage_none = 0, /**< This entity is unused. */ + ir_usage_address_taken = 1 << 0, /**< The address of this entity was taken. */ + ir_usage_write = 1 << 1, /**< The entity was written to. */ + ir_usage_read = 1 << 2, /**< The entity was read. */ + ir_usage_reinterpret_cast = 1 << 3, /**< The entity was read but with a wrong mode + (an implicit reinterpret cast) */ + /** Unknown access */ + ir_usage_unknown + = ir_usage_address_taken | ir_usage_write | ir_usage_read + | ir_usage_reinterpret_cast +} ir_entity_usage; + +/** Return the entity usage */ +ir_entity_usage get_entity_usage(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); - -/** Return the name of the address_taken state. */ -const char *get_address_taken_state_name(ir_address_taken_state state); +void set_entity_usage(ir_entity *ent, ir_entity_usage flag); /** * Returns the debug information of an entity. @@ -665,10 +672,10 @@ int equal_entity(ir_entity *ent1, ir_entity *ent2); long get_entity_nr(const ir_entity *ent); /** Returns the entities visited count. */ -unsigned long get_entity_visited(ir_entity *ent); +ir_visited_t get_entity_visited(ir_entity *ent); /** Sets the entities visited count. */ -void set_entity_visited(ir_entity *ent, unsigned long num); +void set_entity_visited(ir_entity *ent, ir_visited_t num); /** Sets visited field in entity to entity_visited. */ void mark_entity_visited(ir_entity *ent); @@ -1387,10 +1394,7 @@ unsigned get_type_size_bytes(const ir_type *tp); */ void set_type_size_bytes(ir_type *tp, unsigned size); -/** Returns the alignment of a type in bytes. - * - * Returns -1 if the alignment is NOT - * a byte size, i.e. not dividable by 8. Calls get_type_alignment_bits(). */ +/** Returns the alignment of a type in bytes. */ unsigned get_type_alignment_bytes(ir_type *tp); /** Returns the alignment of a type in bits. @@ -1406,9 +1410,9 @@ unsigned get_type_alignment_bytes(ir_type *tp); void set_type_alignment_bytes(ir_type *tp, unsigned align); /** Returns the visited count of a type. */ -unsigned long get_type_visited(const ir_type *tp); +ir_visited_t get_type_visited(const ir_type *tp); /** Sets the visited count of a type to num. */ -void set_type_visited(ir_type *tp, unsigned long num); +void set_type_visited(ir_type *tp, ir_visited_t num); /** Sets visited field in type to type_visited. */ void mark_type_visited(ir_type *tp); /** Returns non-zero if the type is already visited */ @@ -1433,9 +1437,9 @@ void set_type_link(ir_type *tp, void *l); * * @see typewalk */ -void set_master_type_visited(unsigned long val); -unsigned long get_master_type_visited(void); -void inc_master_type_visited(void); +void set_master_type_visited(ir_visited_t val); +ir_visited_t get_master_type_visited(void); +void inc_master_type_visited(void); /** * Sets the debug information of a type.