+
+/* Sets the generic function pointer of all opcodes to NULL */
+void clear_irp_opcodes_generic_func(void)
+{
+ int i;
+
+ for (i = get_irp_n_opcodes() - 1; i >= 0; --i) {
+ ir_op *op = get_irp_opcode(i);
+ op->ops.generic = (op_func)NULL;
+ }
+}
+
+/*- File name / executable name or the like -*/
+void set_irp_prog_name(ident *name)
+{
+ irp->name = name;
+}
+int irp_prog_name_is_set(void)
+{
+ return irp->name != new_id_from_str(INITAL_PROG_NAME);
+}
+ident *get_irp_ident(void)
+{
+ return irp->name;
+}
+const char *get_irp_name(void)
+{
+ return get_id_str(irp->name);
+}
+
+
+ir_graph *(get_const_code_irg)(void)
+{
+ 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;
+}
+
+struct pass_t {
+ ir_prog_pass_t pass;
+ irg_phase_state state;
+};
+
+/**
+ * Wrapper for setting the state of a whole ir_prog.
+ */
+static int set_irp_phase_state_wrapper(ir_prog *irp, void *context)
+{
+ struct pass_t *pass = context;
+ irg_phase_state state = pass->state;
+ int i;
+
+ (void)irp;
+
+ /* set the phase of all graphs */
+ for (i = get_irp_n_irgs() - 1; i >= 0; --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;
+}
+
+irg_outs_state get_irp_ip_outs_state(void)
+{
+ return irp->outs_state;
+}
+
+void set_irp_ip_outs_inconsistent(void)
+{
+ irp->outs_state = outs_inconsistent;
+}
+
+void set_irp_ip_outedges(ir_node ** ip_outedges)
+{
+ irp->ip_outedges = ip_outedges;
+}
+
+ir_node** get_irp_ip_outedges(void)
+{
+ return irp->ip_outedges;
+}
+
+irg_callee_info_state get_irp_callee_info_state(void)
+{
+ return irp->callee_info_state;
+}
+
+void set_irp_callee_info_state(irg_callee_info_state s)
+{
+ irp->callee_info_state = s;
+}
+
+/* Returns a new, unique exception region number. */
+ir_exc_region_t (get_irp_next_region_nr)(void)
+{
+ return _get_irp_next_region_nr();
+}
+
+/* Returns a new, unique label number. */
+ir_label_t (get_irp_next_label_nr)(void)
+{
+ return _get_irp_next_label_nr();
+}
+
+/* Add a new global asm include */
+void add_irp_asm(ident *asm_string)
+{
+ ARR_APP1(ident *, irp->global_asms, asm_string);
+}
+
+/* Return the number of global asm includes. */
+int get_irp_n_asms(void)
+{
+ return ARR_LEN(irp->global_asms);
+}
+
+/* Return the global asm include at position pos. */
+ident *get_irp_asm(int pos)
+{
+ assert(0 <= pos && pos < get_irp_n_asms());
+ return irp->global_asms[pos];
+}
+
+#ifndef NDEBUG
+void irp_reserve_resources(ir_prog *irp, ir_resources_t resources)
+{
+ assert((resources & ~IR_RESOURCE_GLOBAL_MASK) == 0);
+ assert((irp->reserved_resources & resources) == 0);
+ irp->reserved_resources |= resources;
+}
+
+void irp_free_resources(ir_prog *irp, ir_resources_t resources)
+{
+ assert((irp->reserved_resources & resources) == resources);
+ irp->reserved_resources &= ~resources;
+}
+
+ir_resources_t irp_resources_reserved(const ir_prog *irp)
+{
+ return irp->reserved_resources;
+}
+#endif