added function for convertion debug info
[libfirm] / ir / ir / irop.c
index 6903ab7..db8a14c 100644 (file)
@@ -35,6 +35,7 @@ ir_op *op_Block;       ir_op *get_op_Block     (void) { return op_Block;     }
 ir_op *op_Start;       ir_op *get_op_Start     (void) { return op_Start;     }
 ir_op *op_End;         ir_op *get_op_End       (void) { return op_End;       }
 ir_op *op_Jmp;         ir_op *get_op_Jmp       (void) { return op_Jmp;       }
+ir_op *op_IJmp;        ir_op *get_op_IJmp      (void) { return op_IJmp;      }
 ir_op *op_Cond;        ir_op *get_op_Cond      (void) { return op_Cond;      }
 ir_op *op_Return;      ir_op *get_op_Return    (void) { return op_Return;    }
 ir_op *op_Raise;       ir_op *get_op_Raise     (void) { return op_Raise;     }
@@ -119,12 +120,21 @@ call_copy_attr(const ir_node *old_node, ir_node *new_node) {
   remove_Call_callee_arr(new_node);
 }
 
+static void
+block_copy_attr(const ir_node *old_node, ir_node *new_node)
+{
+  default_copy_attr(old_node, new_node);
+  INIT_LIST_HEAD(&new_node->attr.block.succ_head);
+}
+
 /**
  * Sets the copy_attr operation for an ir_op
  */
 static ir_op *firm_set_default_copy_attr(ir_op *op) {
   if (op->code == iro_Call)
     op->copy_attr = call_copy_attr;
+  else if (op->code == iro_Block)
+    op->copy_attr = block_copy_attr;
   else
     op->copy_attr = default_copy_attr;
 
@@ -177,6 +187,7 @@ init_op(void)
   op_Start     = new_ir_op(iro_Start,     "Start",     op_pin_state_pinned, X,       oparity_zero,     -1, sizeof(start_attr));
   op_End       = new_ir_op(iro_End,       "End",       op_pin_state_pinned, X,       oparity_dynamic,  -1, 0);
   op_Jmp       = new_ir_op(iro_Jmp,       "Jmp",       op_pin_state_pinned, X,       oparity_zero,     -1, 0);
+  op_IJmp      = new_ir_op(iro_IJmp,      "IJmp",      op_pin_state_pinned, X,       oparity_unary,    -1, 0);
   op_Cond      = new_ir_op(iro_Cond,      "Cond",      op_pin_state_pinned, L|X|Y,   oparity_any,      -1, sizeof(cond_attr));
   op_Return    = new_ir_op(iro_Return,    "Return",    op_pin_state_pinned, L|X,     oparity_zero,     -1, 0);
   op_Raise     = new_ir_op(iro_Raise,     "Raise",     op_pin_state_pinned, L|X,     oparity_any,      -1, 0);
@@ -313,11 +324,11 @@ const char *get_op_name (const ir_op *op) {
 }
 
 opcode (get_op_code)(const ir_op *op){
-  return __get_op_code(op);
+  return _get_op_code(op);
 }
 
 ident *(get_op_ident)(const ir_op *op){
-  return __get_op_ident(op);
+  return _get_op_ident(op);
 }
 
 const char *get_op_pin_state_name(op_pin_state s) {
@@ -332,8 +343,8 @@ const char *get_op_pin_state_name(op_pin_state s) {
        return "<none>";
 }
 
-op_pin_state (get_op_pinned)(const ir_op *op){
-  return __get_op_pinned(op);
+op_pin_state (get_op_pinned)(const ir_op *op) {
+  return _get_op_pinned(op);
 }
 
 /* Sets op_pin_state_pinned in the opcode.  Setting it to floating has no effect