summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Girlin <vadimgirlin@gmail.com>2011-08-25 00:32:55 +0400
committerAlex Deucher <alexander.deucher@amd.com>2011-08-25 16:59:10 -0400
commitfdb62ef3f5b0fadd3cbac610f5b612bcfad5af1a (patch)
tree6abe952c5b834bfb6cd054b02c59644713f392ff
parent6ba68c7654ee9c2e90b99b4ba653287684904c74 (diff)
r600g: fix replace_gpr_with_pv_ps
Instructions with 3 source operands have no write mask, so we may replace their destinations with PV/PS in the next group even if their dst.write is 0. Note: This is a candidate for the 7.11 branch. Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/gallium/drivers/r600/r600_asm.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/gallium/drivers/r600/r600_asm.c b/src/gallium/drivers/r600/r600_asm.c
index 604cb604339..27febdf9d03 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -787,7 +787,7 @@ static int replace_gpr_with_pv_ps(struct r600_bytecode *bc,
return r;
for (i = 0; i < max_slots; ++i) {
- if(prev[i] && prev[i]->dst.write && !prev[i]->dst.rel) {
+ if (prev[i] && (prev[i]->dst.write || prev[i]->is_op3) && !prev[i]->dst.rel) {
gpr[i] = prev[i]->dst.sel;
/* cube writes more than PV.X */
if (!is_alu_cube_inst(bc, prev[i]) && is_alu_reduction_inst(bc, prev[i]))