libFirm
irhooks.h File Reference

Generic hooks for various libFirm functions. More...

#include "irop.h"
#include "irnode.h"
#include "irgraph.h"
#include "begin.h"
#include "end.h"

Go to the source code of this file.

Data Structures

struct  hook_entry_t
 a hook entry More...

Macros

#define hook_exec(what, args)
 Executes the hook what with the args args Do not use this macro directly.
#define hook_new_ir_op(op)   hook_exec(hook_new_ir_op, (hook_ctx_, op))
 Called when a new node opcode has been created.
#define hook_free_ir_op(op)   hook_exec(hook_free_ir_op, (hook_ctx_, op))
 Called when a node opcode has been freed.
#define hook_new_node(graph, node)   hook_exec(hook_new_node, (hook_ctx_, graph, node))
 Called after a new node has been created.
#define hook_set_irn_n(src, pos, tgt, old_tgt)   hook_exec(hook_set_irn_n, (hook_ctx_, src, pos, tgt, old_tgt))
 Called when a nodes input is changed.
#define hook_replace(old, nw)   hook_exec(hook_replace, (hook_ctx_, old, nw))
 Called when a node is replaced.
#define hook_turn_into_id(node)   hook_exec(hook_turn_into_id, (hook_ctx_, node))
 Called when a node is turned into an Id node.
#define hook_normalize(node)   hook_exec(hook_normalize, (hook_ctx_, node))
 Called when a node is normalized.
#define hook_new_graph(irg, ent)   hook_exec(hook_new_graph, (hook_ctx_, irg, ent))
 Called after a new graph has been created.
#define hook_free_graph(irg)   hook_exec(hook_free_graph, (hook_ctx_, irg))
 Called after a graph has been freed.
#define hook_irg_walk(irg, pre, post)   hook_exec(hook_irg_walk, (hook_ctx_, irg, pre, post))
 Called before a graph walk is started.
#define hook_irg_walk_blkwise(irg, pre, post)   hook_exec(hook_irg_walk_blkwise, (hook_ctx_, irg, pre, post))
 Called before a blockwise graph walk is started.
#define hook_irg_block_walk(irg, node, pre, post)   hook_exec(hook_irg_block_walk, (hook_ctx_, irg, node, pre, post))
 Called before a block walk is started.
#define hook_merge_nodes(new_node_array, new_num_entries, old_node_array, old_num_entries, opt)   hook_exec(hook_merge_nodes, (hook_ctx_, new_node_array, new_num_entries, old_node_array, old_num_entries, opt))
 Called before 2 nodes get merged.
#define hook_reassociate(start)   hook_exec(hook_reassociate, (hook_ctx_, start))
 Called before node inputs get reassociated.
#define hook_lower(node)   hook_exec(hook_lower, (hook_ctx_, node))
 Called before a node gets lowered.
#define hook_inline(call, irg)   hook_exec(hook_inline, (hook_ctx_, call, irg))
 Called before a graph is inlined.
#define hook_tail_rec(irg, n_calls)   hook_exec(hook_tail_rec, (hook_ctx_, irg, n_calls))
 Called before tail recursion is performed.
#define hook_strength_red(irg, node)   hook_exec(hook_strength_red, (hook_ctx_, irg, node))
 Called before strength reduction is performed.
#define hook_dead_node_elim(irg, start)   hook_exec(hook_dead_node_elim, (hook_ctx_, irg, start))
 Called before dead node elimination is performed.
#define hook_if_conversion(irg, phi, pos, mux, reason)   hook_exec(hook_if_conversion, (hook_ctx_, irg, phi, pos, mux, reason))
 Called when if-conversion creates a Mux node.
#define hook_func_call(irg, call)   hook_exec(hook_func_call, (hook_ctx_, irg, call))
 Called when a function call is optimized.
#define hook_arch_dep_replace_mul_with_shifts(irn)   hook_exec(hook_arch_dep_replace_mul_with_shifts, (hook_ctx_, irn))
 Called when a mul is replaced with shifts.
#define hook_arch_dep_replace_division_by_const(irn)   hook_exec(hook_arch_dep_replace_division_by_const, (hook_ctx_, irn))
 Called when a dvision by constant is replaced.
#define hook_new_mode(mode)   hook_exec(hook_new_mode, (hook_ctx_, mode))
 Called when a new mode has been created.
#define hook_new_entity(ent)   hook_exec(hook_new_entity, (hook_ctx_, ent))
 Called when a new entity has been created.
