X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Ftyperep.h;h=2984591c39f29e750f0e9251ea79a1d65d4252b4;hb=3646e58f46f85a17537e89483d6b0c279df4a4d2;hp=12ef8acca45fd8666554d0722f122d49fcd19ae2;hpb=3e8544aa0a0f41a6700a829f50ec94d3b579b518;p=libfirm diff --git a/include/libfirm/typerep.h b/include/libfirm/typerep.h index 12ef8acca..2984591c3 100644 --- a/include/libfirm/typerep.h +++ b/include/libfirm/typerep.h @@ -360,6 +360,11 @@ 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); +/** Set label number of an entity with code type */ +void set_entity_label(ir_entity *ent, ir_label_t label); +/** Return label number of an entity with code type */ +ir_label_t get_entity_label(const ir_entity *ent); + /** Checks if an entity is compiler generated. */ int is_entity_compiler_generated(const ir_entity *ent); @@ -767,6 +772,7 @@ typedef enum { tpo_pointer, /**< A pointer type. */ tpo_primitive, /**< A primitive type. */ tpo_id, /**< Special Id tag used for type replacement. */ + tpo_code, /**< a piece of code (a basic block) */ tpo_none, /**< Special type for the None type. */ tpo_unknown, /**< Special code for the Unknown type. */ tpo_max /* not a type opcode */ @@ -816,8 +822,8 @@ ident *get_tpop_ident(const tp_op *op); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_class; -tp_op *get_tpop_class(void); +extern const tp_op *type_class; +const tp_op *get_tpop_class(void); /** * This type opcode marks that the corresponding type is a compound type @@ -828,8 +834,8 @@ tp_op *get_tpop_class(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_struct; -tp_op *get_tpop_struct(void); +extern const tp_op *type_struct; +const tp_op *get_tpop_struct(void); /** * This type opcode marks that the corresponding type is a method type. @@ -838,8 +844,8 @@ tp_op *get_tpop_struct(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_method; -tp_op *get_tpop_method(void); +extern const tp_op *type_method; +const tp_op *get_tpop_method(void); /** * This type opcode marks that the corresponding type is a union type. @@ -848,8 +854,8 @@ tp_op *get_tpop_method(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_union; -tp_op *get_tpop_union(void); +extern const tp_op *type_union; +const tp_op *get_tpop_union(void); /** * This type opcode marks that the corresponding type is an array type. @@ -859,8 +865,8 @@ tp_op *get_tpop_union(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_array; -tp_op *get_tpop_array(void); +extern const tp_op *type_array; +const tp_op *get_tpop_array(void); /** * This type opcode marks that the corresponding type is an enumeration type. @@ -871,8 +877,8 @@ tp_op *get_tpop_array(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_enumeration; -tp_op *get_tpop_enumeration(void); +extern const tp_op *type_enumeration; +const tp_op *get_tpop_enumeration(void); /** * This type opcode marks that the corresponding type is a pointer type. @@ -881,8 +887,8 @@ tp_op *get_tpop_enumeration(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_pointer; -tp_op *get_tpop_pointer(void); +extern const tp_op *type_pointer; +const tp_op *get_tpop_pointer(void); /** * This type opcode marks that the corresponding type is a primitive type. @@ -892,8 +898,8 @@ tp_op *get_tpop_pointer(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_primitive; -tp_op *get_tpop_primitive(void); +extern const tp_op *type_primitive; +const tp_op *get_tpop_primitive(void); /** * This type opcode is an auxiliary opcode dedicated to support transformations @@ -912,8 +918,14 @@ tp_op *get_tpop_primitive(void); * This struct is dynamically allocated but constant for the lifetime * of the library. */ -extern tp_op *type_id; -tp_op *get_tpop_id(void); +extern const tp_op *type_id; +const tp_op *get_tpop_id(void); + +/** + * The code type is used to mark pieces of code (basic blocks) + */ +extern const tp_op *tpop_code; +const tp_op *get_tpop_code_type(void); /** * This type opcode is an auxiliary opcode dedicated to support type analyses. @@ -923,8 +935,8 @@ tp_op *get_tpop_id(void); * contain a type or that are initialized for an analysis. There exists exactly * one type with this opcode. */ -extern tp_op *tpop_none; -tp_op *get_tpop_none(void); +extern const tp_op *tpop_none; +const tp_op *get_tpop_none(void); /** * This type opcode is an auxiliary opcode dedicated to support type analyses. @@ -934,8 +946,8 @@ tp_op *get_tpop_none(void); * yet) or to represent the top of a lattice (could not be determined). There exists * exactly one type with this opcode. */ -extern tp_op *tpop_unknown; -tp_op *get_tpop_unknown(void); +extern const tp_op *tpop_unknown; +const tp_op *get_tpop_unknown(void); /* ----------------------------------------------------------------------- */ /* Classify pairs of types/entities in the inheritance relations. */ @@ -993,7 +1005,7 @@ ir_entity *resolve_ent_polymorphy(ir_type *dynamic_class, ir_entity* static_ent) * * Returns an ident that consists of the name of type followed by an * underscore and the name (not ld_name) of the entity. */ -ident *default_mangle_inherited_name(ir_entity *ent, ir_type *clss); +ident *default_mangle_inherited_name(const ir_entity *ent, const ir_type *clss); /** Type of argument functions for inheritance resolver. * @@ -1002,7 +1014,7 @@ ident *default_mangle_inherited_name(ir_entity *ent, ir_type *clss); * used. * @param clss The class type in which the new entity will be placed. */ -typedef ident *mangle_inherited_name_func(ir_entity *ent, ir_type *clss); +typedef ident *mangle_inherited_name_func(const ir_entity *ent, const ir_type *clss); /** Resolve implicit inheritance. * @@ -1127,16 +1139,16 @@ typedef enum { ir_class_casts_normalized = 2, /**< Class casts conform to inheritance edges. */ ir_class_casts_state_max } ir_class_cast_state; -char *get_class_cast_state_string(ir_class_cast_state s); +const char *get_class_cast_state_string(ir_class_cast_state s); void set_irg_class_cast_state(ir_graph *irg, ir_class_cast_state s); -ir_class_cast_state get_irg_class_cast_state(ir_graph *irg); +ir_class_cast_state get_irg_class_cast_state(const ir_graph *irg); void set_irp_class_cast_state(ir_class_cast_state s); ir_class_cast_state get_irp_class_cast_state(void); /** Verify the class cast state of an irg. * - * Asserts if state is to high, outputs warning if state is to low + * Asserts if state is to high, outputs debug warning if state is to low * and firm verbosity is set. */ void verify_irg_class_cast_state(ir_graph *irg); @@ -2295,8 +2307,13 @@ void set_primitive_base_type(ir_type *tp, ir_type *base_tp); /** A variable that contains the only none type. */ extern ir_type *firm_none_type; +/** A variable that contains the only code type. */ +extern ir_type *firm_code_type; + /** Returns the none type. */ ir_type *get_none_type(void); +/** Returns the code type. */ +ir_type *get_code_type(void); /** * @page unknown_type The Unknown type @@ -2368,6 +2385,11 @@ int get_compound_member_index(const ir_type *tp, ir_entity *member); */ int is_compound_type(const ir_type *tp); +/** + * Checks wether a type is a code type. + */ +int is_code_type(const ir_type *tp); + /** * Checks, whether a type is a frame type. */ @@ -2577,8 +2599,8 @@ typedef void class_walk_func(ir_type *clss, void *env); void type_walk(type_walk_func *pre, type_walk_func *post, void *env); /** Touches every type, entity, frame type, and value param type in - * unspecified order. */ -void type_walk_plus_frames(type_walk_func *pre, type_walk_func *post, void *env); + * unspecified order (also all segment types). */ +void type_walk_prog(type_walk_func *pre, type_walk_func *post, void *env); /** Walks over all type information reachable from an ir graph. *