ref: 136c7085039d88051aa71ad041bd749e69dadbfd
parent: 4fc4ebc1ca4f375c6f9b1d8babb53e03da51214f
author: Ori Bernstein <[email protected]>
date: Fri Jun 15 11:42:57 EDT 2012
Track lines.
--- a/8/isel.c
+++ b/8/isel.c
@@ -529,16 +529,6 @@
blit(s, a, b, args[2]->expr.args[0]->lit.intval);
r = b;
break;
- case Oslbase:
- a = selexpr(s, args[0]);
- a = inr(s, a);
- r = locmem(0, a, Rnone, ModeL);
- break;
- case Osllen:
- a = selexpr(s, args[0]);
- a = inr(s, a);
- r = locmem(4, a, Rnone, ModeL);
- break;
/* These operators should never show up in the reduced trees,
* since they should have been replaced with more primitive
@@ -548,6 +538,7 @@
case Osubeq: case Omuleq: case Odiveq: case Omodeq: case Oboreq:
case Obandeq: case Obxoreq: case Obsleq: case Obsreq: case Omemb:
case Oslice: case Oidx: case Osize: case Numops:
+ case Oslbase: case Osllen:
dump(n, stdout);
die("Should not see %s in isel", opstr(exprop(n)));
break;
@@ -729,6 +720,7 @@
{
struct Isel is = {0,};
size_t i, j;
+ char buf[128];
is.locs = fn->locs;
is.globls = globls;
@@ -744,7 +736,8 @@
is.curbb = is.bb[j];
for (i = 0; i < fn->cfg->bb[j]->nnl; i++) {
isel(&is, fn->cfg->bb[j]->nl[i]);
- g(&is, Ilbl, locstrlbl("#_"), NULL);
+ snprintf(buf, sizeof buf, "# bbidx = %zd, line=%d", i, fn->cfg->bb[j]->nl[i]->line);
+ g(&is, Ilbl, locstrlbl(buf), NULL);
}
}
is.curbb = is.bb[is.nbb - 1];
--- a/8/reduce.c
+++ b/8/reduce.c
@@ -171,11 +171,11 @@
assert(e->type == Nexpr);
snprintf(buf, 128, ".t%d", nexttmp++);
- n = mkname(-1, buf);
- s = mksym(-1, n, e->expr.type);
- t = mkdecl(-1, s);
+ n = mkname(e->line, buf);
+ s = mksym(e->line, n, e->expr.type);
+ t = mkdecl(e->line, s);
declarelocal(simp, t);
- r = mkexpr(-1, Ovar, t, NULL);
+ r = mkexpr(e->line, Ovar, t, NULL);
r->expr.did = s->id;
return r;
}
@@ -182,12 +182,12 @@
static void jmp(Simp *s, Node *lbl)
{
- append(s, mkexpr(-1, Ojmp, lbl, NULL));
+ append(s, mkexpr(lbl->line, Ojmp, lbl, NULL));
}
static Node *store(Node *dst, Node *src)
{
- return mkexpr(-1, Ostor, dst, src, NULL);
+ return mkexpr(dst->line, Ostor, dst, src, NULL);
}
static void cjmp(Simp *s, Node *cond, Node *iftrue, Node *iffalse)
@@ -194,7 +194,7 @@
{
Node *jmp;
- jmp = mkexpr(-1, Ocjmp, cond, iftrue, iffalse, NULL);
+ jmp = mkexpr(cond->line, Ocjmp, cond, iftrue, iffalse, NULL);
append(s, jmp);
}
@@ -286,11 +286,11 @@
args = n->expr.args;
if (n->expr.type->type != Typtr)
- t = mkexpr(-1, Oaddr, args[0], NULL);
+ t = mkexpr(n->line, Oaddr, args[0], NULL);
else
t = args[0];
- u = mkintlit(-1, offsetof(args[0], args[1]));
- r = mkexpr(-1, Oadd, t, u, NULL);
+ u = mkintlit(n->line, offsetof(args[0], args[1]));
+ r = mkexpr(n->line, Oadd, t, u, NULL);
return r;
}
@@ -304,15 +304,15 @@
assert(exprop(n) == Oidx);
args = n->expr.args;
if (args[0]->expr.type->type == Tyarray)
- t = mkexpr(-1, Oaddr, args[0], NULL);
+ t = mkexpr(n->line, Oaddr, args[0], NULL);
else if (args[0]->expr.type->type == Tyslice)
- t = mkexpr(-1, Oload, mkexpr(1, Oaddr, args[0], NULL), NULL);
+ t = mkexpr(n->line, Oload, mkexpr(n->line, Oaddr, args[0], NULL), NULL);
else
die("Can't index type %s\n", tystr(n->expr.type));
u = rval(s, args[1]);
sz = size(n);
- v = mkexpr(-1, Omul, u, mkintlit(-1, sz), NULL);
- r = mkexpr(-1, Oadd, t, v, NULL);
+ v = mkexpr(n->line, Omul, u, mkintlit(n->line, sz), NULL);
+ r = mkexpr(n->line, Oadd, t, v, NULL);
return r;
}
@@ -325,14 +325,14 @@
u = NULL;
switch (n->expr.type->type) {
case Typtr: u = n;
- case Tyarray: u = mkexpr(-1, Oaddr, t, NULL); break;
- case Tyslice: u = mkexpr(-1, Oslbase, t, NULL); break;
+ case Tyarray: u = mkexpr(n->line, Oaddr, t, NULL); break;
+ case Tyslice: u = mkexpr(n->line, Oslbase, t, NULL); break;
default: die("Unslicable type %s", tystr(n->expr.type));
}
/* safe: all types we allow here have a sub[0] that we want to grab */
sz = tysize(n->expr.type->sub[0]);
- v = mkexpr(-1, Omul, off, mkintlit(-1, sz), NULL);
- return mkexpr(-1, Oadd, u, v, NULL);
+ v = mkexpr(n->line, Omul, off, mkintlit(n->line, sz), NULL);
+ return mkexpr(n->line, Oadd, u, v, NULL);
}
Node *lval(Simp *s, Node *n)
@@ -380,11 +380,11 @@
t = temp(s, n);
/* *(&slice) = (void*)base + off*sz */
base = slicebase(s, n->expr.args[0], n->expr.args[1]);
- len = mkexpr(-1, Osub, n->expr.args[2], n->expr.args[1], NULL);
- stbase = mkexpr(-1, Ostor, mkexpr(-1, Oaddr, t, NULL), base, NULL);
+ len = mkexpr(n->line, Osub, n->expr.args[2], n->expr.args[1], NULL);
+ stbase = mkexpr(n->line, Ostor, mkexpr(n->line, Oaddr, t, NULL), base, NULL);
/* *(&slice + ptrsz) = len */
- sz = mkexpr(-1, Oadd, mkexpr(-1, Oaddr, t, NULL), ptrsz, NULL);
- stlen = mkexpr(-1, Ostor, sz, len, NULL);
+ sz = mkexpr(n->line, Oadd, mkexpr(n->line, Oaddr, t, NULL), ptrsz, NULL);
+ stlen = mkexpr(n->line, Ostor, sz, len, NULL);
append(s, stbase);
append(s, stlen);
return t;
@@ -420,7 +420,7 @@
simplazy(s, n, r);
break;
case Osize:
- r = mkintlit(-1, size(args[0]));
+ r = mkintlit(n->line, size(args[0]));
break;
case Oslice:
r = lowerslice(s, n);
@@ -427,11 +427,11 @@
break;
case Oidx:
t = idxaddr(s, n);
- r = mkexpr(-1, Oload, t, NULL);
+ r = mkexpr(n->line, Oload, t, NULL);
break;
case Omemb:
t = membaddr(s, n);
- r = mkexpr(-1, Oload, t, NULL);
+ r = mkexpr(n->line, Oload, t, NULL);
break;
/* fused ops:
@@ -443,8 +443,8 @@
assert(fusedmap[exprop(n)] != Obad);
u = rval(s, args[0]);
v = rval(s, args[1]);
- v = mkexpr(-1, fusedmap[exprop(n)], u, v, NULL);
- r = mkexpr(-1, Ostor, u, v, NULL);
+ v = mkexpr(n->line, fusedmap[exprop(n)], u, v, NULL);
+ r = mkexpr(n->line, Ostor, u, v, NULL);
break;
/* ++expr(x)
@@ -452,14 +452,14 @@
* expr(x) */
case Opreinc:
t = lval(s, args[0]);
- v = mkexpr(-1, Oadd, one, t, NULL);
- r = mkexpr(-1, Ostor, t, v, NULL);
+ v = mkexpr(n->line, Oadd, one, t, NULL);
+ r = mkexpr(n->line, Ostor, t, v, NULL);
lappend(&s->incqueue, &s->nqueue, t);
break;
case Opredec:
t = lval(s, args[0]);
- v = mkexpr(-1, Osub, one, t, NULL);
- r = mkexpr(-1, Ostor, t, v, NULL);
+ v = mkexpr(n->line, Osub, one, t, NULL);
+ r = mkexpr(n->line, Ostor, t, v, NULL);
lappend(&s->incqueue, &s->nqueue, t);
break;
@@ -470,14 +470,14 @@
*/
case Opostinc:
r = lval(s, args[0]);
- v = mkexpr(-1, Oadd, one, r, NULL);
- t = mkexpr(-1, Ostor, r, v, NULL);
+ v = mkexpr(n->line, Oadd, one, r, NULL);
+ t = mkexpr(n->line, Ostor, r, v, NULL);
lappend(&s->incqueue, &s->nqueue, t);
break;
case Opostdec:
r = lval(s, args[0]);
- v = mkexpr(-1, Osub, one, args[0], NULL);
- t = mkexpr(-1, Ostor, r, v, NULL);
+ v = mkexpr(n->line, Osub, one, args[0], NULL);
+ t = mkexpr(n->line, Ostor, r, v, NULL);
lappend(&s->incqueue, &s->nqueue, t);
break;
case Olit: case Ovar:
@@ -498,12 +498,12 @@
t = lval(s, args[0]);
u = rval(s, args[1]);
if (size(n) > 4) {
- t = mkexpr(-1, Oaddr, t, NULL);
- u = mkexpr(-1, Oaddr, u, NULL);
- v = mkintlit(-1, size(n));
- r = mkexpr(-1, Oblit, t, u, v, NULL);
+ t = mkexpr(n->line, Oaddr, t, NULL);
+ u = mkexpr(n->line, Oaddr, u, NULL);
+ v = mkintlit(n->line, size(n));
+ r = mkexpr(n->line, Oblit, t, u, v, NULL);
} else {
- r = mkexpr(-1, Ostor, t, u, NULL);
+ r = mkexpr(n->line, Ostor, t, u, NULL);
}
break;
default: