* options for the hook_merge_nodes hook
*/
typedef enum {
+ HOOK_OPT_DEAD_BLOCK, /**< a block was removed because it's dead */
HOOK_OPT_STG, /**< straightening optimization */
HOOK_OPT_IFSIM, /**< if simplification */
HOOK_OPT_CONST_EVAL, /**< constant evaluation */
HOOK_OPT_POLY_CALL, /**< polymorphic call optimization */
HOOK_OPT_IF_CONV, /**< an if conversion was tried */
HOOK_OPT_FUNC_CALL, /**< a real function call was removed */
+ HOOK_OPT_CONFIRM, /**< a value was substituted by another due to a Confirm */
+ HOOK_OPT_CONFIRM_C, /**< a value was substituted by a const due to a Confirm */
+ HOOK_OPT_CONFIRM_E, /**< a value was evaluated due to a Confirm */
HOOK_LOWERED, /**< lowered */
HOOK_OPT_LAST
} hook_opt_kind;
IF_RESULT_LAST
} if_result_t;
+/**
+ * A generic function type.
+ */
+typedef void (generic_func)(void);
+
/**
* a hook entry
*/
void (*_hook_turn_into_id)(void *context, ir_node *node);
void (*_hook_new_graph)(void *context, ir_graph *irg, entity *ent);
void (*_hook_free_graph)(void *context, ir_graph *irg);
- void (*_hook_irg_walk)(void *context, ir_graph *irg, void *pre, void *post);
- void (*_hook_irg_walk_blkwise)(void *context, ir_graph *irg, void *pre, void *post);
- void (*_hook_irg_block_walk)(void *context, ir_graph *irg, ir_node *node, void *pre, void *post);
+ void (*_hook_irg_walk)(void *context, ir_graph *irg, generic_func *pre, generic_func *post);
+ void (*_hook_irg_walk_blkwise)(void *context, ir_graph *irg, generic_func *pre, generic_func *post);
+ void (*_hook_irg_block_walk)(void *context, ir_graph *irg, ir_node *node, generic_func *pre, generic_func *post);
void (*_hook_merge_nodes)(void *context, ir_node **new_node_array, int new_num_entries,
ir_node **old_node_array, int old_num_entries, hook_opt_kind opt);
void (*_hook_reassociate)(void *context, int start);
void (*_hook_arch_dep_replace_div_by_const)(void *context, ir_node *irn);
void (*_hook_arch_dep_replace_mod_by_const)(void *context, ir_node *irn);
void (*_hook_arch_dep_replace_DivMod_by_const)(void *context, ir_node *irn);
+ void (*_hook_new_mode)(void *context, const ir_mode *tmpl, ir_mode *mode);
} hook;
/** the context for every hook */
hook_arch_dep_replace_div_by_const,
hook_arch_dep_replace_mod_by_const,
hook_arch_dep_replace_DivMod_by_const,
+ hook_new_mode,
hook_last,
} hook_type_t;
* register the hook entry.
*
* @param hook the hook type
- * @rapam entry the hook entry
+ * @param entry the hook entry
*/
void register_hook(hook_type_t hook, hook_entry_t *entry);
hook_exec(hook_arch_dep_replace_mod_by_const, (ctx, irn))
#define hook_arch_dep_replace_DivMod_by_const(irn) \
hook_exec(hook_arch_dep_replace_DivMod_by_const, (ctx, irn))
+#define hook_new_mode(tmpl, mode) hook_exec(hook_new_mode, (ctx, tmpl, mode))
/* the initializer, move to hooks_t.h some day */
int init_hooks(void);