+ ]
+ pinned = "yes"
+ attr_struct = "alloc_attr"
+ d_post = '''
+ firm_alloc_frag_arr(res, op_Alloc, &res->attr.alloc.exc.frag_arr);
+ '''
+
+class Anchor(Op):
+ mode = "mode_ANY"
+ arity = "variable"
+ flags = [ "dump_noblock" ]
+ pinned = "yes"
+ knownBlock = True
+ singleton = True
+
+class And(Binop):
+ flags = [ "commutative" ]
+
+class ASM(Op):
+ mode = "mode_T"
+ arity = "variable"
+ flags = [ "keep", "uses_memory" ]
+ attr_struct = "asm_attr"
+ pinned = "memory"
+ pinned_init = "op_pin_state_pinned"
+ attrs = [
+ dict(
+ name = "input_constraints",
+ type = "ir_asm_constraint*",
+ ),
+ dict(
+ name = "n_output_constraints",
+ type = "int",
+ ),
+ dict(
+ name = "output_constraints",
+ type = "ir_asm_constraint*",
+ ),
+ dict(
+ name = "n_clobbers",
+ type = "int",
+ ),
+ dict(
+ name = "clobbers",
+ type = "ident**",
+ ),
+ dict(
+ name = "text",
+ type = "ident*",
+ ),
+ ]
+ java_noconstr = True
+
+class Bad(Op):
+ mode = "mode_Bad"
+ flags = [ "cfopcode", "fragile", "start_block", "dump_noblock" ]
+ pinned = "yes"
+ knownBlock = True
+ singleton = True
+ attr_struct = "irg_attr"
+ init = '''
+ res->attr.irg.irg = irg;
+ '''
+
+class Block(Op):
+ mode = "mode_BB"
+ knownBlock = True
+ block = "NULL"
+ pinned = "yes"
+ optimize = False
+ arity = "variable"
+ flags = [ "labeled" ]
+ attr_struct = "block_attr"
+ java_noconstr = True
+
+ init = '''
+ /* macroblock header */
+ res->in[0] = res;
+
+ res->attr.block.is_dead = 0;
+ res->attr.block.is_mb_head = 1;
+ res->attr.block.irg.irg = irg;
+ res->attr.block.backedge = new_backedge_arr(irg->obst, arity);
+ res->attr.block.in_cg = NULL;
+ res->attr.block.cg_backedge = NULL;
+ res->attr.block.extblk = NULL;
+ res->attr.block.mb_depth = 0;
+ res->attr.block.entity = NULL;
+
+ set_Block_matured(res, 1);
+ set_Block_block_visited(res, 0);
+ '''
+
+ d_pre = '''
+ int i;
+ int has_unknown = 0;
+ '''
+
+ d_post = '''
+ /* Create and initialize array for Phi-node construction. */
+ if (get_irg_phase_state(current_ir_graph) == phase_building) {
+ res->attr.block.graph_arr = NEW_ARR_D(ir_node *, current_ir_graph->obst,
+ current_ir_graph->n_loc);
+ memset(res->attr.block.graph_arr, 0, sizeof(ir_node *)*current_ir_graph->n_loc);
+ }
+
+ for (i = arity - 1; i >= 0; i--)
+ if (is_Unknown(in[i])) {
+ has_unknown = 1;
+ break;
+ }
+
+ if (!has_unknown) res = optimize_node(res);
+
+ current_ir_graph->current_block = res;
+
+ IRN_VRFY_IRG(res, current_ir_graph);
+ '''
+