#include "firm_types.h"
#include "begin.h"
-/** The ins of regions: regions are loops or blocks.
- *
- * @todo: we should make a type for the regions, or reuse loop_element.
- */
+/** The ins of regions: regions are loops or blocks. */
FIRM_API int get_region_n_ins(void *region);
FIRM_API void *get_region_in(void *region, int pos);
FIRM_API void add_region_in(void *region, void *in);
/** The algorithm to construct the interval graph.
*
* Constructs the cf loop tree and leaves a valid version of it.
- *
- * @todo: @@@ add flag that states correctness of interval analysis information
- * to irg.
- **/
+ */
FIRM_API void construct_intervals(ir_graph *irg);
/** frees interval information of all graphs. */
* @version $Id$
*/
-/**@todo
- Ideas for improvement:
- -# Handle construction of exceptions more comfortable:
- Add new constructors that pass the exception region (or better the
- Phi for the memories, the ex. region can be found from there) as parameter,
- constructor then adds all Proj nodes and returns the pointer
- to the Proj node that selects the result of the arithmetic operation.
- -# Maybe hide the exception region in a global variable, especially if
- it is always unambiguous.
-*/
-
/**
* @file
*
* and propagates dead control flow by calling equivalent_node().
* Independent of compiler flag it removes Tuples from cf edges,
* Bad predecessors from Blocks and Phis, and unnecessary predecessors of End.
+ * Destroys backedge information.
*
- * @bug So far destroys backedge information.
* @bug Chokes on Id nodes if called in a certain order with other
* optimizations. Call local_optimize_graph() before to remove
* Ids.
/** Pass for garbage_collect_entities */
FIRM_API ir_prog_pass_t *garbage_collect_entities_pass(const char *name);
-/** Performs dead node elimination by copying the ir graph to a new obstack.
+/**
+ * Performs dead node elimination by copying the ir graph to a new obstack.
*
* The major intention of this pass is to free memory occupied by
* dead nodes and outdated analyzes information. Further this
*/
FIRM_API ir_graph_pass_t *dead_node_elimination_pass(const char *name);
-/** Inlines a method at the given call site.
+/**
+ * Inlines a method at the given call site.
*
* Removes the call node and splits the basic block the call node
* belongs to. Inserts a copy of the called graph between these nodes.
*/
FIRM_API int inline_method(ir_node *call, ir_graph *called_graph);
-/** Code Placement.
+/**
+ * Code Placement.
*
* Pins all floating nodes to a block where they
* will be executed only if needed. Depends on the flag opt_global_cse.
* code. Uses dominator information which it computes if the irg is not
* in state dom_consistent. Destroys the out information as it moves nodes
* to other blocks. Optimizes Tuples in Control edges.
- * @todo This is not tested!
*
* Call remove_critical_cf_edges() before place_code(). This normalizes
* the control flow graph so that for all operations a basic block exists
* where they can be optimally placed.
- *
- * @todo A more powerful code placement would move operations past Phi nodes
- * out of loops.
*/
FIRM_API void place_code(ir_graph *irg);
* Each entity gets two lists:
* - one containing all accesses (Load, (Call), Store),
* - and one containing all uses to get a reference (Sel, SymConst).
- *
- * @todo
- * To list all uses of entities of a type, we also should list all
- * static/automatic allocated entities in types. The Alloc nodes
- * represent only the dynamic allocated entities.
*/
#ifndef FIRM_ANA_TROUTS_H
#define FIRM_ANA_TROUTS_H
* Returns the string for the type opcode.
*
* @param op The type opcode to get the string from.
- * @return a string. (@todo Null terminated?)
+ * @return a string.
*/
FIRM_API const char *get_tpop_name(const tp_op *op);
/* Do the sets contain the node itself? I assume NOT! */
/* ----------------------------------------------------------------------- */
-/** The state of the transitive closure.
- *
- * @todo: we could manage the state for each relation separately. Invalidating
- * the entity relations does not mean invalidating the class relation. */
+/**
+ * The state of the transitive closure.
+ */
typedef enum {
inh_transitive_closure_none, /**< Closure is not computed, can not be accessed. */
inh_transitive_closure_valid, /**< Closure computed and valid. */
/** Sets the class abstract flag. */
FIRM_API void set_class_abstract(ir_type *clss, int flag);
-/** Set and get a class' dfn --
- @todo This is an undocumented field, subject to change! */
-FIRM_API void set_class_dfn(ir_type *clss, int dfn);
-FIRM_API int get_class_dfn(const ir_type *clss);
-
/** Returns true if a type is a class type. */
FIRM_API int is_Class_type(const ir_type *clss);
* - *element_type: The type of the array elements.
* - *element_ent: An entity for the array elements to be used for
* element selection with Sel.
- * @todo
- * Do we need several entities? One might want
- * to select a dimension and not a single element in case of multi
- * dimensional arrays.
*/
/** Create a new type array.
type_walk_func *post, void *env);
/**
- Touches every class in specified order:
- - first the super class
- - second the class itself
- - third the sub classes. If new classes are created
- during the traversal these will be visited, too.
-
- @todo should be named class-walk
-
- @deprecated will be removed?
-*/
+ * Touches every class in specified order:
+ * - first the super class
+ * - second the class itself
+ * - third the sub classes. If new classes are created
+ * during the traversal these will be visited, too.
+ *
+ * @deprecated will be removed?
+ */
FIRM_API void type_walk_super2sub(type_walk_func *pre, type_walk_func *post,
void *env);
void set_array_size(ir_type *tp, unsigned bytes);
void set_default_size(ir_type *tp, unsigned bytes);
+/** Set and get a class' dfn --
+ * This is an undocumented field, subject to change! */
+void set_class_dfn(ir_type *clss, int dfn);
+int get_class_dfn(const ir_type *clss);
+
void add_compound_member(ir_type *compound, ir_entity *entity);
void remove_compound_member(ir_type *compound, ir_entity *entity);