- more irp_resource_reserved()
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 27 Oct 2008 21:47:50 +0000 (21:47 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 27 Oct 2008 21:47:50 +0000 (21:47 +0000)
[r23246]

ir/ir/irgraph.c
ir/opt/opt_frame.c
ir/opt/opt_inline.c
ir/tr/type.c

index cfae624..45b2bdc 100644 (file)
@@ -488,6 +488,7 @@ ir_graph *create_irg_copy(ir_graph *irg) {
        res->value_table = new_identities();
 
        /* clone the frame type here for safety */
+       irp_reserve_resources(irp, IR_RESOURCE_ENTITY_LINK);
        res->frame_type  = clone_frame_type(irg->frame_type);
 
        res->phase_state = irg->phase_state;
@@ -520,6 +521,7 @@ ir_graph *create_irg_copy(ir_graph *irg) {
        res->estimated_node_count = irg->estimated_node_count;
 
        ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
+       irp_free_resources(irp, IR_RESOURCE_ENTITY_LINK);
 
        return res;
 }
index 9ef1abd..1212540 100644 (file)
@@ -47,6 +47,8 @@ void opt_frame_irg(ir_graph *irg) {
        if (n <= 0)
                return;
 
+       irp_reserve_resources(irp, IR_RESOURCE_ENTITY_LINK);
+
        /* clear all entity links */
        for (i = n - 1; i >= 0; --i) {
                ent = get_class_member(frame_tp, i);
@@ -96,4 +98,5 @@ void opt_frame_irg(ir_graph *irg) {
                /* we changed the frame type, it's layout should be redefined */
                set_type_state(frame_tp, layout_undefined);
        }
+       irp_free_resources(irp, IR_RESOURCE_ENTITY_LINK);
 }
index 165cff2..bf36024 100644 (file)
@@ -1017,6 +1017,7 @@ int inline_method(ir_node *call, ir_graph *called_graph) {
 
        /* -- Replicate local entities of the called_graph -- */
        /* copy the entities. */
+       irp_reserve_resources(irp, IR_RESOURCE_ENTITY_LINK);
        called_frame = get_irg_frame_type(called_graph);
        curr_frame   = get_irg_frame_type(irg);
        for (i = 0, n = get_class_n_members(called_frame); i < n; ++i) {
@@ -1037,6 +1038,8 @@ int inline_method(ir_node *call, ir_graph *called_graph) {
        irg_walk(get_irg_end(called_graph), copy_node_inline, copy_preds_inline,
                 get_irg_frame_type(called_graph));
 
+       irp_free_resources(irp, IR_RESOURCE_ENTITY_LINK);
+
        /* Repair called_graph */
        set_irg_visited(called_graph, get_irg_visited(irg));
        set_irg_block_visited(called_graph, get_irg_block_visited(irg));
index 869bc79..d07a220 100644 (file)
@@ -2067,6 +2067,8 @@ ir_type *clone_frame_type(ir_type *type) {
        int     i, n;
 
        assert(is_frame_type(type));
+       /* the entity link resource should be allocated if this function is called */
+       assert(irp_resources_reserved(irp) & IR_RESOURCE_ENTITY_LINK);
 
        res = new_type_frame(type->name);
        for (i = 0, n = get_class_n_members(type); i < n; ++i) {