irop_flag_keep = 0x00000200, /**< This operation can be kept in End's keep-alive list. */
irop_flag_start_block = 0x00000400, /**< This operation is always placed in the Start block. */
irop_flag_uses_memory = 0x00000800, /**< This operation has a memory input and may change the memory state. */
- irop_flag_machine = 0x00001000, /**< This operation is a machine operation. */
- irop_flag_machine_op = 0x00002000, /**< This operation is a machine operand. */
- irop_flag_user = 0x00004000 /**< This flag and all higher ones are free for machine user. */
+ irop_flag_dump_noblock = 0x00001000, /**< node should be dumped outside any blocks */
+ irop_flag_dump_noinput = 0x00002000, /**< node is a placeholder for "no input" */
+ irop_flag_machine = 0x00010000, /**< This operation is a machine operation. */
+ irop_flag_machine_op = 0x00020000, /**< This operation is a machine operand. */
+ irop_flag_user = 0x00040000 /**< This flag and all higher ones are free for machine user. */
} irop_flags;
/** The opcodes of the libFirm predefined operations. */
*/
void set_generic_function_ptr(ir_op *op, op_func func);
+/**
+ * Return the irop flags of an IR opcode.
+ */
+irop_flags get_op_flags(const ir_op *op);
+
+/**
+ * The hash operation.
+ * This operation calculates a hash value for a given IR node.
+ */
+typedef unsigned (*hash_func)(const ir_node *self);
+
/**
* The compute value operation.
* This operation evaluates an IR node into a tarval if possible,
* io_op Operations.
*/
typedef struct {
+ hash_func hash; /**< Calculate a hash value for an IR node. */
computed_value_func computed_value; /**< Evaluates a node into a tarval if possible. */
equivalent_node_func equivalent_node; /**< Optimizes the node by returning an equivalent one. */
transform_node_func transform_node; /**< Optimizes the node by transforming it. */