From 2c32c3985ca6232a81d21feb9ac6443145b42d0e Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Mon, 5 Aug 2013 16:24:43 -0700 Subject: [PATCH] i965/fs: Consider predicated SEL instructions as whole variable writes. The instruction (+f0.0) SEL dst, src0, src1 will write either src0 or src1 to dst, depending on the predicate. Unlike most predicated instructions, it always writes to dst. fs_inst::is_partial_write() is supposed to return true if the whole register is guaranteed to be written. The !inst->predicated check makes sense for most instructions, which might not write the whole register, but SEL is a special case. This caused live interval analysis to ignore the destination of predicated SEL instructions when computing "def" information. Requires the previous commit to avoid regressions. Signed-off-by: Kenneth Graunke Reviewed-by: Matt Turner --- src/mesa/drivers/dri/i965/brw_fs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index a9533104176..f404b0b2be2 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -689,7 +689,7 @@ fs_visitor::pop_force_sechalf() bool fs_inst::is_partial_write() { - return (this->predicate || + return ((this->predicate && this->opcode != BRW_OPCODE_SEL) || this->force_uncompressed || this->force_sechalf); } -- 2.30.2