diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-07-15 18:01:38 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-15 23:01:28 -0400 |
commit | d7548fa5d7c6ab4adaff87619e9801d0bdb07b55 (patch) | |
tree | 1720934ebd2ac97584a55f3377126d3eab5d6ad8 /lisc/parse.c | |
parent | 58bd1de2647d8a7acd0e8edb4ec2bfb9f99799a6 (diff) | |
download | roux-d7548fa5d7c6ab4adaff87619e9801d0bdb07b55.tar.gz |
add rpo test and some liveness code
Diffstat (limited to 'lisc/parse.c')
-rw-r--r-- | lisc/parse.c | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/lisc/parse.c b/lisc/parse.c index 3c00144..d8e2095 100644 --- a/lisc/parse.c +++ b/lisc/parse.c @@ -534,11 +534,21 @@ printfn(Fn *fn, FILE *f) } +static void +dumprset(Bits *b, Fn *fn) +{ + int t; + + for (t=Tmp0; t<fn->ntmp; t++) + if (BSET(*b, t)) + fprintf(stderr, " %s", fn->sym[t].name); + fprintf(stderr, "\n"); +} + int main(int ac, char *av[]) { int opt; - int tx, ntmp; Fn *fn; fn = parsefn(stdin); @@ -548,7 +558,9 @@ main(int ac, char *av[]) opt = av[1][1]; switch (opt) { - case 'f': + case 'f': { + int tx, ntmp; + fprintf(stderr, "[test ssafix:"); fillpreds(fn); for (ntmp=fn->ntmp, tx=Tmp0; tx<ntmp; tx++) { @@ -558,6 +570,38 @@ main(int ac, char *av[]) fprintf(stderr, "]\n"); break; } + case 'r': { + int n; + + fprintf(stderr, "[test rpo]\n"); + 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]; + break; + } + case 'l': { + Blk *b; + + fprintf(stderr, "[test liveness]\n"); + fillrpo(fn); + filllive(fn); + for (b=fn->start; b; b=b->link) { + fprintf(stderr, "> Block %s\n", b->name); + fprintf(stderr, "\tlive in :"); + dumprset(&b->in, fn); + fprintf(stderr, "\tlive out:"); + dumprset(&b->out, fn); + } + break; + } + default: + break; + } printfn(fn, stdout); return 0; |