summary refs log tree commit diff
path: root/lisc/isel.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisc/isel.c')
-rw-r--r--lisc/isel.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/lisc/isel.c b/lisc/isel.c
index e4a10c8..126baf7 100644
--- a/lisc/isel.c
+++ b/lisc/isel.c
@@ -662,11 +662,8 @@ isel(Fn *fn)
 			assert(i->op != OArg && i->op != OArgc);
 			emit(i->op, i->wide, i->to, i->arg[0], i->arg[1]);
 		}
-		n = &insb[NIns] - curi;
-		free(b->ins);
-		b->ins = alloc(n * sizeof b->ins[0]);
-		memcpy(b->ins, curi, n * sizeof b->ins[0]);
-		b->nins = n;
+		b->nins = &insb[NIns] - curi;
+		vdup(&b->ins, curi, b->nins * sizeof(Ins));
 	}
 
 	if (debug['C']) {
@@ -708,11 +705,8 @@ isel(Fn *fn)
 		for (i=&b->ins[b->nins]; i>b->ins;) {
 			sel(*--i, fn);
 		}
-		n = &insb[NIns] - curi;
-		free(b->ins);
-		b->ins = alloc(n * sizeof b->ins[0]);
-		memcpy(b->ins, curi, n * sizeof b->ins[0]);
-		b->nins = n;
+		b->nins = &insb[NIns] - curi;
+		vdup(&b->ins, curi, b->nins * sizeof(Ins));
 	}
 
 	if (debug['I']) {