#define hook_new_type(tp)   hook_exec(hook_new_type, (hook_ctx_, tp))
 Called when a new type has been created.
#define hook_node_info(F, node)   hook_exec(hook_node_info, (hook_ctx_, F, node))
 Called at the end of the node info dumper to dump additional node info.

Typedefs

typedef void( generic_func )(void)
 A generic function type.

Enumerations

enum  hook_opt_kind {
  HOOK_OPT_DEAD_BLOCK, HOOK_OPT_STG, HOOK_OPT_IFSIM, HOOK_OPT_CONST_EVAL,
  HOOK_OPT_ALGSIM, HOOK_OPT_PHI, HOOK_OPT_SYNC, HOOK_OPT_WAW,
  HOOK_OPT_WAR, HOOK_OPT_RAW, HOOK_OPT_RAR, HOOK_OPT_RC,
  HOOK_OPT_TUPLE, HOOK_OPT_ID, HOOK_OPT_CSE, HOOK_OPT_STRENGTH_RED,
  HOOK_OPT_ARCH_DEP, HOOK_OPT_REASSOC, HOOK_OPT_POLY_CALL, HOOK_OPT_IF_CONV,
  HOOK_OPT_FUNC_CALL, HOOK_OPT_CONFIRM, HOOK_OPT_CONFIRM_C, HOOK_OPT_CONFIRM_E,
  HOOK_OPT_EXC_REM, HOOK_OPT_NORMALIZE, HOOK_LOWERED, HOOK_BACKEND,
  HOOK_OPT_LAST
}
 options for the hook_merge_nodes hook More...
enum  if_result_t {
  IF_RESULT_SUCCESS = 0, IF_RESULT_SIDE_EFFECT = 1, IF_RESULT_SIDE_EFFECT_PHI = 2, IF_RESULT_TOO_DEEP = 3,
  IF_RESULT_BAD_CF = 4, IF_RESULT_DENIED = 5, IF_RESULT_LAST
}
 Result of an if-conversion attempt. More...
enum  hook_type_t {
  hook_new_ir_op, hook_free_ir_op, hook_new_node, hook_set_irn_n,
  hook_replace, hook_turn_into_id, hook_normalize, hook_new_graph,
  hook_free_graph, hook_irg_walk, hook_irg_walk_blkwise, hook_irg_block_walk,
  hook_merge_nodes, hook_reassociate, hook_lower, hook_inline,
  hook_tail_rec, hook_strength_red, hook_dead_node_elim, hook_if_conversion,
  hook_func_call, hook_arch_dep_replace_mul_with_shifts, hook_arch_dep_replace_division_by_const, hook_new_mode,
  hook_new_entity, hook_new_type, hook_node_info, hook_last
}
 possible hooks More...

Functions

void register_hook (hook_type_t hook, hook_entry_t *entry)
 register a hook entry.
void unregister_hook (hook_type_t hook, hook_entry_t *entry)
 unregister a hook entry.

Variables

hook_entry_thooks [hook_last]
 Global list of registerd hooks.

Detailed Description

Generic hooks for various libFirm functions.

Author
Michael Beck

Definition in file irhooks.h.

Macro Definition Documentation

#define hook_arch_dep_replace_division_by_const (   irn)    hook_exec(hook_arch_dep_replace_division_by_const, (hook_ctx_, irn))

Called when a dvision by constant is replaced.

Definition at line 302 of file irhooks.h.

#define hook_arch_dep_replace_mul_with_shifts (   irn)    hook_exec(hook_arch_dep_replace_mul_with_shifts, (hook_ctx_, irn))

Called when a mul is replaced with shifts.

Definition at line 299 of file irhooks.h.

#define hook_dead_node_elim (   irg,
  start 
)    hook_exec(hook_dead_node_elim, (hook_ctx_, irg, start))

Called before dead node elimination is performed.

Definition at line 291 of file irhooks.h.

#define hook_exec (   what,
  args 
)
Value:
do { \
for (_p = hooks[what]; _p; _p = _p->next){ \
void *hook_ctx_ = _p->context; \
_p->hook._##what args; \
} \
} while (0)

Executes the hook what with the args args Do not use this macro directly.

Definition at line 241 of file irhooks.h.

#define hook_free_graph (   irg)    hook_exec(hook_free_graph, (hook_ctx_, irg))

Called after a graph has been freed.

Definition at line 267 of file irhooks.h.

#define hook_free_ir_op (   op)    hook_exec(hook_free_ir_op, (hook_ctx_, op))

