libFirm
Node Opcodes

This module specifies the opcodes possible for ir nodes. More...

Data Structures

struct  ir_op_ops
 io_op Operations. More...

Macros

#define NULL_FUNC   ((generic_func)(NULL))
 The NULL-function.

Typedefs

typedef struct ir_op ir_op
 Node Opcode.
typedef void(* op_func )(void)
 A generic function pointer type.
typedef unsigned(* hash_func )(const ir_node *self)
 The hash operation.
typedef ir_tarval *(* computed_value_func )(const ir_node *self)
 The compute value operation.
typedef ir_node *(* equivalent_node_func )(ir_node *self)
 The equivalent node operation.
typedef ir_node *(* transform_node_func )(ir_node *self)
 The transform node operation.
typedef int(* node_cmp_attr_func )(const ir_node *a, const ir_node *b)
 The node attribute compare operation.
typedef int(* reassociate_func )(ir_node **n)
 The reassociation operation.
typedef void(* copy_attr_func )(ir_graph *irg, const ir_node *old_node, ir_node *new_node)
 The copy attribute operation.
typedef ir_type *(* get_type_attr_func )(const ir_node *self)
 The get_type_attr operation.
typedef ir_entity *(* get_entity_attr_func )(const ir_node *self)
 The get_entity_attr operation.
typedef int(* verify_node_func )(const ir_node *node)
 The verify_node operation.
typedef int(* verify_proj_node_func )(const ir_node *proj)
 The verify_node operation for Proj(X).
typedef void(* dump_node_func )(FILE *out, const ir_node *self, dump_reason_t reason)
 The dump_node operation.

Enumerations

enum  op_arity {
  oparity_invalid = 0, oparity_unary, oparity_binary, oparity_trinary,
  oparity_zero, oparity_variable, oparity_dynamic, oparity_any
}
 The allowed arities. More...
enum  irop_flags {
  irop_flag_none = 0, irop_flag_commutative = 1U << 0, irop_flag_cfopcode = 1U << 1, irop_flag_fragile = 1U << 2,
  irop_flag_forking = 1U << 3, irop_flag_highlevel = 1U << 4, irop_flag_constlike = 1U << 5, irop_flag_keep = 1U << 6,
  irop_flag_start_block = 1U << 7, irop_flag_uses_memory = 1U << 8, irop_flag_dump_noblock = 1U << 9, irop_flag_cse_neutral = 1U << 10,
  irop_flag_unknown_jump = 1U << 11
}
 The irop flags. More...
enum  dump_reason_t { dump_node_opcode_txt, dump_node_mode_txt, dump_node_nodeattr_txt, dump_node_info_txt }
 Reasons to call the dump_node operation: More...
enum  ir_opcode {
  iro_ASM, iro_Add, iro_Alloc, iro_Anchor,
  iro_And, iro_Bad, iro_Block, iro_Borrow,
  iro_Bound, iro_Builtin, iro_Call, iro_Carry,
  iro_Cast, iro_Cmp, iro_Cond, iro_Confirm,
  iro_Const, iro_Conv, iro_CopyB, iro_Deleted,
  iro_Div, iro_Dummy, iro_End, iro_Eor,
  iro_Free, iro_IJmp, iro_Id, iro_InstOf,
  iro_Jmp, iro_Load, iro_Minus, iro_Mod,
  iro_Mul, iro_Mulh, iro_Mux, iro_NoMem,
  iro_Not, iro_Or, iro_Phi, iro_Pin,
  iro_Proj, iro_Raise, iro_Return, iro_Rotl,
  iro_Sel, iro_Shl, iro_Shr, iro_Shrs,
  iro_Start, iro_Store, iro_Sub, iro_Switch,
  iro_SymConst, iro_Sync, iro_Tuple, iro_Unknown,
  iro_First = iro_ASM, iro_Last = iro_Unknown, beo_First, beo_Spill = beo_First,
  beo_Reload, beo_Perm, beo_MemPerm, beo_Copy,
  beo_Keep, beo_CopyKeep, beo_Call, beo_Return,
  beo_AddSP, beo_SubSP, beo_IncSP, beo_Start,
  beo_FrameAddr, beo_Last = beo_FrameAddr, iro_MaxOpcode
}
 The opcodes of the libFirm predefined operations. More...

Functions

identget_op_ident (const ir_op *op)
 Returns the ident for the opcode name.
const char * get_op_name (const ir_op *op)
 Returns the string for the opcode.
unsigned get_op_code (const ir_op *op)
 Returns the enum for the opcode.
const char * get_op_pin_state_name (op_pin_state s)
 Returns a human readable name of an op_pin_state.
op_pin_state get_op_pinned (const ir_op *op)
 Returns pinned state of an opcode.
void set_op_pinned (ir_op *op, op_pin_state pinned)
 Sets pinned in the opcode.
unsigned get_next_ir_opcode (void)
 Returns the next free IR opcode number, allows to register user ops.
