ref: 8f38494ab79c5fa806b9860c3b0a47f9e5ecaf34
parent: 26d8da9a31adeabfa59d3a2ed06ad13206c94356
author: Ori Bernstein <[email protected]>
date: Wed Jun 13 20:35:04 EDT 2012
Print out the assembly CFG.
--- a/8/isel.c
+++ b/8/isel.c
@@ -689,9 +689,12 @@
if (fn->isglobl)
fprintf(fd, ".globl %s\n", fn->name);
fprintf(fd, "%s:\n", fn->name);
- for (j = 0; j < s->cfg->nbb; j++)
+ for (j = 0; j < s->cfg->nbb; j++) {
+ for (i = 0; i < s->bb[j]->nlbls; i++)
+ fprintf(fd, "%s:\n", s->bb[j]->lbls[i]);
for (i = 0; i < s->bb[j]->ni; i++)
iprintf(fd, s->bb[j]->il[i]);
+ }
}
static Asmbb *mkasmbb(Bb *bb)
@@ -726,7 +729,7 @@
is.curbb = is.bb[0];
prologue(&is, fn->stksz);
for (j = 0; j < fn->cfg->nbb; j++) {
- is.curbb = is.bb[j + 1];
+ is.curbb = is.bb[j];
for (i = 0; i < fn->cfg->bb[j]->nnl; i++) {
isel(&is, fn->cfg->bb[j]->nl[i]);
}
--- a/8/ra.c
+++ b/8/ra.c
@@ -161,7 +161,55 @@
}
}
+void asmdump(Asmbb **bbs, size_t nbb, FILE *fd)
+{
+ size_t i, j;
+ Asmbb *bb;
+ char *sep;
+
+ fprintf(fd, "ASM -------- \n");
+ for (j = 0; j < nbb; j++) {
+ bb = bbs[j];
+ fprintf(fd, "\n");
+ fprintf(fd, "Bb: %d labels=(", bb->id);
+ sep = "";
+ for (i = 0; i < bb->nlbls; i++) {;
+ fprintf(fd, "%s%s", bb->lbls[i], sep);
+ sep = ",";
+ }
+ fprintf(fd, ")\n");
+
+ /* in edges */
+ fprintf(fd, "In: ");
+ sep = "";
+ for (i = 0; i < bsmax(bb->pred); i++) {
+ if (bshas(bb->pred, i)) {
+ fprintf(fd, "%s%zd", sep, i);
+ sep = ",";
+ }
+ }
+ fprintf(fd, "\n");
+
+ /* out edges */
+ fprintf(fd, "Out: ");
+ sep = "";
+ for (i = 0; i < bsmax(bb->succ); i++) {
+ if (bshas(bb->succ, i)) {
+ fprintf(fd, "%s%zd", sep, i);
+ sep = ",";
+ }
+ }
+ fprintf(fd, "\n");
+
+ for (i = 0; i < bb->ni; i++)
+ iprintf(fd, bb->il[i]);
+ }
+ fprintf(fd, "ENDASM -------- \n");
+}
+
void regalloc(Isel *s)
{
liveness(s);
+ if (debug)
+ asmdump(s->bb, s->nbb, stdout);
}
--- a/opt/cfg.c
+++ b/opt/cfg.c
@@ -86,8 +86,8 @@
post = mkbb(cfg);
bsput(pre->succ, cfg->bb[1]->id);
bsput(cfg->bb[1]->pred, pre->id);
- bsput(post->succ, cfg->bb[cfg->nbb - 2]->id);
- bsput(cfg->bb[cfg->nbb - 2]->pred, post->id);
+ bsput(cfg->bb[cfg->nbb - 2]->succ, post->id);
+ bsput(post->pred, cfg->bb[cfg->nbb - 2]->id);
for (i = 0; i < cfg->nfixjmp; i++) {
bb = cfg->fixblk[i];
switch (exprop(cfg->fixjmp[i])) {
@@ -120,6 +120,7 @@
}
return cfg;
}
+
void dumpcfg(Cfg *cfg, FILE *fd)
{
size_t i, j;