From 1409af9fc758b88601ceb02a1abf3cd263a224a2 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 27 Sep 2019 20:18:16 -0400 Subject: [PATCH] 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 --- src/panfrost/midgard/midgard_schedule.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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; -- 2.30.2