microinstruction: Rename FindUseWithOpcode to GetAssociatedPseudoOperation, encapsulate associated variables

This commit is contained in:
MerryMage 2016-08-25 21:08:47 +01:00
parent 130b5510a6
commit 4322c0907c
3 changed files with 32 additions and 26 deletions

View file

@ -214,6 +214,21 @@ bool Inst::MayHaveSideEffects() const {
}
Inst* Inst::GetAssociatedPseudoOperation(Opcode opcode) {
// This is faster than doing a search through the block.
switch (opcode) {
case IR::Opcode::GetCarryFromOp:
return carry_inst;
case IR::Opcode::GetOverflowFromOp:
return overflow_inst;
default:
break;
}
ASSERT_MSG(false, "Not a valid pseudo-operation");
return nullptr;
}
Type Inst::GetType() const {
if (op == Opcode::Identity)
return args[0].GetType();
@ -266,9 +281,11 @@ void Inst::Use(Value& value) {
switch (op){
case Opcode::GetCarryFromOp:
ASSERT_MSG(!value.GetInst()->carry_inst, "Only one of each type of pseudo-op allowed");
value.GetInst()->carry_inst = this;
break;
case Opcode::GetOverflowFromOp:
ASSERT_MSG(!value.GetInst()->overflow_inst, "Only one of each type of pseudo-op allowed");
value.GetInst()->overflow_inst = this;
break;
default:

View file

@ -74,6 +74,8 @@ public:
bool MayHaveSideEffects() const;
bool HasUses() const { return use_count > 0; }
/// Gets a pseudo-operation associated with this instruction.
Inst* GetAssociatedPseudoOperation(Opcode opcode);
/// Get the microop this microinstruction represents.
Opcode GetOpcode() const { return op; }
@ -90,8 +92,6 @@ public:
void ReplaceUsesWith(Value& replacement);
size_t use_count = 0;
Inst* carry_inst = nullptr;
Inst* overflow_inst = nullptr;
private:
void Use(Value& value);
@ -99,6 +99,9 @@ private:
Opcode op;
std::array<Value, 3> args;
Inst* carry_inst = nullptr;
Inst* overflow_inst = nullptr;
};
} // namespace IR