unsigned get_next_ir_opcodes (unsigned num)
 Returns the next free n IR opcode number, allows to register a bunch of user ops.
op_func get_generic_function_ptr (const ir_op *op)
 Returns the generic function pointer from an IR operation.
void set_generic_function_ptr (ir_op *op, op_func func)
 Stores a generic function pointer into an IR operation.
irop_flags get_op_flags (const ir_op *op)
 Returns the irop flags of an IR opcode.
ir_opnew_ir_op (unsigned code, const char *name, op_pin_state p, irop_flags flags, op_arity opar, int op_index, size_t attr_size)
 Creates a new IR operation.
unsigned ir_get_n_opcodes (void)
 Returns one more than the highest opcode code in use.
ir_opir_get_opcode (unsigned code)
 Returns the opcode with code code.
void ir_clear_opcodes_generic_func (void)
 Sets the generic function pointer of all opcodes to NULL.
void ir_op_set_memory_index (ir_op *op, int memory_index)
 Sets memory input of operation using memory.
void ir_op_set_fragile_indices (ir_op *op, int pn_x_regular, int pn_x_except)
 Sets proj-number for X_regular and X_except projs of fragile nodes.
ir_op_opsget_op_ops (ir_op *op)
 Returns the ir_op_ops of an ir_op.

Detailed Description

This module specifies the opcodes possible for ir nodes.

Their definition is close to the operations specified in UKA Tech-Report 1999-14

Macro Definition Documentation

#define NULL_FUNC   ((generic_func)(NULL))

The NULL-function.

Definition at line 118 of file irop.h.

Typedef Documentation

typedef ir_tarval*(* computed_value_func)(const ir_node *self)

The compute value operation.

This operation evaluates an IR node into a tarval if possible, returning tarval_bad otherwise.

Definition at line 146 of file irop.h.

typedef void(* copy_attr_func)(ir_graph *irg, const ir_node *old_node, ir_node *new_node)

The copy attribute operation.

Copy the node attributes from an 'old' node to a 'new' one.

Definition at line 188 of file irop.h.

typedef void(* dump_node_func)(FILE *out, const ir_node *self, dump_reason_t reason)

The dump_node operation.

Writes several informations requested by reason to an output file

Definition at line 237 of file irop.h.

typedef ir_node*(* equivalent_node_func)(ir_node *self)

The equivalent node operation.

This operation returns an equivalent node for the input node. It does not create new nodes. It is therefore safe to free self if the node returned is not self. If a node returns a Tuple we can not just skip it. If the size of the in array fits, we transform n into a tuple (e.g., possible for Div).

Definition at line 156 of file irop.h.

typedef ir_entity*(* get_entity_attr_func)(const ir_node *self)

The get_entity_attr operation.

Used to traverse all entities that can be accessed from an ir_graph. Returns the entity attribute of the node self.

Definition at line 202 of file irop.h.

typedef ir_type*(* get_type_attr_func)(const ir_node *self)

The get_type_attr operation.

Used to traverse all types that can be accessed from an ir_graph. Returns the type attribute of the node self.

Definition at line 195 of file irop.h.

typedef unsigned(* hash_func)(const ir_node *self)

The hash operation.

This operation calculates a hash value for a given IR node.

Definition at line 139 of file irop.h.

typedef struct ir_op ir_op

Node Opcode.

Definition at line 66 of file firm_types.h.

typedef int(* node_cmp_attr_func)(const ir_node *a, const ir_node *b)

The node attribute compare operation.

Compares the nodes attributes of two nodes of identical opcode and returns 0 if the attributes are identical, 1 if they differ.

Definition at line 173 of file irop.h.

typedef void(* op_func)(void)

A generic function pointer type.

Definition at line 115 of file irop.h.

typedef int(* reassociate_func)(ir_node **n)

The reassociation operation.

Called from a walker. Returns non-zero if a reassociation rule was applied. The pointer n is set to the newly created node, if some reassociation was applied.

Definition at line 182 of file irop.h.

typedef ir_node*(* transform_node_func)(ir_node *self)

The transform node operation.

This operation tries several [inplace] [optimizing] transformations and returns an equivalent node. The difference to equivalent_node() is that these transformations do generate new nodes, and thus the old node must not be freed even if the equivalent node isn't the old one.

Definition at line 166 of file irop.h.

typedef int(* verify_node_func)(const ir_node *node)

The verify_node operation.

Returns non-zero if the node verification is ok, else 0. Depending on the node verification settings, may even assert.

See Also
do_node_verification()

Definition at line 211 of file irop.h.

typedef int(* verify_proj_node_func)(const ir_node *proj)

The verify_node operation for Proj(X).

Returns non-zero if the node verification is ok, else 0. Depending on the node verification settings, may even assert.

See Also
do_node_verification()

Definition at line 220 of file irop.h.

Enumeration Type Documentation

