constant_propagation_pass: Combine zero-extension folding code into its own function
Separates the behavior from the actual switch statement and gets rid of duplication, now that we can use the general GetImmediateAsU64() function.
This commit is contained in:
parent
86539d97d3
commit
e0eec323f2
@ -113,6 +113,15 @@ void FoldOR(IR::Inst& inst, bool is_32_bit) {
|
||||
inst.ReplaceUsesWith(lhs);
|
||||
}
|
||||
}
|
||||
|
||||
void FoldZeroExtendXToWord(IR::Inst& inst) {
|
||||
if (!inst.AreAllArgsImmediates()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const u64 value = inst.GetArg(0).GetImmediateAsU64();
|
||||
inst.ReplaceUsesWith(IR::Value{static_cast<u32>(value)});
|
||||
}
|
||||
} // Anonymous namespace
|
||||
|
||||
void ConstantPropagation(IR::Block& block) {
|
||||
@ -154,24 +163,10 @@ void ConstantPropagation(IR::Block& block) {
|
||||
case IR::Opcode::Not64:
|
||||
FoldNOT(inst, opcode == IR::Opcode::Not32);
|
||||
break;
|
||||
case IR::Opcode::ZeroExtendByteToWord: {
|
||||
if (!inst.AreAllArgsImmediates())
|
||||
break;
|
||||
|
||||
u8 byte = inst.GetArg(0).GetU8();
|
||||
u32 value = static_cast<u32>(byte);
|
||||
inst.ReplaceUsesWith(IR::Value{value});
|
||||
case IR::Opcode::ZeroExtendByteToWord:
|
||||
case IR::Opcode::ZeroExtendHalfToWord:
|
||||
FoldZeroExtendXToWord(inst);
|
||||
break;
|
||||
}
|
||||
case IR::Opcode::ZeroExtendHalfToWord: {
|
||||
if (!inst.AreAllArgsImmediates())
|
||||
break;
|
||||
|
||||
u16 half = inst.GetArg(0).GetU16();
|
||||
u32 value = static_cast<u32>(half);
|
||||
inst.ReplaceUsesWith(IR::Value{value});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user