3 * @author Sebastian Hack
21 #include "besched_t.h"
22 #include "belistsched.h"
24 #include "bephicongr_t.h"
26 #include "bechordal.h"
31 typedef struct _be_graph_info_t {
32 bitset_t *applied_phases;
35 static size_t be_info_offset = 0;
37 #define get_irg_be_info(irg) get_irg_data(irg, be_graph_info_t, be_info_offset)
39 static int phase_ids = 1;
40 static struct obstack obst;
42 int phase_register(phase_t *phase)
44 phase->id = phase_ids;
48 void phase_applied(const ir_graph *irg, const phase_t *phase)
50 be_graph_info_t *info = get_irg_be_info(irg);
52 if(!info->applied_phases)
53 info->applied_phases = bitset_obstack_alloc(&obst, N_PHASES);
55 bitset_set(info->applied_phases, phase->id);
58 int phase_depends_on(const ir_graph *irg, const phase_t *phase, int n, ...)
65 const be_graph_info_t *info = get_irg_be_info(irg);
66 const bitset_t *applied_phases = info->applied_phases;
70 for(i = 0; i < n; ++i) {
71 const phase_t *dep_phase = va_arg(args, const phase_t *);
73 if(!applied_phases || !bitset_is_set(applied_phases, dep_phase->id)) {
75 fprintf(stderr, "phase dependency unfulfilled: \"%s\" depends on \"%s\"\n",
76 phase->name, dep_phase->name);
82 assert(errors > 0 && "There were phase dependency errors");
91 be_info_offset = register_additional_graph_data(sizeof(be_graph_info_t));
97 be_phi_congr_class_init();
100 extern void be_ra_chordal(ir_graph *irg);
102 static void be_main_loop(void)
106 for(i = 0, n = get_irp_n_irgs(); i < n; ++i) {
107 ir_graph *irg = get_irp_irg(i);
110 list_sched(irg, trivial_selector, NULL);
113 be_phi_congr_classes(irg);
116 dump_allocated_irg(irg);
119 be_ra_chordal_done(irg);
120 be_numbering_done(irg);
124 void be_main(int argc, const char *argv[])