From ca928f6f8d18b4cf3acd1dd4b7443a5631c06af2 Mon Sep 17 00:00:00 2001 From: Roland Paterson-Jones Date: Tue, 22 Oct 2024 14:22:49 +0200 Subject: Blk::ins is a vector Scratching an itch - avoid unnecesary re-allocation in idup() which is called often in the optimisation chain. Blk::ins is reallocated in xxx_abi() - needs further fiddling. --- amd64/sysv.c | 2 +- arm64/abi.c | 2 +- rv64/abi.c | 2 +- util.c | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/amd64/sysv.c b/amd64/sysv.c index 5b559c1..ba4dc8e 100644 --- a/amd64/sysv.c +++ b/amd64/sysv.c @@ -670,7 +670,7 @@ amd64_sysv_abi(Fn *fn) break; fa = selpar(fn, b->ins, i); n = b->nins - (i - b->ins) + (&insb[NIns] - curi); - i0 = alloc(n * sizeof(Ins)); + i0 = vnew(n, sizeof(Ins), PFn); ip = icpy(ip = i0, curi, &insb[NIns] - curi); ip = icpy(ip, i, &b->ins[b->nins] - i); b->nins = n; diff --git a/arm64/abi.c b/arm64/abi.c index b9e6a14..fc23637 100644 --- a/arm64/abi.c +++ b/arm64/abi.c @@ -744,7 +744,7 @@ arm64_abi(Fn *fn) break; p = selpar(fn, b->ins, i); n = b->nins - (i - b->ins) + (&insb[NIns] - curi); - i0 = alloc(n * sizeof(Ins)); + i0 = vnew(n, sizeof(Ins), PFn); ip = icpy(ip = i0, curi, &insb[NIns] - curi); ip = icpy(ip, i, &b->ins[b->nins] - i); b->nins = n; diff --git a/rv64/abi.c b/rv64/abi.c index e31425c..20dc42c 100644 --- a/rv64/abi.c +++ b/rv64/abi.c @@ -601,7 +601,7 @@ rv64_abi(Fn *fn) break; p = selpar(fn, b->ins, i); n = b->nins - (i - b->ins) + (&insb[NIns] - curi); - i0 = alloc(n * sizeof(Ins)); + i0 = vnew(n, sizeof(Ins), PFn); ip = icpy(ip = i0, curi, &insb[NIns] - curi); ip = icpy(ip, i, &b->ins[b->nins] - i); b->nins = n; diff --git a/util.c b/util.c index 2e4b4cc..a2dfffa 100644 --- a/util.c +++ b/util.c @@ -255,7 +255,10 @@ emiti(Ins i) void idup(Ins **pd, Ins *s, ulong n) { - *pd = alloc(n * sizeof(Ins)); + if (*pd) + vgrow(pd, n); + else + *pd = vnew(n, sizeof(Ins), PFn); if (n) memcpy(*pd, s, n * sizeof(Ins)); } -- cgit v1.2.3