+
+
+int
+is_unop (ir_node *node) {
+ return ( node->op == op_Minus ||
+ node->op == op_Abs ||
+ node->op == op_Not ||
+ node->op == op_Conv );
+}
+
+INLINE ir_node *
+get_unop_op (ir_node *node) {
+ assert ( node->op == op_Minus ||
+ node->op == op_Abs ||
+ node->op == op_Not ||
+ node->op == op_Conv );
+ switch (get_irn_opcode (node)) {
+ case iro_Minus: return get_Minus_op(node); break;
+ case iro_Abs: return get_Abs_op(node); break;
+ case iro_Not: return get_Not_op(node); break;
+ case iro_Conv: return get_Conv_op(node); break;
+ default: return NULL;
+ }
+}
+
+INLINE void
+set_unop_op (ir_node *node, ir_node *op) {
+ assert (node->op == op_Minus ||
+ node->op == op_Abs ||
+ node->op == op_Not ||
+ node->op == op_Conv );
+ switch (get_irn_opcode (node)) {
+ case iro_Minus: set_Minus_op(node, op); break;
+ case iro_Abs: set_Abs_op(node, op); break;
+ case iro_Not: set_Not_op(node, op); break;
+ case iro_Conv: set_Conv_op(node, op); break;
+ default: ;
+ }
+
+}
+
+int
+is_binop (ir_node *node) {
+ return (node->op == op_Add ||
+ node->op == op_Sub ||
+ node->op == op_Mul ||
+ node->op == op_Quot ||
+ node->op == op_DivMod ||
+ node->op == op_Div ||
+ node->op == op_Mod ||
+ node->op == op_And ||
+ node->op == op_Or ||
+ node->op == op_Eor ||
+ node->op == op_Shl ||
+ node->op == op_Shr ||
+ node->op == op_Shrs ||
+ node->op == op_Rot ||
+ node->op == op_Cmp );
+}
+
+INLINE ir_node *
+get_binop_left (ir_node *node) {
+ assert (node->op == op_Add ||
+ node->op == op_Sub ||
+ node->op == op_Mul ||
+ node->op == op_Quot ||
+ node->op == op_DivMod ||
+ node->op == op_Div ||
+ node->op == op_Mod ||
+ node->op == op_And ||
+ node->op == op_Or ||
+ node->op == op_Eor ||
+ node->op == op_Shl ||
+ node->op == op_Shr ||
+ node->op == op_Shrs ||
+ node->op == op_Rot ||
+ node->op == op_Cmp );
+
+ switch (get_irn_opcode (node)) {
+ case iro_Add : return get_Add_left(node); break;
+ case iro_Sub : return get_Sub_left(node); break;
+ case iro_Mul : return get_Mul_left(node); break;
+ case iro_Quot : return get_Quot_left(node); break;
+ case iro_DivMod: return get_DivMod_left(node); break;
+ case iro_Div : return get_Div_left(node); break;
+ case iro_Mod : return get_Mod_left(node); break;
+ case iro_And : return get_And_left(node); break;
+ case iro_Or : return get_Or_left(node); break;
+ case iro_Eor : return get_Eor_left(node); break;
+ case iro_Shl : return get_Shl_left(node); break;
+ case iro_Shr : return get_Shr_left(node); break;
+ case iro_Shrs : return get_Shrs_left(node); break;
+ case iro_Rot : return get_Rot_left(node); break;
+ case iro_Cmp : return get_Cmp_left(node); break;
+ default: return NULL;
+ };
+}
+
+INLINE void
+set_binop_left (ir_node *node, ir_node *left) {
+ assert (node->op == op_Add ||
+ node->op == op_Sub ||
+ node->op == op_Mul ||
+ node->op == op_Quot ||
+ node->op == op_DivMod ||
+ node->op == op_Div ||
+ node->op == op_Mod ||
+ node->op == op_And ||
+ node->op == op_Or ||
+ node->op == op_Eor ||
+ node->op == op_Shl ||
+ node->op == op_Shr ||
+ node->op == op_Shrs ||
+ node->op == op_Rot ||
+ node->op == op_Cmp );
+
+ switch (get_irn_opcode (node)) {
+ case iro_Add : set_Add_left(node, left); break;
+ case iro_Sub : set_Sub_left(node, left); break;
+ case iro_Mul : set_Mul_left(node, left); break;
+ case iro_Quot : set_Quot_left(node, left); break;
+ case iro_DivMod: set_DivMod_left(node, left); break;
+ case iro_Div : set_Div_left(node, left); break;
+ case iro_Mod : set_Mod_left(node, left); break;
+ case iro_And : set_And_left(node, left); break;
+ case iro_Or : set_Or_left(node, left); break;
+ case iro_Eor : set_Eor_left(node, left); break;
+ case iro_Shl : set_Shl_left(node, left); break;
+ case iro_Shr : set_Shr_left(node, left); break;
+ case iro_Shrs : set_Shrs_left(node, left); break;
+ case iro_Rot : set_Rot_left(node, left); break;
+ case iro_Cmp : set_Cmp_left(node, left); break;
+ default: ;
+ };
+}
+
+INLINE ir_node *
+get_binop_right (ir_node *node) {
+ assert (node->op == op_Add ||
+ node->op == op_Sub ||
+ node->op == op_Mul ||
+ node->op == op_Quot ||
+ node->op == op_DivMod ||
+ node->op == op_Div ||
+ node->op == op_Mod ||
+ node->op == op_And ||
+ node->op == op_Or ||
+ node->op == op_Eor ||
+ node->op == op_Shl ||
+ node->op == op_Shr ||
+ node->op == op_Shrs ||
+ node->op == op_Rot ||
+ node->op == op_Cmp );
+
+ switch (get_irn_opcode (node)) {
+ case iro_Add : return get_Add_right(node); break;
+ case iro_Sub : return get_Sub_right(node); break;
+ case iro_Mul : return get_Mul_right(node); break;
+ case iro_Quot : return get_Quot_right(node); break;
+ case iro_DivMod: return get_DivMod_right(node); break;
+ case iro_Div : return get_Div_right(node); break;
+ case iro_Mod : return get_Mod_right(node); break;
+ case iro_And : return get_And_right(node); break;
+ case iro_Or : return get_Or_right(node); break;
+ case iro_Eor : return get_Eor_right(node); break;
+ case iro_Shl : return get_Shl_right(node); break;
+ case iro_Shr : return get_Shr_right(node); break;
+ case iro_Shrs : return get_Shrs_right(node); break;
+ case iro_Rot : return get_Rot_right(node); break;
+ case iro_Cmp : return get_Cmp_right(node); break;
+ default: return NULL;
+ };
+}
+
+INLINE void
+set_binop_right (ir_node *node, ir_node *right) {
+ assert (node->op == op_Add ||
+ node->op == op_Sub ||
+ node->op == op_Mul ||
+ node->op == op_Quot ||
+ node->op == op_DivMod ||
+ node->op == op_Div ||
+ node->op == op_Mod ||
+ node->op == op_And ||
+ node->op == op_Or ||
+ node->op == op_Eor ||
+ node->op == op_Shl ||
+ node->op == op_Shr ||
+ node->op == op_Shrs ||
+ node->op == op_Rot ||
+ node->op == op_Cmp );
+
+ switch (get_irn_opcode (node)) {
+ case iro_Add : set_Add_right(node, right); break;
+ case iro_Sub : set_Sub_right(node, right); break;
+ case iro_Mul : set_Mul_right(node, right); break;
+ case iro_Quot : set_Quot_right(node, right); break;
+ case iro_DivMod: set_DivMod_right(node, right); break;
+ case iro_Div : set_Div_right(node, right); break;
+ case iro_Mod : set_Mod_right(node, right); break;
+ case iro_And : set_And_right(node, right); break;
+ case iro_Or : set_Or_right(node, right); break;
+ case iro_Eor : set_Eor_right(node, right); break;
+ case iro_Shl : set_Shl_right(node, right); break;
+ case iro_Shr : set_Shr_right(node, right); break;
+ case iro_Shrs : set_Shrs_right(node, right); break;
+ case iro_Rot : set_Rot_right(node, right); break;
+ case iro_Cmp : set_Cmp_right(node, right); break;
+ default: ;
+ };
+}
+
+
+INLINE ir_node **