res->kind = k_ir_prog;
res->graphs = NEW_ARR_F(ir_graph *, 0);
res->types = NEW_ARR_F(ir_type *, 0);
- res->modes = NEW_ARR_F(ir_mode *, 0);
res->global_asms = NEW_ARR_F(ident *, 0);
res->last_label_nr = 1; /* 0 is reserved as non-label */
res->max_irg_idx = 0;
res->max_node_nr = 0;
#ifndef NDEBUG
- res->reserved_resources = IR_RESOURCE_NONE;
+ res->reserved_resources = IRP_RESOURCE_NONE;
#endif
return res;
set_class_final(irp->segment_types[IR_SEGMENT_GLOBAL], 1);
irp->const_code_irg = new_const_code_irg();
- irp->phase_state = phase_building;
irp->class_cast_state = ir_class_casts_transitive;
irp->globals_entity_usage_state = ir_entity_usage_not_computed;
#undef IDENT
void free_ir_prog(void)
{
+ if (irp == NULL)
+ return;
+
size_t i;
/* must iterate backwards here */
for (i = get_irp_n_irgs(); i > 0;)
free_ir_graph(get_irp_irg(--i));
- free_type_entities(get_glob_type());
- /* must iterate backwards here */
+ /* free entities first to avoid entity types being destroyed before
+ * the entities using them */
for (i = get_irp_n_types(); i > 0;)
free_type_entities(get_irp_type(--i));
DEL_ARR_F(irp->graphs);
DEL_ARR_F(irp->types);
- DEL_ARR_F(irp->modes);
DEL_ARR_F(irp->global_asms);
ARR_APP1(ir_graph *, irp->graphs, irg);
}
-void remove_irp_irg_from_list(ir_graph *irg)
+void remove_irp_irg(ir_graph *irg)
{
size_t i, l;
}
}
-void remove_irp_irg(ir_graph *irg)
-{
- free_ir_graph(irg);
- remove_irp_irg_from_list(irg);
-}
-
size_t (get_irp_n_irgs)(void)
{
return get_irp_n_irgs_();
irp->types[pos] = typ;
}
-size_t (get_irp_n_modes)(void)
-{
- return get_irp_n_modes_();
-}
-
-ir_mode *(get_irp_mode)(size_t pos)
-{
- return get_irp_mode_(pos);
-}
-
-void add_irp_mode(ir_mode *mode)
-{
- assert(mode != NULL);
- assert(irp);
- ARR_APP1(ir_mode *, irp->modes, mode);
-}
-
void set_irp_prog_name(ident *name)
{
irp->name = name;
return get_const_code_irg_();
}
-irg_phase_state get_irp_phase_state(void)
-{
- return irp->phase_state;
-}
-
-void set_irp_phase_state(irg_phase_state s)
-{
- irp->phase_state = s;
-}
-
-typedef struct pass_t {
- ir_prog_pass_t pass;
- irg_phase_state state;
-} pass_t;
-
-/**
- * Wrapper for setting the state of a whole ir_prog.
- */
-static int set_irp_phase_state_wrapper(ir_prog *irp, void *context)
-{
- pass_t *pass = (pass_t *)context;
- irg_phase_state state = pass->state;
- size_t i, n;
-
- (void)irp;
-
- /* set the phase of all graphs */
- for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
- set_irg_phase_state(get_irp_irg(i), state);
-
- /* set the irp phase */
- set_irp_phase_state(state);
-
- return 0;
-}
-
-ir_prog_pass_t *set_irp_phase_state_pass(const char *name, irg_phase_state state)
-{
- struct pass_t *pass = XMALLOCZ(struct pass_t);
-
- def_prog_pass_constructor(
- &pass->pass, name ? name : "set_irp_phase", set_irp_phase_state_wrapper);
- pass->state = state;
-
- /* no dump/verify */
- pass->pass.verify_irprog = ir_prog_no_verify;
- pass->pass.dump_irprog = ir_prog_no_dump;
-
- return &pass->pass;
-}
-
void set_irp_ip_outedges(ir_node ** ip_outedges)
{
irp->ip_outedges = ip_outedges;
return irp->global_asms[pos];
}
-int (get_irp_optimization_dumps)(void)
-{
- return get_irp_optimization_dumps_();
-}
-
-void (enable_irp_optimization_dumps)(void)
-{
- enable_irp_optimization_dumps_();
-}
-
#ifndef NDEBUG
void irp_reserve_resources(ir_prog *irp, irp_resources_t resources)
{