summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRhys Perry <pendingchaos02@gmail.com>2019-11-11 14:15:04 +0000
committerDylan Baker <dylan@pnwbakers.com>2019-11-19 16:54:04 -0800
commitab4df0ec7269a1846e7cdde0c7bec051f2daf2d7 (patch)
treec53d975f3f06d147b12ee473b22c067b10552eed
parent37d13ecca7c33437b53be33eefcf6e66a56bddb5 (diff)
downloadmesa-ab4df0ec7269a1846e7cdde0c7bec051f2daf2d7.tar.gz
aco: don't combine literals into v_cndmask_b32/v_subb/v_addc
No pipeline-db changes Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Fixes: 93c8ebfa ('aco: Initial commit of independent AMD compiler') Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> (cherry picked from commit b062b92ab1a6504772a63a6b44f89b4579aef9a3)
-rw-r--r--src/amd/compiler/aco_optimizer.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp
index d8a97354602..59adb2301c9 100644
--- a/src/amd/compiler/aco_optimizer.cpp
+++ b/src/amd/compiler/aco_optimizer.cpp
@@ -469,6 +469,12 @@ bool can_accept_constant(aco_ptr<Instruction>& instr, unsigned operand)
bool valu_can_accept_literal(opt_ctx& ctx, aco_ptr<Instruction>& instr, unsigned operand)
{
+ /* instructions like v_cndmask_b32 can't take a literal because they always
+ * read SGPRs */
+ if (instr->operands.size() >= 3 &&
+ instr->operands[2].isTemp() && instr->operands[2].regClass().type() == RegType::sgpr)
+ return false;
+
// TODO: VOP3 can take a literal on GFX10
return !instr->isSDWA() && !instr->isDPP() && !instr->isVOP3() &&
operand == 0 && can_accept_constant(instr, operand);