Mesa (main): ir3/spill: Mark root as non-spillable after inserting

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 9 00:10:55 UTC 2021


Module: Mesa
Branch: main
Commit: db566904baa96c9f3c19aaac3e8e99bc0ebb4dc7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=db566904baa96c9f3c19aaac3e8e99bc0ebb4dc7

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Sun Oct 31 16:01:02 2021 +0100

ir3/spill: Mark root as non-spillable after inserting

We have to mark the root as non-spillable in case the interval is the
child of some other interval, but we can't know whether it's the child
of some other interval until it's been inserted. Move the setting of
cant_spill below the insertion. This prevents us from using a bogus
parent value.

Fixes: 613eaac7b53 ("ir3: Initial support for spilling non-shared registers")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13650>

---

 src/freedreno/ir3/ir3_spill.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/freedreno/ir3/ir3_spill.c b/src/freedreno/ir3/ir3_spill.c
index 38627f4db02..43cad0a4366 100644
--- a/src/freedreno/ir3/ir3_spill.c
+++ b/src/freedreno/ir3/ir3_spill.c
@@ -520,14 +520,14 @@ insert_src(struct ra_spill_ctx *ctx, struct ir3_register *src)
 {
    struct ra_spill_interval *interval = ctx->intervals[src->def->name];
 
-   ra_spill_interval_root(interval)->cant_spill = true;
+   if (!interval->interval.inserted) {
+      ra_spill_ctx_insert(ctx, interval);
+      interval->needs_reload = true;
+      interval->already_spilled = true;
+   }
 
-   if (interval->interval.inserted)
-      return;
+   ra_spill_interval_root(interval)->cant_spill = true;
 
-   ra_spill_ctx_insert(ctx, interval);
-   interval->needs_reload = true;
-   interval->already_spilled = true;
 }
 
 static void



More information about the mesa-commit mailing list