summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/vc4/vc4_program.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2016-10-05 09:07:46 -0700
committerEric Anholt <eric@anholt.net>2016-10-06 18:09:24 -0700
commitd4ae5ca823227214dd1f536e5f4058bede20b2dd (patch)
treef020f96d93ff05007d78f954100852b82faaae5f /src/gallium/drivers/vc4/vc4_program.c
parent06cc3dfda49b557b177ea6a5bc4fb87e087df21a (diff)
downloadexternal_mesa3d-d4ae5ca823227214dd1f536e5f4058bede20b2dd.zip
external_mesa3d-d4ae5ca823227214dd1f536e5f4058bede20b2dd.tar.gz
external_mesa3d-d4ae5ca823227214dd1f536e5f4058bede20b2dd.tar.bz2
vc4: Fix live intervals analysis for screening defs in if statements.
If a conditional assignment is only conditioned on the exec mask, that's still screening off the value in the executed channels (and, since we're not storing to the unexcuted channels, we don't care what's in there). Fixes a bunch of extra register pressure on Processing's Ribbons demo, which is failing to allocate.
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_program.c')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index a91e620..81ac070 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -169,8 +169,11 @@ ntq_store_dest(struct vc4_compile *c, nir_dest *dest, int chan,
* channel is active.
*/
if (c->execute.file != QFILE_NULL) {
+ struct qinst *mov;
+
qir_SF(c, c->execute);
- qir_MOV_cond(c, QPU_COND_ZS, qregs[chan], result);
+ mov = qir_MOV_cond(c, QPU_COND_ZS, qregs[chan], result);
+ mov->cond_is_exec_mask = true;
} else {
qir_MOV_dest(c, qregs[chan], result);
}