#include "lisc.h" #include char debug['Z'+1] = { ['P'] = 0, /* parsing */ ['C'] = 0, /* call lowering */ ['I'] = 0, /* instruction selection */ ['L'] = 0, /* liveness */ ['S'] = 0, /* spilling */ ['R'] = 0, /* reg. allocation */ }; void dumpts(Bits *b, Tmp *tmp, FILE *f) { int t; fprintf(f, "["); for (t=Tmp0; t 1 && strncmp(av[1], "-d", 2) == 0) { if (av[1][2] == 0) { if (ac <= 2) goto Usage; o = av[2]; f = av[3]; } else { o = &av[1][2]; f = av[2]; } for (; *o; o++) if (isalpha(*o)) { debug[toupper(*o)] = 1; dbg = 1; } } else f = av[1]; if (!f || strcmp(f, "-") == 0) inf = stdin; else { inf = fopen(f, "r"); if (!inf) { fprintf(stderr, "cannot open '%s'\n", f); goto Usage; } } fn = parse(inf); if (debug['P']) { fprintf(stderr, "\n> After parsing:\n"); printfn(fn, stderr); } isel(fn); fillrpo(fn); fillpreds(fn); filllive(fn); fillcost(fn); fillphi(fn); spill(fn); rega(fn); fillrpo(fn); assert(fn->rpo[0] == fn->start); for (n=0;; n++) if (n == fn->nblk-1) { fn->rpo[n]->link = 0; break; } else fn->rpo[n]->link = fn->rpo[n+1]; if (!dbg) emitfn(fn, stdout); else fprintf(stderr, "\n"); exit(0); Usage: fprintf(stderr, "usage: %s [-d PCILSR] {file.ssa, -}\n", av[0]); exit(1); }