diff options
author | Kenneth Graunke <[email protected]> | 2013-08-05 16:24:43 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-08-12 13:12:59 -0700 |
commit | 2c32c3985ca6232a81d21feb9ac6443145b42d0e (patch) | |
tree | 4fd79bb99d5d9f667fa711592889e07bd64e4a97 /src | |
parent | d21f542aa1f8305ae9d149d97f987c81d2a81bca (diff) |
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 <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
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); } |