diff --git a/.pick_status.json b/.pick_status.json index c2a1cf9d279..80fab8344fb 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -130,7 +130,7 @@ "description": "r600/sfn: Take source uses into account when switching channels", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "18a8d148d862d4a0f5b83f4385f00cf8a4a71b6d" }, diff --git a/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp b/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp index 767025b747b..06d2ebd64c3 100644 --- a/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp @@ -544,6 +544,12 @@ CopyPropFwdVisitor::propagate_to(RegisterVec4& value, Instr *instr) allowed_mask &= alu->allowed_dest_chan_mask(); } + for (auto u : src->uses()) { + auto alu = u->as_alu(); + if (alu) + allowed_mask &= alu->allowed_src_chan_mask(); + } + if (!allowed_mask) return;