summary refs log tree commit diff
path: root/lisc/isel.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-10-05 21:27:02 -0400
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-10-05 21:38:55 -0400
commita83174f44741088906718cc656675099e9193ad5 (patch)
treee006679c5d7cc42692abe48a61b8776fd54067c0 /lisc/isel.c
parent60aacea0c3dad234b59dcfeb5d50e3de69662515 (diff)
downloadroux-a83174f44741088906718cc656675099e9193ad5.tar.gz
factor vector duplication in vdup()
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']) {