commit c62b1754424046fea6abe3413f736a9483fa22a7
parent 0d5b5cefcba8e4ce7e3917628d367331968e7725
Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date: Sun, 16 Aug 2015 17:43:35 -0400
fix two heuristics in rega
There was a typo that made always the same successor
to be selected for register allocation hinting.
Also, I now attempt to prioritize hints over succeccor's
choices as it appears to give slightly better results...
Now that I think about it, the code re-using the most
frequent successor block's assignment might be dead
because all registers have hints if they got assigned
once. To investigate.
Diffstat:
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lisc/rega.c b/lisc/rega.c
@@ -311,13 +311,14 @@ rega(Fn *fn)
if (b->s1 && b1->loop <= b->s1->loop)
b1 = b->s1;
if (b->s2 && b1->loop <= b->s2->loop)
- b1 = b->s1;
+ b1 = b->s2;
/* try to reuse the register
* assignment of the most frequent
* successor
*/
if (b1 != b)
for (t=Tmp0; t<fn->ntmp; t++)
+ if (tmp[t].hint == -1)
if (BGET(b->out, t))
if ((r = rfind(&beg[b1->id], t)) != -1)
radd(&cur, t, r);