aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--all.h2
-rw-r--r--amd64/isel.c3
-rw-r--r--amd64/sysv.c6
-rw-r--r--arm64/abi.c9
-rw-r--r--arm64/isel.c3
-rw-r--r--load.c3
-rw-r--r--parse.c3
-rw-r--r--rega.c8
-rw-r--r--rv64/abi.c3
-rw-r--r--rv64/isel.c3
-rw-r--r--simpl.c6
-rw-r--r--spill.c3
-rw-r--r--util.c11
13 files changed, 24 insertions, 39 deletions
diff --git a/all.h b/all.h
index 97cc41c..fc98c52 100644
--- a/all.h
+++ b/all.h
@@ -478,7 +478,7 @@ int isreg(Ref);
int iscmp(int, int *, int *);
void emit(int, int, Ref, Ref, Ref);
void emiti(Ins);
-void idup(Ins **, Ins *, ulong);
+void idup(Blk *, Ins *, ulong);
Ins *icpy(Ins *, Ins *, ulong);
int cmpop(int);
int cmpneg(int);
diff --git a/amd64/isel.c b/amd64/isel.c
index bd645ce..4b831f8 100644
--- a/amd64/isel.c
+++ b/amd64/isel.c
@@ -828,8 +828,7 @@ amd64_isel(Fn *fn)
seljmp(b, fn);
for (i=&b->ins[b->nins]; i!=b->ins;)
sel(*--i, num, fn);
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
}
free(num);
diff --git a/amd64/sysv.c b/amd64/sysv.c
index ba4dc8e..8a1fd2a 100644
--- a/amd64/sysv.c
+++ b/amd64/sysv.c
@@ -508,8 +508,7 @@ split(Fn *fn, Blk *b)
++fn->nblk;
bn = newblk();
- bn->nins = &insb[NIns] - curi;
- idup(&bn->ins, curi, bn->nins);
+ idup(bn, curi, &insb[NIns]-curi);
curi = &insb[NIns];
bn->visit = ++b->visit;
strf(bn->name, "%s.%d", b->name, b->visit);
@@ -711,8 +710,7 @@ amd64_sysv_abi(Fn *fn)
if (b == fn->start)
for (; ral; ral=ral->link)
emiti(ral->i);
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
} while (b != fn->start);
if (debug['A']) {
diff --git a/arm64/abi.c b/arm64/abi.c
index fc23637..42af2be 100644
--- a/arm64/abi.c
+++ b/arm64/abi.c
@@ -545,8 +545,7 @@ split(Fn *fn, Blk *b)
++fn->nblk;
bn = newblk();
- bn->nins = &insb[NIns] - curi;
- idup(&bn->ins, curi, bn->nins);
+ idup(bn, curi, &insb[NIns]-curi);
curi = &insb[NIns];
bn->visit = ++b->visit;
strf(bn->name, "%s.%d", b->name, b->visit);
@@ -791,8 +790,7 @@ arm64_abi(Fn *fn)
if (b == fn->start)
for (; il; il=il->link)
emiti(il->i);
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
} while (b != fn->start);
if (debug['A']) {
@@ -843,8 +841,7 @@ apple_extsb(Fn *fn)
emit(op, Kw, i->to, i->arg[0], R);
}
}
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
}
if (debug['A']) {
diff --git a/arm64/isel.c b/arm64/isel.c
index 9ce6adc..7d85b92 100644
--- a/arm64/isel.c
+++ b/arm64/isel.c
@@ -306,8 +306,7 @@ arm64_isel(Fn *fn)
seljmp(b, fn);
for (i=&b->ins[b->nins]; i!=b->ins;)
sel(*--i, fn);
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
}
if (debug['I']) {
diff --git a/load.c b/load.c
index 6f40cc7..bc808c1 100644
--- a/load.c
+++ b/load.c
@@ -481,8 +481,7 @@ loadopt(Fn *fn)
vgrow(&ib, ++nt);
ib[nt-1] = *i;
}
- b->nins = nt;
- idup(&b->ins, ib, nt);
+ idup(b, ib, nt);
}
vfree(ib);
vfree(ilog);
diff --git a/parse.c b/parse.c
index e896679..ebfc39f 100644
--- a/parse.c
+++ b/parse.c
@@ -582,8 +582,7 @@ findblk(char *name)
static void
closeblk()
{
- curb->nins = curi - insb;
- idup(&curb->ins, insb, curb->nins);
+ idup(curb, insb, curi-insb);
blink = &curb->link;
curi = insb;
}
diff --git a/rega.c b/rega.c
index 8e601c9..ab98cd6 100644
--- a/rega.c
+++ b/rega.c
@@ -439,8 +439,7 @@ doblk(Blk *b, RMap *cur)
* the above loop must be changed */
}
}
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
}
/* qsort() comparison function to peel
@@ -671,10 +670,9 @@ rega(Fn *fn)
blist = b1;
fn->nblk++;
strf(b1->name, "%s_%s", b->name, s->name);
- b1->nins = &insb[NIns] - curi;
- stmov += b1->nins;
+ stmov += &insb[NIns]-curi;
stblk += 1;
- idup(&b1->ins, curi, b1->nins);
+ idup(b1, curi, &insb[NIns]-curi);
b1->jmp.type = Jjmp;
b1->s1 = s;
**ps = b1;
diff --git a/rv64/abi.c b/rv64/abi.c
index 20dc42c..e7f2340 100644
--- a/rv64/abi.c
+++ b/rv64/abi.c
@@ -642,8 +642,7 @@ rv64_abi(Fn *fn)
if (b == fn->start)
for (; il; il=il->link)
emiti(il->i);
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
} while (b != fn->start);
if (debug['A']) {
diff --git a/rv64/isel.c b/rv64/isel.c
index 8921a07..55fb645 100644
--- a/rv64/isel.c
+++ b/rv64/isel.c
@@ -244,8 +244,7 @@ rv64_isel(Fn *fn)
seljmp(b, fn);
for (i=&b->ins[b->nins]; i!=b->ins;)
sel(*--i, fn);
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
}
if (debug['I']) {
diff --git a/simpl.c b/simpl.c
index 5b16f54..3774f29 100644
--- a/simpl.c
+++ b/simpl.c
@@ -118,9 +118,7 @@ simpl(Fn *fn)
--i;
ins(&i, &new, b, fn);
}
- if (new) {
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
- }
+ if (new)
+ idup(b, curi, &insb[NIns]-curi);
}
}
diff --git a/spill.c b/spill.c
index 2ce1d4f..67c6540 100644
--- a/spill.c
+++ b/spill.c
@@ -517,8 +517,7 @@ spill(Fn *fn)
p->to = slot(p->to.val);
}
bscopy(b->in, v);
- b->nins = &insb[NIns] - curi;
- idup(&b->ins, curi, b->nins);
+ idup(b, curi, &insb[NIns]-curi);
}
/* align the locals to a 16 byte boundary */
diff --git a/util.c b/util.c
index a2dfffa..babaa58 100644
--- a/util.c
+++ b/util.c
@@ -253,14 +253,15 @@ emiti(Ins i)
}
void
-idup(Ins **pd, Ins *s, ulong n)
+idup(Blk *b, Ins *s, ulong n)
{
- if (*pd)
- vgrow(pd, n);
+ if (b->ins)
+ vgrow(&b->ins, n);
else
- *pd = vnew(n, sizeof(Ins), PFn);
+ b->ins = vnew(n, sizeof(Ins), PFn);
if (n)
- memcpy(*pd, s, n * sizeof(Ins));
+ memcpy(b->ins, s, n * sizeof(Ins));
+ b->nins = n;
}
Ins *