Called when a node opcode has been freed.

Definition at line 252 of file irhooks.h.

#define hook_func_call (   irg,
  call 
)    hook_exec(hook_func_call, (hook_ctx_, irg, call))

Called when a function call is optimized.

Definition at line 296 of file irhooks.h.

#define hook_if_conversion (   irg,
  phi,
  pos,
  mux,
  reason 
)    hook_exec(hook_if_conversion, (hook_ctx_, irg, phi, pos, mux, reason))

Called when if-conversion creates a Mux node.

Definition at line 293 of file irhooks.h.

#define hook_inline (   call,
  irg 
)    hook_exec(hook_inline, (hook_ctx_, call, irg))

Called before a graph is inlined.

Definition at line 284 of file irhooks.h.

#define hook_irg_block_walk (   irg,
  node,
  pre,
  post 
)    hook_exec(hook_irg_block_walk, (hook_ctx_, irg, node, pre, post))

Called before a block walk is started.

Definition at line 274 of file irhooks.h.

#define hook_irg_walk (   irg,
  pre,
  post 
)    hook_exec(hook_irg_walk, (hook_ctx_, irg, pre, post))

Called before a graph walk is started.

Definition at line 269 of file irhooks.h.

#define hook_irg_walk_blkwise (   irg,
  pre,
  post 
)    hook_exec(hook_irg_walk_blkwise, (hook_ctx_, irg, pre, post))

Called before a blockwise graph walk is started.

Definition at line 271 of file irhooks.h.

#define hook_lower (   node)    hook_exec(hook_lower, (hook_ctx_, node))

Called before a node gets lowered.

Definition at line 282 of file irhooks.h.

#define hook_merge_nodes (   new_node_array,
  new_num_entries,
  old_node_array,
  old_num_entries,
  opt 
)    hook_exec(hook_merge_nodes, (hook_ctx_, new_node_array, new_num_entries, old_node_array, old_num_entries, opt))

Called before 2 nodes get merged.

Definition at line 277 of file irhooks.h.

#define hook_new_entity (   ent)    hook_exec(hook_new_entity, (hook_ctx_, ent))

Called when a new entity has been created.

Definition at line 307 of file irhooks.h.

#define hook_new_graph (   irg,
  ent 
)    hook_exec(hook_new_graph, (hook_ctx_, irg, ent))

Called after a new graph has been created.

Definition at line 265 of file irhooks.h.

#define hook_new_ir_op (   op)    hook_exec(hook_new_ir_op, (hook_ctx_, op))

Called when a new node opcode has been created.

Definition at line 250 of file irhooks.h.

#define hook_new_mode (   mode)    hook_exec(hook_new_mode, (hook_ctx_, mode))

Called when a new mode has been created.

Definition at line 305 of file irhooks.h.

#define hook_new_node (   graph,
  node 
)    hook_exec(hook_new_node, (hook_ctx_, graph, node))

Called after a new node has been created.

Definition at line 254 of file irhooks.h.

#define hook_new_type (   tp)    hook_exec(hook_new_type, (hook_ctx_, tp))

Called when a new type has been created.

Definition at line 309 of file irhooks.h.

#define hook_node_info (   F,
  node 
)    hook_exec(hook_node_info, (hook_ctx_, F, node))

Called at the end of the node info dumper to dump additional node info.

Definition at line 311 of file irhooks.h.

#define hook_normalize (   node)    hook_exec(hook_normalize, (hook_ctx_, node))

Called when a node is normalized.

Definition at line 263 of file irhooks.h.

#define hook_reassociate (   start)    hook_exec(hook_reassociate, (hook_ctx_, start))

Called before node inputs get reassociated.

Definition at line 280 of file irhooks.h.

#define hook_replace (   old,
  nw 
)    hook_exec(hook_replace, (hook_ctx_, old, nw))

Called when a node is replaced.

Definition at line 259 of file irhooks.h.

#define hook_set_irn_n (   src,
  pos,
  tgt,
  old_tgt 
)    hook_exec(hook_set_irn_n, (hook_ctx_, src, pos, tgt, old_tgt))

Called when a nodes input is changed.

Definition at line 256 of file irhooks.h.

#define hook_strength_red (   irg,
  node 
)    hook_exec(hook_strength_red, (hook_ctx_, irg, node))

Called before strength reduction is performed.

Definition at line 288 of file irhooks.h.

