diff --git a/src/gallium/drivers/r600/sfn/sfn_liverangeevaluator.cpp b/src/gallium/drivers/r600/sfn/sfn_liverangeevaluator.cpp index a6c6aa678bd..6b4964b5d8c 100644 --- a/src/gallium/drivers/r600/sfn/sfn_liverangeevaluator.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_liverangeevaluator.cpp @@ -429,9 +429,14 @@ LiveRangeInstrVisitor::visit(UNUSED LDSReadInstr *instr) void LiveRangeInstrVisitor::record_write(const Register *reg) { + if (reg->has_flag(Register::addr_or_idx)) + return; + auto addr = reg->get_addr(); - if (addr && addr->as_register()) { - record_read(addr->as_register(), LiveRangeEntry::use_unspecified); + if (addr) { + + if (addr->as_register() && !addr->as_register()->has_flag(Register::addr_or_idx)) + record_read(addr->as_register(), LiveRangeEntry::use_unspecified); const auto av = static_cast(reg); auto& array = av->array(); @@ -455,12 +460,15 @@ LiveRangeInstrVisitor::record_read(const Register *reg, LiveRangeEntry::EUse use if (!reg) return; - auto addr = reg->get_addr(); - if (addr && addr->as_register()) { - sfn_log << SfnLog::merge << "Record reading address register " << *addr << "\n"; + if (reg->has_flag(Register::addr_or_idx)) + return; - auto& ra = m_register_access(*addr->as_register()); - ra.record_read(m_line, m_current_scope, use); + auto addr = reg->get_addr(); + if (addr) { + if (addr->as_register() && !addr->as_register()->has_flag(Register::addr_or_idx)) { + auto& ra = m_register_access(*addr->as_register()); + ra.record_read(m_line, m_current_scope, use); + } const auto av = static_cast(reg); auto& array = av->array();