pan/midgard: Add distance metric to choose_instruction

We require chosen instructions to be "close", to avoid ballooning
register pressure. This is a kludge that will go away once we have
proper liveness tracking in the scheduler, but for now it prevents a lot
of needless spilling.

v2: Lower threshold to 6 (from 8). Schedule is hurt, but a few shaders
that spilled excessively are fixed.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>

Derp
This commit is contained in:
Alyssa Rosenzweig
2019-09-27 20:18:16 -04:00
parent e9571b53e1
commit 1409af9fc7
+14
View File
@@ -898,7 +898,21 @@ mir_choose_instruction(
signed best_index = -1;
/* Enforce a simple metric limiting distance to keep down register
* pressure. TOOD: replace with liveness tracking for much better
* results */
unsigned max_active = 0;
unsigned max_distance = 6;
BITSET_FOREACH_SET(i, tmp, worklist, count) {
max_active = MAX2(max_active, i);
}
BITSET_FOREACH_SET(i, tmp, worklist, count) {
if ((max_active - i) >= max_distance)
continue;
if (tag != ~0 && instructions[i]->type != tag)
continue;