diff --git a/src/gallium/drivers/r600/sfn/sfn_assembler.cpp b/src/gallium/drivers/r600/sfn/sfn_assembler.cpp index e7b9022fec3..fd363bc436a 100644 --- a/src/gallium/drivers/r600/sfn/sfn_assembler.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_assembler.cpp @@ -320,11 +320,15 @@ AssemblerVisitor::emit_alu_op(const AluInstr& ai) if (ai.bank_swizzle() != alu_vec_unknown) alu.bank_swizzle_force = ai.bank_swizzle(); - if (!fill_alu_dst(alu, ai, m_bc, m_last_addr)) { + if (!fill_alu_dst(alu, ai, m_bc)) { m_result = false; return; } + auto dst = ai.dest(); + if (dst && ai.opcode() != op1_mova_int && m_last_addr && m_last_addr->equal_to(*dst)) + m_last_addr = nullptr; + fill_alu_src_operands(alu, ai, m_bc); m_result = !r600_bytecode_add_alu(&m_bc, &alu); diff --git a/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.cpp b/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.cpp index abafa97577c..74e48b202a4 100644 --- a/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.cpp @@ -549,8 +549,7 @@ fill_alu_src_operands(r600_bytecode_alu& alu, const AluInstr& ai, r600_bytecode& } bool -fill_alu_dst(r600_bytecode_alu& alu, const AluInstr& ai, r600_bytecode& bc, - const VirtualValue *& last_addr) +fill_alu_dst(r600_bytecode_alu& alu, const AluInstr& ai, r600_bytecode& bc) { auto dst = ai.dest(); if (dst) { @@ -566,8 +565,6 @@ fill_alu_dst(r600_bytecode_alu& alu, const AluInstr& ai, r600_bytecode& bc, } alu.dst.sel = dst->sel() != g_registers_unused ? dst->sel() : g_registers_end; alu.dst.chan = dst->chan(); - if (last_addr && last_addr->equal_to(*dst)) - last_addr = nullptr; alu.dst.write = write; alu.dst.rel = dst->addr() ? 1 : 0; diff --git a/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.h b/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.h index 3dce055ebf2..c0d08d34f98 100644 --- a/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.h +++ b/src/gallium/drivers/r600/sfn/sfn_fill_bytecode.h @@ -57,8 +57,7 @@ void fill_alu_src_operands(r600_bytecode_alu& alu, bool fill_alu_dst(r600_bytecode_alu& alu, const AluInstr& ai, - r600_bytecode& bc, - const VirtualValue *& last_addr); + r600_bytecode& bc); } // namespace r600