libFirm 1.20
|
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 | |
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. | |
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_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. | |
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 . | |
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_ops * | get_op_ops (const ir_op *op) |
Returns the ir_op_ops of an ir_op. |
This module specifies the opcodes possible for ir nodes.
Their definition is close to the operations specified in UKA Tech-Report 1999-14
#define NULL_FUNC ((generic_func)(NULL)) |
typedef ir_tarval*(* computed_value_func)(const ir_node *self) |
typedef void(* copy_attr_func)(ir_graph *irg, const ir_node *old_node, ir_node *new_node) |
typedef void(* dump_node_func)(FILE *out, const ir_node *self, dump_reason_t reason) |
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).
typedef ir_entity*(* get_entity_attr_func)(const ir_node *self) |
typedef ir_type*(* get_type_attr_func)(const ir_node *self) |
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) |
typedef void(* op_func)(void) |
typedef int(* reassociate_func)(ir_node **n) |
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.
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.
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.
enum dump_reason_t |
enum ir_opcode |
enum irop_flags |
The irop flags.
enum op_arity |
The allowed arities.
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.
const char* get_op_name | ( | const ir_op * | op | ) |
Returns the string 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 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.
code | the opcode, one of type opcode |
name | the printable name of this opcode |
p | whether operations of this opcode are op_pin_state_pinned or floating |
flags | a bitmask of irop_flags describing the behavior of the IR operation |
opar | the parity of this IR operation |
op_index | if the parity is oparity_unary, oparity_binary or oparity_trinary the index of the left operand |
ops | operations for this opcode, iff NULL default operations are used |
attr_size | attribute size for this 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
.
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.