reg_alloc: Move implementations out of header
This commit is contained in:
parent
184db36caf
commit
135346eb2e
2 changed files with 57 additions and 36 deletions
|
@ -71,6 +71,53 @@ static void EmitExchange(BlockOfCode* code, HostLoc a, HostLoc b) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HostLocInfo::IsLocked() const {
|
||||||
|
return is_being_used;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HostLocInfo::IsEmpty() const {
|
||||||
|
return !is_being_used && values.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HostLocInfo::IsLastUse() const {
|
||||||
|
return !is_being_used && std::all_of(values.begin(), values.end(), [](const auto& inst) { return !inst->HasUses(); });
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HostLocInfo::ContainsValue(const IR::Inst* inst) const {
|
||||||
|
return std::find(values.begin(), values.end(), inst) != values.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostLocInfo::ReadLock() {
|
||||||
|
ASSERT(!is_scratch);
|
||||||
|
is_being_used = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostLocInfo::WriteLock() {
|
||||||
|
ASSERT(!is_being_used);
|
||||||
|
is_being_used = true;
|
||||||
|
is_scratch = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostLocInfo::AddValue(IR::Inst* inst) {
|
||||||
|
values.push_back(inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostLocInfo::EndOfAllocScope() {
|
||||||
|
const auto to_erase = std::remove_if(values.begin(), values.end(), [](const auto& inst) { return !inst->HasUses(); });
|
||||||
|
values.erase(to_erase, values.end());
|
||||||
|
|
||||||
|
is_being_used = false;
|
||||||
|
is_scratch = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
IR::Type Argument::GetType() const {
|
||||||
|
return value.GetType();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Argument::IsImmediate() const {
|
||||||
|
return value.IsImmediate();
|
||||||
|
}
|
||||||
|
|
||||||
bool Argument::GetImmediateU1() const {
|
bool Argument::GetImmediateU1() const {
|
||||||
return value.GetU1();
|
return value.GetU1();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,40 +26,18 @@ class RegAlloc;
|
||||||
|
|
||||||
struct HostLocInfo {
|
struct HostLocInfo {
|
||||||
public:
|
public:
|
||||||
bool IsLocked() const {
|
bool IsLocked() const;
|
||||||
return is_being_used;
|
bool IsEmpty() const;
|
||||||
}
|
bool IsLastUse() const;
|
||||||
bool IsEmpty() const {
|
|
||||||
return !is_being_used && values.empty();
|
|
||||||
}
|
|
||||||
bool IsLastUse() const {
|
|
||||||
return !is_being_used && std::all_of(values.begin(), values.end(), [](const auto& inst) { return !inst->HasUses(); });
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContainsValue(const IR::Inst* inst) const {
|
bool ContainsValue(const IR::Inst* inst) const;
|
||||||
return std::find(values.begin(), values.end(), inst) != values.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ReadLock() {
|
void ReadLock();
|
||||||
ASSERT(!is_scratch);
|
void WriteLock();
|
||||||
is_being_used = true;
|
|
||||||
}
|
|
||||||
void WriteLock() {
|
|
||||||
ASSERT(!is_being_used);
|
|
||||||
is_being_used = true;
|
|
||||||
is_scratch = true;
|
|
||||||
}
|
|
||||||
void AddValue(IR::Inst* inst) {
|
|
||||||
values.push_back(inst);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EndOfAllocScope() {
|
void AddValue(IR::Inst* inst);
|
||||||
const auto to_erase = std::remove_if(values.begin(), values.end(), [](const auto& inst){ return !inst->HasUses(); });
|
|
||||||
values.erase(to_erase, values.end());
|
|
||||||
|
|
||||||
is_being_used = false;
|
void EndOfAllocScope();
|
||||||
is_scratch = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<IR::Inst*> values;
|
std::vector<IR::Inst*> values;
|
||||||
|
@ -69,12 +47,8 @@ private:
|
||||||
|
|
||||||
struct Argument {
|
struct Argument {
|
||||||
public:
|
public:
|
||||||
IR::Type GetType() const {
|
IR::Type GetType() const;
|
||||||
return value.GetType();
|
bool IsImmediate() const;
|
||||||
}
|
|
||||||
bool IsImmediate() const {
|
|
||||||
return value.IsImmediate();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GetImmediateU1() const;
|
bool GetImmediateU1() const;
|
||||||
u8 GetImmediateU8() const;
|
u8 GetImmediateU8() const;
|
||||||
|
|
Loading…
Reference in a new issue