idup(Ins **, Ins *, ulong) -> idup(Blk *, Ins *, ulong)

Always used this way and factors setting b->nins.
Makes b->ins vector contract more obvious.
This commit is contained in:
Roland Paterson-Jones 2024-10-22 16:07:43 +02:00 committed by Quentin Carbonneaux
parent ca928f6f8d
commit 434cf5fdc4
13 changed files with 24 additions and 39 deletions

2
all.h
View File

@ -478,7 +478,7 @@ int isreg(Ref);
int iscmp(int, int *, int *); int iscmp(int, int *, int *);
void emit(int, int, Ref, Ref, Ref); void emit(int, int, Ref, Ref, Ref);
void emiti(Ins); void emiti(Ins);
void idup(Ins **, Ins *, ulong); void idup(Blk *, Ins *, ulong);
Ins *icpy(Ins *, Ins *, ulong); Ins *icpy(Ins *, Ins *, ulong);
int cmpop(int); int cmpop(int);
int cmpneg(int); int cmpneg(int);

View File

@ -828,8 +828,7 @@ amd64_isel(Fn *fn)
seljmp(b, fn); seljmp(b, fn);
for (i=&b->ins[b->nins]; i!=b->ins;) for (i=&b->ins[b->nins]; i!=b->ins;)
sel(*--i, num, fn); sel(*--i, num, fn);
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} }
free(num); free(num);

View File

@ -508,8 +508,7 @@ split(Fn *fn, Blk *b)
++fn->nblk; ++fn->nblk;
bn = newblk(); bn = newblk();
bn->nins = &insb[NIns] - curi; idup(bn, curi, &insb[NIns]-curi);
idup(&bn->ins, curi, bn->nins);
curi = &insb[NIns]; curi = &insb[NIns];
bn->visit = ++b->visit; bn->visit = ++b->visit;
strf(bn->name, "%s.%d", b->name, b->visit); strf(bn->name, "%s.%d", b->name, b->visit);
@ -711,8 +710,7 @@ amd64_sysv_abi(Fn *fn)
if (b == fn->start) if (b == fn->start)
for (; ral; ral=ral->link) for (; ral; ral=ral->link)
emiti(ral->i); emiti(ral->i);
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} while (b != fn->start); } while (b != fn->start);
if (debug['A']) { if (debug['A']) {

View File

@ -545,8 +545,7 @@ split(Fn *fn, Blk *b)
++fn->nblk; ++fn->nblk;
bn = newblk(); bn = newblk();
bn->nins = &insb[NIns] - curi; idup(bn, curi, &insb[NIns]-curi);
idup(&bn->ins, curi, bn->nins);
curi = &insb[NIns]; curi = &insb[NIns];
bn->visit = ++b->visit; bn->visit = ++b->visit;
strf(bn->name, "%s.%d", b->name, b->visit); strf(bn->name, "%s.%d", b->name, b->visit);
@ -791,8 +790,7 @@ arm64_abi(Fn *fn)
if (b == fn->start) if (b == fn->start)
for (; il; il=il->link) for (; il; il=il->link)
emiti(il->i); emiti(il->i);
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} while (b != fn->start); } while (b != fn->start);
if (debug['A']) { if (debug['A']) {
@ -843,8 +841,7 @@ apple_extsb(Fn *fn)
emit(op, Kw, i->to, i->arg[0], R); emit(op, Kw, i->to, i->arg[0], R);
} }
} }
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} }
if (debug['A']) { if (debug['A']) {

View File

@ -306,8 +306,7 @@ arm64_isel(Fn *fn)
seljmp(b, fn); seljmp(b, fn);
for (i=&b->ins[b->nins]; i!=b->ins;) for (i=&b->ins[b->nins]; i!=b->ins;)
sel(*--i, fn); sel(*--i, fn);
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} }
if (debug['I']) { if (debug['I']) {

3
load.c
View File

@ -481,8 +481,7 @@ loadopt(Fn *fn)
vgrow(&ib, ++nt); vgrow(&ib, ++nt);
ib[nt-1] = *i; ib[nt-1] = *i;
} }
b->nins = nt; idup(b, ib, nt);
idup(&b->ins, ib, nt);
} }
vfree(ib); vfree(ib);
vfree(ilog); vfree(ilog);

View File

@ -582,8 +582,7 @@ findblk(char *name)
static void static void
closeblk() closeblk()
{ {
curb->nins = curi - insb; idup(curb, insb, curi-insb);
idup(&curb->ins, insb, curb->nins);
blink = &curb->link; blink = &curb->link;
curi = insb; curi = insb;
} }

8
rega.c
View File

@ -439,8 +439,7 @@ doblk(Blk *b, RMap *cur)
* the above loop must be changed */ * the above loop must be changed */
} }
} }
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} }
/* qsort() comparison function to peel /* qsort() comparison function to peel
@ -671,10 +670,9 @@ rega(Fn *fn)
blist = b1; blist = b1;
fn->nblk++; fn->nblk++;
strf(b1->name, "%s_%s", b->name, s->name); strf(b1->name, "%s_%s", b->name, s->name);
b1->nins = &insb[NIns] - curi; stmov += &insb[NIns]-curi;
stmov += b1->nins;
stblk += 1; stblk += 1;
idup(&b1->ins, curi, b1->nins); idup(b1, curi, &insb[NIns]-curi);
b1->jmp.type = Jjmp; b1->jmp.type = Jjmp;
b1->s1 = s; b1->s1 = s;
**ps = b1; **ps = b1;

View File

@ -642,8 +642,7 @@ rv64_abi(Fn *fn)
if (b == fn->start) if (b == fn->start)
for (; il; il=il->link) for (; il; il=il->link)
emiti(il->i); emiti(il->i);
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} while (b != fn->start); } while (b != fn->start);
if (debug['A']) { if (debug['A']) {

View File

@ -244,8 +244,7 @@ rv64_isel(Fn *fn)
seljmp(b, fn); seljmp(b, fn);
for (i=&b->ins[b->nins]; i!=b->ins;) for (i=&b->ins[b->nins]; i!=b->ins;)
sel(*--i, fn); sel(*--i, fn);
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} }
if (debug['I']) { if (debug['I']) {

View File

@ -118,9 +118,7 @@ simpl(Fn *fn)
--i; --i;
ins(&i, &new, b, fn); ins(&i, &new, b, fn);
} }
if (new) { if (new)
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
}
} }
} }

View File

@ -517,8 +517,7 @@ spill(Fn *fn)
p->to = slot(p->to.val); p->to = slot(p->to.val);
} }
bscopy(b->in, v); bscopy(b->in, v);
b->nins = &insb[NIns] - curi; idup(b, curi, &insb[NIns]-curi);
idup(&b->ins, curi, b->nins);
} }
/* align the locals to a 16 byte boundary */ /* align the locals to a 16 byte boundary */

11
util.c
View File

@ -253,14 +253,15 @@ emiti(Ins i)
} }
void void
idup(Ins **pd, Ins *s, ulong n) idup(Blk *b, Ins *s, ulong n)
{ {
if (*pd) if (b->ins)
vgrow(pd, n); vgrow(&b->ins, n);
else else
*pd = vnew(n, sizeof(Ins), PFn); b->ins = vnew(n, sizeof(Ins), PFn);
if (n) if (n)
memcpy(*pd, s, n * sizeof(Ins)); memcpy(b->ins, s, n * sizeof(Ins));
b->nins = n;
} }
Ins * Ins *