46 #error port to C++ first!
64 (rd->savintregcnt - rd->maxsavintreguse) +
65 (rd->savfltregcnt - rd->maxsavfltreguse) +
67 m->parseddesc->paramcount +
88 file = fopen(
"cacao.dot",
"w+");
89 fprintf(file,
"digraph G {\n");
125 fprintf(file,
"}\n");
156 if ((useen = *use_dep)) {
165 if (useen->
minum != minum) {
176 useen->
minum = minum;
191 }
else if ((defen = *define_dep)) {
202 defen->
minum = minum;
246 if ((defen = *define_dep)) {
306 lastmi = &sd->
mi[lastnode];
316 for (j = 0; j < 4; j++) {
321 #define EARLIEST_USE_CYCLE 3
327 for (i = lastnode - 1, mi = &sd->
mi[lastnode - 1]; i >= 0; i--, mi--) {
340 currentpath = en->
latency + priority;
342 if (currentpath > criticalpath)
343 criticalpath = currentpath;
357 for (j = 0; j < 4; j++) {
379 en->
minum = lastnode;
397 fprintf(file,
"subgraph cluster_%d {\n", bb);
398 fprintf(file,
"label = \"BB%d (nodes: %d, critical path: %d)\"\n", bb, sd->
micount, criticalpath);
400 for (i = 0, mi = sd->
mi; i < sd->micount; i++, mi++) {
406 fprintf(file,
"\"#%d.%d ", bb, i);
408 fprintf(file,
"\\np=%d\"", mi->
priority);
410 fprintf(file,
" -> ");
412 fprintf(file,
"\"#%d.%d ", bb, en->
minum);
416 fprintf(file,
" [ label = \"%d\" ]\n", en->
latency);
421 fprintf(file,
"\"#%d.%d ", bb, i);
423 fprintf(file,
"\\np=%d\"", mi->
priority);
425 fprintf(file,
" -> ");
427 fprintf(file,
"\"end %d\"", bb);
429 fprintf(file,
" [ label = \"%d\" ]\n", mi->
priority);
435 fprintf(file,
"}\n");
453 if ((depen = deps)) {
538 printf(
"critical path: %d\n", criticalpath);
540 for (i = 0, mi = sd->
mi; i < sd->micount; i++, mi++) {
547 for (j = 1; j <= 3; j++) {
567 printf(
"\n\nschedule start ---\n");
573 for (j = 0; j < 2; j++ ) {
605 preven->
next = aluen;
629 preven->
next = memen;
706 if (!aluen && !memen && !bren) {
717 printf(
"schedule end ---\n\n");
721 STATISTICS(count_schedule_leaders += leaders);
722 STATISTICS(count_schedule_max_leaders.max(leaders));
723 STATISTICS(count_schedule_critical_path += criticalpath);
void schedule_reset(scheduledata *sd, registerdata *rd)
#define SCHEDULE_UNIT_ALU
#define STATISTICS(x)
Wrapper for statistics only code.
u1 * disassinstr(u1 *code)
edgenode ** fltregs_use_dep
#define MSET(ptr, byte, type, num)
edgenode ** fltregs_define_dep
edgenode ** memory_use_dep
void schedule_close(scheduledata *sd)
void schedule_add_define_dep(scheduledata *sd, s1 opnum, edgenode **define_dep, edgenode **use_dep)
edgenode ** memory_define_dep
void schedule_add_use_dep(scheduledata *sd, s1 opnum, edgenode **define_dep, edgenode **use_dep)
#define SCHEDULE_UNIT_BRANCH
This file contains the statistics framework.
edgenode ** intregs_use_dep
#define STAT_REGISTER_GROUP_VAR(type, var, init, name, description, group)
Register an statistics variable and add it to a group.
#define STAT_REGISTER_GROUP(var, name, description)
Register a statistics group.
static void schedule_create_graph(scheduledata *sd, s4 criticalpath)
edgenode ** intregs_define_dep
void schedule_calc_priorities(scheduledata *sd)
void schedule_do_schedule(scheduledata *sd)
#define EARLIEST_USE_CYCLE
scheduledata * schedule_init(methodinfo *m, registerdata *rd)
block_count * blocks[HASH_SIZE]
static void schedule_add_deps_to_leaders(scheduledata *sd, edgenode *deps, s4 time)
#define SCHEDULE_UNIT_MEM