Eliminate fully overlapping blits after coalescing stack slots
I noticed that my compiler was generating redundant blits, and after looking through the QBE debug output I believe that I found some low hanging fruit to help clean them up. I'm new to this codebase, so please treat this patch with a lot of skepticism. Happy to make any changes. Thanks for reviewing, and thank you for QBE!
This commit is contained in:
parent
85827e2232
commit
c8fc20b8ef
1 changed files with 9 additions and 4 deletions
13
mem.c
13
mem.c
|
@ -447,10 +447,15 @@ coalesce(Fn *fn)
|
|||
if (i->op == Oblit0)
|
||||
if (slot(&s, &off0, i->arg[0], fn, sl))
|
||||
if (slot(&s0, &off1, i->arg[1], fn, sl))
|
||||
if (s->s == s0->s && off0 < off1) {
|
||||
sz = rsval((i+1)->arg[0]);
|
||||
assert(sz >= 0);
|
||||
(i+1)->arg[0] = INT(-sz);
|
||||
if (s->s == s0->s) {
|
||||
if (off0 < off1) {
|
||||
sz = rsval((i+1)->arg[0]);
|
||||
assert(sz >= 0);
|
||||
(i+1)->arg[0] = INT(-sz);
|
||||
} else if (off0 == off1) {
|
||||
*i = (Ins){.op = Onop};
|
||||
*(i+1) = (Ins){.op = Onop};
|
||||
}
|
||||
}
|
||||
}
|
||||
vfree(bl);
|
||||
|
|
Loading…
Add table
Reference in a new issue