From c16c91f28e409e5707fd15033da5f58973812dd0 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Fri, 12 Jan 2007 18:05:33 +0000 Subject: [PATCH] default_dbg_info_merge_sets() implemented doxygen docu enhanced [r8519] --- ir/debug/dbginfo.c | 131 +++++++++++++++++++++++---------------------- ir/debug/dbginfo.h | 56 +++++++++++++------ 2 files changed, 109 insertions(+), 78 deletions(-) diff --git a/ir/debug/dbginfo.c b/ir/debug/dbginfo.c index 49412f3fd..0aa2642c8 100644 --- a/ir/debug/dbginfo.c +++ b/ir/debug/dbginfo.c @@ -19,19 +19,6 @@ #include "type_t.h" #include "entity_t.h" -void -default_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info) { - dbg_info *old_db = get_irn_dbg_info(old); - if (old_db) - set_irn_dbg_info(nw, old_db); -} - -void -default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes, - ir_node **old_nodes, int n_old_nodes, - dbg_action info) { -} - merge_pair_func *__dbg_info_merge_pair = default_dbg_info_merge_pair; merge_sets_func *__dbg_info_merge_sets = default_dbg_info_merge_sets; @@ -40,42 +27,40 @@ snprint_dbg_func *__dbg_info_snprint = (snprint_dbg_func *)0; void dbg_init( merge_pair_func *mpf, merge_sets_func *msf, snprint_dbg_func *snprint_dbg ) { - __dbg_info_merge_pair = mpf ? mpf : default_dbg_info_merge_pair; - __dbg_info_merge_sets = msf ? msf : default_dbg_info_merge_sets; - __dbg_info_snprint = snprint_dbg; -} + __dbg_info_merge_pair = mpf ? mpf : default_dbg_info_merge_pair; + __dbg_info_merge_sets = msf ? msf : default_dbg_info_merge_sets; + __dbg_info_snprint = snprint_dbg; +} /* dbg_init */ -void -set_irn_dbg_info(ir_node *n, struct dbg_info* db) { - n->dbi = db; -} +void set_irn_dbg_info(ir_node *n, dbg_info *db) { + n->dbi = db; +} /* set_irn_dbg_info */ -struct dbg_info * -get_irn_dbg_info(const ir_node *n) { - return n->dbi; -} +struct dbg_info *get_irn_dbg_info(const ir_node *n) { + return n->dbi; +} /* get_irn_dbg_info */ /* Routines to access the field of an entity containing the debugging information. */ -void set_entity_dbg_info(ir_entity *ent, dbg_info* db) { - ent->dbi = db; -} +void set_entity_dbg_info(ir_entity *ent, dbg_info *db) { + ent->dbi = db; +} /* set_entity_dbg_info */ -dbg_info *get_entity_dbg_info(ir_entity *ent) { - return ent->dbi; -} +dbg_info *get_entity_dbg_info(const ir_entity *ent) { + return ent->dbi; +} /* get_entity_dbg_info */ /* Routines to access the field of a type containing the debugging information. */ -void set_type_dbg_info(ir_type *tp, dbg_info* db) { - tp->dbi = db; -} +void set_type_dbg_info(ir_type *tp, dbg_info *db) { + tp->dbi = db; +} /* set_type_dbg_info */ -dbg_info *get_type_dbg_info(ir_type *tp) { - return tp->dbi; -} +dbg_info *get_type_dbg_info(const ir_type *tp) { + return tp->dbi; +} /* get_type_dbg_info */ /* * Converts a debug_action into a string. @@ -83,30 +68,50 @@ dbg_info *get_type_dbg_info(ir_type *tp) { const char *dbg_action_2_str(dbg_action a) { #define CASE(a) case a: return #a - switch (a) { - CASE(dbg_error); - CASE(dbg_opt_ssa); - CASE(dbg_opt_auxnode); - CASE(dbg_const_eval); - CASE(dbg_opt_cse); - CASE(dbg_straightening); - CASE(dbg_if_simplification); - CASE(dbg_algebraic_simplification); - CASE(dbg_write_after_write); - CASE(dbg_write_after_read); - CASE(dbg_read_after_write); - CASE(dbg_read_after_read); - CASE(dbg_read_a_const); - CASE(dbg_rem_poly_call); - CASE(dbg_dead_code); - CASE(dbg_opt_confirm); - CASE(dbg_backend); - default: - if (a <= dbg_max) - return "string conversion not implemented"; - else - assert(0); - return NULL; - } + switch (a) { + CASE(dbg_error); + CASE(dbg_opt_ssa); + CASE(dbg_opt_auxnode); + CASE(dbg_const_eval); + CASE(dbg_opt_cse); + CASE(dbg_straightening); + CASE(dbg_if_simplification); + CASE(dbg_algebraic_simplification); + CASE(dbg_write_after_write); + CASE(dbg_write_after_read); + CASE(dbg_read_after_write); + CASE(dbg_read_after_read); + CASE(dbg_read_a_const); + CASE(dbg_rem_poly_call); + CASE(dbg_dead_code); + CASE(dbg_opt_confirm); + CASE(dbg_backend); + default: + if (a <= dbg_max) + return "string conversion not implemented"; + else + assert(!"Missing debug action in dbg_action_2_str()"); + return NULL; + } #undef CASE -} +} /* dbg_action_2_str */ + + +void default_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info) { + dbg_info *new_db = get_irn_dbg_info(nw); + if (new_db == NULL) + set_irn_dbg_info(nw, get_irn_dbg_info(old)); +} /* default_dbg_info_merge_pair */ + +void default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes, + ir_node **old_nodes, int n_old_nodes, + dbg_action info) { + if (n_old_nodes == 1) { + dbg_info *old_db = get_irn_dbg_info(old_nodes[0]); + int i; + + for (i = 0; i < n_new_nodes; ++i) + if (get_irn_dbg_info(new_nodes[i]) == NULL) + set_irn_dbg_info(new_nodes[i], old_db); + } +} /* default_dbg_info_merge_sets */ diff --git a/ir/debug/dbginfo.h b/ir/debug/dbginfo.h index d119b956f..eb632a2aa 100644 --- a/ir/debug/dbginfo.h +++ b/ir/debug/dbginfo.h @@ -15,13 +15,13 @@ * * This is the Firm interface to debugging support. * - * @author Goetz Lindenmaier + * @author Goetz Lindenmaier, Michael Beck * * Firm requires a debugging module fulfilling this interface, else no * debugging information is passed to the backend. * The interface requires a datatype representing the debugging * information. Firm supports administrating a reference to the debug - * information in every firm node. Further Firm optimizations call + * information in every Firm node. Further Firm optimizations call * routines to propagate debug information from old nodes to new nodes * if the optimization replaces the old ones by the new ones. * @@ -47,47 +47,62 @@ extern "C" { * An abstract data type containing information for * debugging support. * - * This opaque data type is not defined anywhere in the firm library, - * but pointers to this type can be stored in firm nodes. + * This opaque data type is not defined anywhere in the Firm library, + * but pointers to this type can be stored in Firm nodes. */ typedef struct dbg_info dbg_info; /** * Sets the debug information of a node. + * + * @param n The node. + * @param db The debug info. */ void set_irn_dbg_info(ir_node *n, dbg_info *db); /** * Returns the debug information of an node. + * + * @param n The node. */ dbg_info *get_irn_dbg_info(const ir_node *n); /** * Sets the debug information of an entity. + * + * @param ent The entity. + * @param db The debug info. */ void set_entity_dbg_info(ir_entity *ent, dbg_info *db); /** * Returns the debug information of an entity. + * + * @param ent The entity. */ -dbg_info *get_entity_dbg_info(ir_entity *ent); +dbg_info *get_entity_dbg_info(const ir_entity *ent); /** * Sets the debug information of a type. + * + * @param tp The type. + * @param db The debug info. */ void set_type_dbg_info(ir_type *tp, dbg_info *db); /** * Returns the debug information of a type. + * + * @param tp The type. */ -dbg_info *get_type_dbg_info(ir_type *tp); +dbg_info *get_type_dbg_info(const ir_type *tp); /** * An enumeration indicating the action performed by a transformation. */ typedef enum { dbg_error = 0, - dbg_opt_ssa, /**< Optimization of the SSA representation, e.g., removal of superfluent phi nodes. */ + dbg_opt_ssa, /**< Optimization of the SSA representation, e.g. removal of superfluent Phi nodes. */ dbg_opt_auxnode, /**< Removal of unnecessary auxiliary nodes. */ dbg_const_eval, /**< A Firm subgraph was evaluated to a single constant. */ dbg_opt_cse, /**< A Firm node was replaced due to common subexpression elimination. */ @@ -108,8 +123,8 @@ typedef enum { a constant optimization. */ dbg_rem_poly_call, /**< Remove polymorphic call. */ dbg_dead_code, /**< Removing unreachable code, I.e. blocks that are never executed. */ - dbg_opt_confirm, /**< A Firm subgraph was replace because of a Confirmation */ - dbg_backend, /**< Backend transformation */ + dbg_opt_confirm, /**< A Firm subgraph was replace because of a Confirmation. */ + dbg_backend, /**< A Firm subgraph was replaced because of a Backend transformation */ dbg_max /**< Maximum value. */ } dbg_action; @@ -164,9 +179,9 @@ typedef unsigned snprint_dbg_func(char *buf, unsigned len, const dbg_info *dbg); * @param dbg_info_merge_sets see function description * @param snprint_dbg see function description * - * This function takes Pointers to two functions that merge the + * This function takes pointers to two functions that merge the * debug information when a - * transformation of a firm graph is performed. + * transformation of a Firm graph is performed. * Firm transformations call one of these functions. * * - dbg_info_merge_pair() is called in the following situation: @@ -193,21 +208,32 @@ typedef unsigned snprint_dbg_func(char *buf, unsigned len, const dbg_info *dbg); */ void dbg_init(merge_pair_func *dbg_info_merge_pair, merge_sets_func *dbg_info_merge_sets, snprint_dbg_func *snprint_dbg); -/** @} */ - /** * The default merge_pair_func implementation, simply copies the debug info - * from old to new. + * from the old Firm node to the new one if the new one does not have debug info yet. + * + * @param nw The new Firm node. + * @param old The old Firm node. + * @param info The action that cause old node to be replaced by new one. */ void default_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info); /** - * The default merge_sets_func implementation, does nothing + * The default merge_sets_func implementation. If n_old_nodes is equal 1, copies + * the debug info from the old node to all new ones (if they do not have one), else does nothing. + * + * @param new_nodes An array of new Firm nodes. + * @param n_new_nodes The length of the new_nodes array. + * @param old_nodes An array of old (replaced) Firm nodes. + * @param n_old_nodes The length of the old_nodes array. + * @param info The action that cause old node to be replaced by new one. */ void default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes, ir_node **old_nodes, int n_old_nodes, dbg_action info); +/** @} */ + #ifdef __cplusplus } #endif -- 2.20.1