From: Alyssa Rosenzweig Date: Sat, 28 Sep 2019 00:18:16 +0000 (-0400) Subject: pan/midgard: Add distance metric to choose_instruction X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1409af9fc758b88601ceb02a1abf3cd263a224a2;p=mesa.git 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 Derp --- diff --git a/src/panfrost/midgard/midgard_schedule.c b/src/panfrost/midgard/midgard_schedule.c index dea8b023e9d..8aaec6f8e43 100644 --- a/src/panfrost/midgard/midgard_schedule.c +++ b/src/panfrost/midgard/midgard_schedule.c @@ -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;