aboutsummaryrefslogtreecommitdiffhomepage
path: root/ir.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-09-09 10:46:18 +0200
committerlemon <lsof@mailbox.org>2025-09-09 10:46:18 +0200
commit3bac8a6bc4f04ed9d302896264809b191477e11b (patch)
tree1d82dcf2f92d84ba214c1aa0466ab87c8ccadcba /ir.c
parente043811980db560fc2507bb53b644e54c80527dc (diff)
fixes, delnops
Diffstat (limited to 'ir.c')
-rw-r--r--ir.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/ir.c b/ir.c
index 2f65192..9ffac50 100644
--- a/ir.c
+++ b/ir.c
@@ -427,7 +427,7 @@ delinstr(struct block *blk, int idx)
memcpy(&instrtab[t], &instrfreelist, sizeof(int));
instrfreelist = t;
deluses(t);
- for (int i = idx; i < blk->ins.n-1; ++i)
+ for (int i = idx; i < blk->ins.n - 1; ++i)
blk->ins.p[i] = blk->ins.p[i + 1];
--blk->ins.n;
}
@@ -440,12 +440,38 @@ delphi(struct block *blk, int idx)
memcpy(&instrtab[t], &instrfreelist, sizeof(int));
instrfreelist = t;
deluses(t);
- for (int i = idx; i < blk->phi.n; ++i)
+ for (int i = idx; i < blk->phi.n - 1; ++i)
blk->phi.p[i] = blk->phi.p[i + 1];
--blk->phi.n;
}
void
+delnops(struct block *blk)
+{
+ int i, n, t;
+ /* delete trailing nops */
+ while (blk->ins.n > 0 && instrtab[t = blk->ins.p[blk->ins.n - 1]].op == Onop) {
+ --blk->ins.n;
+ memcpy(&instrtab[t], &instrfreelist, sizeof(int));
+ instrfreelist = t;
+ }
+ /* delete rest of nops */
+ for (i = blk->ins.n - 2, n = 0; i >= 0; --i) {
+ if (instrtab[t = blk->ins.p[i]].op == Onop) {
+ memcpy(&instrtab[t], &instrfreelist, sizeof(int));
+ instrfreelist = t;
+ ++n;
+ } else if (n) {
+ memmove(blk->ins.p+i+1, blk->ins.p+i+1+n, (blk->ins.n - n - i)*sizeof *blk->ins.p);
+ blk->ins.n -= n;
+ n = 0;
+ }
+ }
+ if (n)
+ memmove(blk->ins.p, blk->ins.p + n, (blk->ins.n -= n)*sizeof *blk->ins.p);
+}
+
+void
fillblkids(struct function *fn)
{
int i = 0;
@@ -568,6 +594,10 @@ irfini(struct function *fn)
lowerintrin(fn);
mem2reg(fn);
copyopt(fn);
+ if (ccopt.dbg.o) {
+ efmt("<< Before isel >>\n");
+ irdump(fn);
+ }
mctarg->isel(fn);
regalloc(fn);
if (!ccopt.dbg.any)