summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2018-08-02 11:12:37 -0700
committerAndres Gomez <[email protected]>2018-08-07 20:54:41 +0300
commit71aa72d69542aefe37b2739cf33005c5fbf58015 (patch)
tree6f282dc09b5ecdc0458f5b191847adbe56261315
parentc8d41bc58d5244f3494434960e6410eafb5c14fc (diff)
v3d: Avoid spilling that breaks the r5 usage after a ldvary.
Fixes bad rendering when forcing 2 spills in glxgears. Cc: "18.2" <[email protected]> (cherry picked from commit 50a8713d4f90a6c70a23f9f5871420371df283a7)
-rw-r--r--src/broadcom/compiler/vir_register_allocate.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/broadcom/compiler/vir_register_allocate.c b/src/broadcom/compiler/vir_register_allocate.c
index d0a9f4e30d9..61d273575d9 100644
--- a/src/broadcom/compiler/vir_register_allocate.c
+++ b/src/broadcom/compiler/vir_register_allocate.c
@@ -94,6 +94,15 @@ v3d_choose_spill_node(struct v3d_compile *c, struct ra_graph *g,
}
}
+ /* Refuse to spill a ldvary's dst, because that means
+ * that ldvary's r5 would end up being used across a
+ * thrsw.
+ */
+ if (inst->qpu.sig.ldvary) {
+ assert(inst->dst.file == QFILE_TEMP);
+ BITSET_CLEAR(c->spillable, inst->dst.index);
+ }
+
if (inst->is_last_thrsw)
started_last_seg = true;