IROpt: Port get/set elimination pass to current IR

This commit is contained in:
MerryMage
2016-08-02 11:51:05 +01:00
parent e60cea3a54
commit be87038ffd
6 changed files with 42 additions and 28 deletions

View File

@@ -87,6 +87,18 @@ void Inst::Invalidate() {
}
}
void Inst::ReplaceUsesWith(Value& replacement) {
Invalidate();
op = Opcode::Identity;
if (!replacement.IsImmediate()) {
Use(replacement);
}
args[0] = replacement;
}
void Inst::Use(Value& value) {
value.GetInst()->use_count++;

View File

@@ -148,6 +148,8 @@ public:
void Invalidate();
void ReplaceUsesWith(Value& replacement);
size_t use_count = 0;
Inst* carry_inst = nullptr;
Inst* overflow_inst = nullptr;

View File

@@ -1,5 +1,7 @@
// opcode name, return type, arg1 type, arg2 type, arg3 type, ...
OPCODE(Identity, T::Opaque, T::Opaque )
// ARM Context getters/setters
OPCODE(GetRegister, T::U32, T::RegRef )
OPCODE(SetRegister, T::Void, T::RegRef, T::U32 )