libFirm 1.20
Node Opcodes

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

Data Structures

struct  ir_op_ops
 io_op Operations. More...

Defines

#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_labeled = 1U << 0, irop_flag_commutative = 1U << 1, irop_flag_cfopcode = 1U << 2,
  irop_flag_fragile = 1U << 3, irop_flag_forking = 1U << 4, irop_flag_highlevel = 1U << 5, irop_flag_constlike = 1U << 6,
  irop_flag_always_opt = 1U << 7, irop_flag_keep = 1U << 8, irop_flag_start_block = 1U << 9, irop_flag_uses_memory = 1U << 10,
  irop_flag_dump_noblock = 1U << 11, irop_flag_dump_noinput = 1U << 12, irop_flag_cse_neutral = 1U << 13, irop_flag_unknown_jump = 1U << 14
}
 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, unsigned flags, op_arity opar, int op_index, size_t attr_size, const ir_op_ops *ops)
 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.
const ir_op_opsget_op_ops (const 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


Define Documentation

#define NULL_FUNC   ((generic_func)(NULL))

The NULL-function.

Definition at line 120 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 148 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 190 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 239 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 158 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 204 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 197 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 141 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 175 of file irop.h.

typedef void(* op_func)(void)

A generic function pointer type.

Definition at line 117 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 184 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 168 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 213 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 222 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 227 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_labeled 

If set, output edge labels on in-edges in vcg graph.

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_always_opt 

This operation must always be optimized .

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_dump_noinput 

node is a placeholder for "no input"

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.

const ir_op_ops* get_op_ops ( const 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,
unsigned  flags,
op_arity  opar,
int  op_index,
size_t  attr_size,
const ir_op_ops ops 
)

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
opsoperations for this opcode, iff NULL default operations are used
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.