#define hook_tail_rec (   irg,
  n_calls 
)    hook_exec(hook_tail_rec, (hook_ctx_, irg, n_calls))

Called before tail recursion is performed.

Definition at line 286 of file irhooks.h.

#define hook_turn_into_id (   node)    hook_exec(hook_turn_into_id, (hook_ctx_, node))

Called when a node is turned into an Id node.

Definition at line 261 of file irhooks.h.

Typedef Documentation

typedef void( generic_func)(void)

A generic function type.

Definition at line 82 of file irhooks.h.

Enumeration Type Documentation

options for the hook_merge_nodes hook

Enumerator:
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_ALGSIM 

algebraic simplification

HOOK_OPT_PHI 

Phi optimization.

HOOK_OPT_SYNC 

Sync optimization.

HOOK_OPT_WAW 

Write-After-Write optimization.

HOOK_OPT_WAR 

Write-After-Read optimization.

HOOK_OPT_RAW 

Read-After-Write optimization.

HOOK_OPT_RAR 

Read-After-Read optimization.

HOOK_OPT_RC 

Read-a-Const optimization.

HOOK_OPT_TUPLE 

Tuple optimization.

HOOK_OPT_ID 

ID optimization.

HOOK_OPT_CSE 

common subexpression elimination

HOOK_OPT_STRENGTH_RED 

strength reduction

HOOK_OPT_ARCH_DEP 

architecture dependent optimization

HOOK_OPT_REASSOC 

reassociation

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_OPT_EXC_REM 

a exception edge was removed due to a Confirmation prove

HOOK_OPT_NORMALIZE 

a commutative node was normalized

HOOK_LOWERED 

lowered

HOOK_BACKEND 

a backend transformation

Definition at line 36 of file irhooks.h.

possible hooks

Enumerator:
hook_new_ir_op 

type for hook_new_ir_op() hook

hook_free_ir_op 

type for hook_free_ir_op() hook

hook_new_node 

type for hook_new_node() hook

hook_set_irn_n 

type for hook_set_irn_n() hook

hook_replace 

type for hook_replace() hook

hook_turn_into_id 

type for hook_turn_into_id() hook

hook_normalize 

type for hook_normalize() hook

hook_new_graph 

type for hook_new_graph() hook

hook_free_graph 

type for hook_free_graph() hook

hook_irg_walk 

type for hook_irg_walk() hook

hook_irg_walk_blkwise 

type for hook_irg_walk_blkwise() hook

hook_irg_block_walk 

type for hook_irg_block_walk() hook

hook_merge_nodes 

type for hook_merge_nodes() hook

hook_reassociate 

type for hook_reassociate() hook

hook_lower 

type for hook_lower() hook

hook_inline 

type for hook_inline() hook

hook_tail_rec 

type for hook_tail_rec() hook

hook_strength_red 

type for hook_strength_red() hook

hook_dead_node_elim 

type for hook_dead_node_elim() hook

hook_if_conversion 

type for hook_if_conversion() hook

hook_func_call 

type for hook_func_call() hook

hook_arch_dep_replace_mul_with_shifts 

type for hook_arch_dep_replace_mul_with_shifts() hook

hook_arch_dep_replace_division_by_const 

type for hook_arch_dep_replace_division_by_const() hook

hook_new_mode 

type for hook_new_mode() hook

hook_new_entity 

type for hook_new_entity() hook

hook_new_type 

type for hook_new_type() hook

hook_node_info 

type for hook_node_info() hook

hook_last 

last hook type

Definition at line 185 of file irhooks.h.

Result of an if-conversion attempt.

Enumerator:
IF_RESULT_SUCCESS 

if conversion could be done

IF_RESULT_SIDE_EFFECT 

if conversion failed because of side effect

IF_RESULT_SIDE_EFFECT_PHI 

if conversion failed because of Phi node found

IF_RESULT_TOO_DEEP 

if conversion failed because of to deep DAG's

IF_RESULT_BAD_CF 

if conversion failed because of bad control flow

IF_RESULT_DENIED 

if conversion failed because of architecture deny

Definition at line 69 of file irhooks.h.

Function Documentation

void register_hook ( hook_type_t  hook,
hook_entry_t entry 
)

register a hook entry.

Parameters
hookthe hook type
entrythe hook entry
void unregister_hook ( hook_type_t  hook,
hook_entry_t entry 
)

unregister a hook entry.

Parameters
hookthe hook type
entrythe hook entry

Variable Documentation

Global list of registerd hooks.

Definition at line 235 of file irhooks.h.