ref: 3eebcf6c31e23b12d11332f3b424bfe91dc66dcc
parent: 25be8b19d826b8faf73275e0294f661f1a4c32fe
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Feb 9 14:18:06 EST 2013
Split out printing basic blocks in writeasm() It's easier to call the function from the debugger this way.
--- a/6/isel.c
+++ b/6/isel.c
@@ -819,19 +819,25 @@
g(s, Iret, NULL);
}
+static void writebb(FILE *fd, Asmbb *bb)
+{
+ size_t i;
+
+ for (i = 0; i < bb->nlbls; i++)
+ fprintf(fd, "%s:\n", bb->lbls[i]);
+ for (i = 0; i < bb->ni; i++)
+ iprintf(fd, bb->il[i]);
+}
+
static void writeasm(FILE *fd, Isel *s, Func *fn)
{
- size_t i, j;
+ size_t i;
if (fn->isexport || !strcmp(fn->name, Symprefix "main"))
fprintf(fd, ".globl %s\n", fn->name);
fprintf(fd, "%s:\n", fn->name);
- 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]);
- }
+ for (i = 0; i < s->nbb; i++)
+ writebb(fd, s->bb[i]);
}
static Asmbb *mkasmbb(Bb *bb)
@@ -959,6 +965,7 @@
epilogue(&is);
regalloc(&is);
+ peep(&is);
if (debugopt['i'])
writeasm(stdout, &is, fn);
writeasm(fd, &is, fn);