bool AluInstr::has_lds_access() const
{
- if (has_alu_flag(alu_is_lds))
- return true;
+ return has_alu_flag(alu_is_lds) || has_lds_queue_read();
+}
- for (auto& s : m_src)
- if (s->as_inline_const() &&
- (s->as_inline_const()->sel() == ALU_SRC_LDS_OQ_A_POP))
- return true;
+bool AluInstr::has_lds_queue_read() const
+{
+ for (auto& s : m_src) {
+ auto ic = s->as_inline_const();
+ if (!ic)
+ continue;
+ if (ic->sel() == ALU_SRC_LDS_OQ_A_POP ||
+ ic->sel() == ALU_SRC_LDS_OQ_B_POP)
+ return true;
+ }
return false;
}
bool is_equal_to(const AluInstr& lhs) const;
bool has_lds_access() const;
+ bool has_lds_queue_read() const;
static const std::map<ECFAluOpCode, std::string> cf_map;
static const std::map<AluBankSwizzle, std::string> bank_swizzle_map;