Reasons to call the dump_node operation:

Enumerator:
dump_node_opcode_txt 

Dump the opcode.

dump_node_mode_txt 

Dump the mode.

dump_node_nodeattr_txt 

Dump node attributes to be shown in the label.

dump_node_info_txt 

Dump node attributes into info1.

Definition at line 225 of file irop.h.

enum ir_opcode

The opcodes of the libFirm predefined operations.

Definition at line 8 of file opcodes.h.

enum irop_flags

The irop flags.

Enumerator:
irop_flag_none 

Nothing.

irop_flag_commutative 

This operation is commutative.

irop_flag_cfopcode 

This operation is a control flow operation.

irop_flag_fragile 

Set if the operation can change the control flow because of an exception.

irop_flag_forking 

Forking control flow at this operation.

irop_flag_highlevel 

This operation is a pure high-level one and can be skipped in low-level optimizations.

irop_flag_constlike 

This operation has no arguments and is some kind of a constant.

irop_flag_keep 

This operation can be kept in End's keep-alive list.

irop_flag_start_block 

This operation is always placed in the Start block.

irop_flag_uses_memory 

This operation has a memory input and may change the memory state.

irop_flag_dump_noblock 

node should be dumped outside any blocks

irop_flag_cse_neutral 

This operation is CSE neutral to its users.

irop_flag_unknown_jump 

This operation jumps to an unknown destination.

The CFG is a conservative aproximation in this case. You cannot change the destination of an unknown_jump

Definition at line 63 of file irop.h.

enum op_arity

The allowed arities.

Enumerator:
oparity_unary 

An unary operator – considering 'numeric' arguments.

oparity_binary 

A binary operator – considering 'numeric' arguments.

oparity_trinary 

A trinary operator – considering 'numeric' arguments.

oparity_zero 

A zero arity operator, e.g.

a Const.

oparity_variable 

The arity is not fixed by opcode, but statically known.

E.g., number of arguments to call.

oparity_dynamic 

The arity depends on state of Firm representation.

Can be changed by optimizations... We must allocate a dynamic in array for the node!

oparity_any 

Any other arity.

Definition at line 47 of file irop.h.

Function Documentation

op_func get_generic_function_ptr ( const ir_op op)

Returns the generic function pointer from an IR operation.

unsigned get_next_ir_opcode ( void  )

Returns the next free IR opcode number, allows to register user ops.

unsigned get_next_ir_opcodes ( unsigned  num)

Returns the next free n IR opcode number, allows to register a bunch of user ops.

unsigned get_op_code ( const ir_op op)

Returns the enum for the opcode.

irop_flags get_op_flags ( const ir_op op)

Returns the irop flags of an IR opcode.

ident* get_op_ident ( const ir_op op)

Returns the ident for the opcode name.

const char* get_op_name ( const ir_op op)

Returns the string for the opcode.

ir_op_ops* get_op_ops ( ir_op op)

Returns the ir_op_ops of an ir_op.

const char* get_op_pin_state_name ( op_pin_state  s)

Returns a human readable name of an op_pin_state.

op_pin_state get_op_pinned ( const ir_op op)

Returns pinned state of an opcode.

void ir_clear_opcodes_generic_func ( void  )

Sets the generic function pointer of all opcodes to NULL.

unsigned ir_get_n_opcodes ( void  )

Returns one more than the highest opcode code in use.

ir_op* ir_get_opcode ( unsigned  code)

Returns the opcode with code code.

code has to be smaller than get_irp_n_opcode(), returns NULL if no opcode with the code exists.

void ir_op_set_fragile_indices ( ir_op op,
int  pn_x_regular,
int  pn_x_except 
)

Sets proj-number for X_regular and X_except projs of fragile nodes.

Note: should only be used immediately after new_ir_op

void ir_op_set_memory_index ( ir_op op,
int  memory_index 
)

Sets memory input of operation using memory.

ir_op* new_ir_op ( unsigned  code,
const char *  name,
op_pin_state  p,
irop_flags  flags,
op_arity  opar,
int  op_index,
size_t  attr_size 
)

Creates a new IR operation.

Parameters
codethe opcode, one of type opcode
namethe printable name of this opcode
pwhether operations of this opcode are op_pin_state_pinned or floating
flagsa bitmask of irop_flags describing the behavior of the IR operation
oparthe parity of this IR operation
op_indexif the parity is oparity_unary, oparity_binary or oparity_trinary the index of the left operand
attr_sizeattribute size for this IR operation
Returns
The generated IR operation.

This function can create all standard Firm opcode as well as new ones. The behavior of new opcode depends on the operations ops and the flags.

void set_generic_function_ptr ( ir_op op,
op_func  func 
)

Stores a generic function pointer into an IR operation.

void set_op_pinned ( ir_op op,
op_pin_state  pinned 
)

Sets pinned in the opcode.

Setting it to floating has no effect for Block, Phi and control flow nodes.