add irop_flag_machine, irop_flag_machine_op and irop_flag_user flags and check functions
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 4 Apr 2006 12:20:09 +0000 (12:20 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 4 Apr 2006 12:20:09 +0000 (12:20 +0000)
[r7571]

ir/ir/irop.h
ir/ir/irop_t.h

index 2a4ddfe..908a2de 100644 (file)
@@ -60,7 +60,9 @@ typedef enum {
   irop_flag_constlike   = 0x00000080, /**< the operation has no arguments and is some
                                            kind of a constant */
   irop_flag_keep        = 0x00000100, /**< this operation can be kept in End's keep-alive list */
-  irop_flag_machine     = 0x00000200  /**< this operation is a machine operation, all higher flags are machine flags */
+  irop_flag_machine     = 0x00000200, /**< this operation is a machine operation */
+  irop_flag_machine_op  = 0x00000400, /**< this operation is a machine operand */
+  irop_flag_user        = 0x00000800  /**< this flag and all higher one are free for machine user */
 } irop_flags;
 
 /** The opcodes of the libFirm predefined operations. */
index 2ae965f..61b20e7 100644 (file)
 
 /** The type of an ir_op. */
 struct ir_op {
-  opcode code;            /**< the unique opcode of the op */
-  ident *name;            /**< the name of the op */
-  size_t attr_size;       /**< Space needed in memory for private attributes */
-  op_pin_state op_pin_state_pinned; /**< How to deal with the node in cse, pre. */
-  op_arity opar;          /**< arity of operator. */
-  int op_index;           /**< the index of the first data operand, 0 for most cases, 1 for Div etc. */
-  unsigned flags;         /**< flags describing the behavior of the ir_op, a bitmaks of irop_flags */
+  opcode code;            /**< The unique opcode of the op. */
+  ident *name;            /**< The name of the op. */
+  size_t attr_size;       /**< Space needed in memory for private attributes. */
+  op_pin_state op_pin_state_pinned; /**< How to deal with the node in CSE, PRE. */
+  op_arity opar;          /**< The arity of operator. */
+  int op_index;           /**< The index of the first data operand, 0 for most cases, 1 for Div etc. */
+  unsigned flags;         /**< Flags describing the behavior of the ir_op, a bitmasks of irop_flags. */
   void *tag;              /**< Some custom pointer the op's creator can attach stuff to. */
 
-  ir_op_ops ops;          /**< the operations of the this op. */
+  ir_op_ops ops;          /**< The operations of the this op. */
 };
 
 /**
@@ -106,6 +106,16 @@ static INLINE int is_op_keep(const ir_op *op) {
   return op->flags & irop_flag_keep;
 }
 
+/** Returns non-zero if operation is a machine operation */
+static INLINE int is_op_machine(const ir_op *op) {
+  return op->flags & irop_flag_machine;
+}
+
+/** Returns non-zero if operation is a machine user op number n */
+static INLINE int is_op_machine_user(const ir_op *op, unsigned n) {
+  return op->flags & (irop_flag_user << n);
+}
+
 static INLINE opcode _get_op_code(const ir_op *op) {
   return op->code;
 }