Fixed more doxygen warnings and typos.
[libfirm] / include / libfirm / typerep.h
index 5dbc3fb..758b62d 100644 (file)
  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  * PURPOSE.
  */
+
+/**
+ * @file
+ * Declarations for functions and datastructures to represent types
+ */
 #ifndef FIRM_TYPEREP_H
 #define FIRM_TYPEREP_H
 
@@ -233,7 +238,7 @@ ir_allocation get_entity_allocation(const ir_entity *ent);
 void set_entity_allocation(ir_entity *ent, ir_allocation al);
 
 /** Return the name of the allocation type. */
-const char *get_allocation_name(ir_allocation vis);
+const char *get_allocation_name(ir_allocation al);
 
 /** Returns the visibility of an entity. */
 ir_visibility get_entity_visibility(const ir_entity *ent);
@@ -279,17 +284,23 @@ void set_entity_volatility(ir_entity *ent, ir_volatility vol);
 /** Return the name of the volatility. */
 const char *get_volatility_name(ir_volatility var);
 
+/** Returns alignment of entity in bytes */
+unsigned get_entity_alignment(const ir_entity *entity);
+
+/** Sets alignment for entity in bytes */
+void set_entity_alignment(ir_entity *entity, unsigned alignment);
+
 /** This enumeration flags the align of Loads/Stores. */
 typedef enum {
        align_non_aligned,    /**< The entity is not aligned. */
        align_is_aligned      /**< The entity is aligned. Default */
 } ir_align;
 
-/** Returns the alignment of an entity. */
-ir_align get_entity_align(const ir_entity *ent);
+/** Returns indication wether entity is aligned in memory. */
+ir_align get_entity_aligned(const ir_entity *ent);
 
-/** Sets the alignment of an entity. */
-void  set_entity_align(ir_entity *ent, ir_align a);
+/** Sets indication wether entity is aligned in memory */
+void set_entity_aligned(ir_entity *ent, ir_align a);
 
 /** Return the name of the alignment. */
 const char *get_align_name(ir_align a);
@@ -354,6 +365,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);
 
@@ -622,7 +638,7 @@ int is_entity(const void *thing);
 /** Returns true if the type of the entity is a primitive, pointer
  * enumeration or method type.
  *
- * @Note This is a different classification than from is_primitive_type().
+ * @note This is a different classification than from is_primitive_type().
  */
 int is_atomic_entity(ir_entity *ent);
 /** Returns true if the type of the entity is a class, structure,
@@ -761,6 +777,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 */
@@ -810,8 +827,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
@@ -822,8 +839,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.
@@ -832,8 +849,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.
@@ -842,8 +859,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.
@@ -853,8 +870,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.
@@ -865,8 +882,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.
@@ -875,8 +892,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.
@@ -886,8 +903,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
@@ -906,8 +923,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.
@@ -917,8 +940,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.
@@ -928,8 +951,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.          */
@@ -987,7 +1010,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.
  *
@@ -996,7 +1019,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.
  *
@@ -1051,7 +1074,7 @@ inh_transitive_closure_state get_irp_inh_transitive_closure_state(void);
 /** Compute transitive closure of the subclass/superclass and
  * overwrites/overwrittenby relation.
  *
- * This function walks over the ir (O(#types+#entities)) to compute the
+ * This function walks over the ir (O(\#types+\#entities)) to compute the
  * transitive closure.    */
 void compute_inh_transitive_closure(void);
 
@@ -1121,16 +1144,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);
@@ -1192,12 +1215,6 @@ int tr_vrfy(void);
 #define TR_VRFY()      tr_vrfy()
 #endif
 
-/**
- *
- * @file typegmod.h
- *  This module supplies routines that support changing the type graph.
- */
-
 /** Replaces one type by the other.
  *
  *  Old type is replaced by new_type.  All references to old_type
@@ -1858,6 +1875,10 @@ void set_method_param_type(ir_type *method, int pos, ir_type *tp);
 /** Returns an entity that represents the copied value argument.  Only necessary
    for compounds passed by value. This information is constructed only on demand. */
 ir_entity *get_method_value_param_ent(ir_type *method, int pos);
+/**
+ * Sets the type that represents the copied value arguments.
+ */
+void set_method_value_param_type(ir_type *method, ir_type *tp);
 /**
  * Returns a type that represents the copied value arguments if one
  * was allocated, else NULL.
@@ -2239,7 +2260,7 @@ ir_type *get_pointer_points_to_type(ir_type *pointer);
 int is_Pointer_type(const ir_type *pointer);
 
 /** Returns the first pointer type that has as points_to tp.
- *  Not efficient: O(#types).
+ *  Not efficient: O(\#types).
  *  If not found returns firm_unknown_type. */
 ir_type *find_pointer_type_to_type(ir_type *tp);
 
@@ -2285,8 +2306,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
@@ -2358,6 +2384,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.
  */
@@ -2373,6 +2404,13 @@ int is_value_param_type(const ir_type *tp);
  */
 int is_lowered_type(const ir_type *tp);
 
+/**
+ * Makes a new value type. Value types are struct types,
+ * so all struct access functions work.
+ * Value types are not in the global list of types.
+ */
+ir_type *new_type_value(ident *name);
+
 /**
  * Makes a new frame type. Frame types are class types,
  * so all class access functions work.
@@ -2559,11 +2597,9 @@ typedef void class_walk_func(ir_type *clss, void *env);
  *  Does not touch frame types or types for value params ... */
 void type_walk(type_walk_func *pre, type_walk_func *post, void *env);
 
-/** Touches every type, entity, and frame types in unspecified order.  If new
- *  types/entities are created during the traversal these will
- *  be visited, too.
- *  Does not touch types for value params ... (??) */
-void type_walk_plus_frames(type_walk_func *pre, type_walk_func *post, void *env);
+/** Touches every type, entity, frame type, and value param type in
+ *  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.
  *