diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index 86078db7765..fef6fbf3a07 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -1042,13 +1042,7 @@ private: struct RegisterDemand { constexpr RegisterDemand() = default; constexpr RegisterDemand(const int16_t v, const int16_t s) noexcept : vgpr{v}, sgpr{s} {} - constexpr RegisterDemand(Temp t) noexcept - { - if (t.regClass().type() == RegType::sgpr) - sgpr = t.size(); - else - vgpr = t.size(); - } + constexpr RegisterDemand(Temp t) noexcept { (*this)[t.type()] = t.size(); } int16_t vgpr = 0; int16_t sgpr = 0; @@ -1113,19 +1107,13 @@ struct RegisterDemand { constexpr RegisterDemand& operator+=(const Temp t) noexcept { - if (t.type() == RegType::sgpr) - sgpr += t.size(); - else - vgpr += t.size(); + (*this)[t.type()] += t.size(); return *this; } constexpr RegisterDemand& operator-=(const Temp t) noexcept { - if (t.type() == RegType::sgpr) - sgpr -= t.size(); - else - vgpr -= t.size(); + (*this)[t.type()] -= t.size(); return *this; }