aco_ptr<Instruction>& instr)
{
if (instr->isVALU() || instr->isVINTERP_INREG()) {
- instr_class cls = instr_info.classes[(int)instr->opcode];
- block_state.has_trans |= cls == instr_class::valu_transcendental32 ||
- cls == instr_class::valu_double_transcendental;
+ block_state.has_trans |= instr->isTrans();
bool uses_vgpr = false;
for (Definition& def : instr->definitions)
ctx.sgpr_read_by_valu_as_lanemask_then_wr_by_salu.reset();
if (instr->isVALU() || instr->isVINTERP_INREG()) {
- instr_class cls = instr_info.classes[(int)instr->opcode];
- bool is_trans = cls == instr_class::valu_transcendental32 ||
- cls == instr_class::valu_double_transcendental;
+ bool is_trans = instr->isTrans();
ctx.valu_since_wr_by_trans.inc();
if (is_trans)
return true;
}
+bool
+Instruction::isTrans() const noexcept
+{
+ return instr_info.classes[(int)opcode] == instr_class::valu_transcendental32 ||
+ instr_info.classes[(int)opcode] == instr_class::valu_double_transcendental;
+}
+
} // namespace aco
}
constexpr bool isVMEM() const noexcept { return isMTBUF() || isMUBUF() || isMIMG(); }
+
+ bool isTrans() const noexcept;
};
static_assert(sizeof(Instruction) == 16, "Unexpected padding");