mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-01-21 05:51:39 +00:00
Optimise out unnecessary shifts (#1021)
This commit is contained in:
parent
a73b5c3e02
commit
126b2c30bd
|
@ -1079,6 +1079,10 @@ U32 IREmitter::IAbs(const U32& value) {
|
|||
}
|
||||
|
||||
U32U64 IREmitter::ShiftLeftLogical(const U32U64& base, const U32& shift) {
|
||||
if (shift.IsImmediate() && shift.U32() == 0) {
|
||||
return base;
|
||||
}
|
||||
|
||||
switch (base.Type()) {
|
||||
case Type::U32:
|
||||
return Inst<U32>(Opcode::ShiftLeftLogical32, base, shift);
|
||||
|
@ -1090,6 +1094,10 @@ U32U64 IREmitter::ShiftLeftLogical(const U32U64& base, const U32& shift) {
|
|||
}
|
||||
|
||||
U32U64 IREmitter::ShiftRightLogical(const U32U64& base, const U32& shift) {
|
||||
if (shift.IsImmediate() && shift.U32() == 0) {
|
||||
return base;
|
||||
}
|
||||
|
||||
switch (base.Type()) {
|
||||
case Type::U32:
|
||||
return Inst<U32>(Opcode::ShiftRightLogical32, base, shift);
|
||||
|
@ -1101,6 +1109,10 @@ U32U64 IREmitter::ShiftRightLogical(const U32U64& base, const U32& shift) {
|
|||
}
|
||||
|
||||
U32U64 IREmitter::ShiftRightArithmetic(const U32U64& base, const U32& shift) {
|
||||
if (shift.IsImmediate() && shift.U32() == 0) {
|
||||
return base;
|
||||
}
|
||||
|
||||
switch (base.Type()) {
|
||||
case Type::U32:
|
||||
return Inst<U32>(Opcode::ShiftRightArithmetic32, base, shift);
|
||||
|
|
|
@ -278,6 +278,12 @@ void ConstantPropagation(IR::Block& block, IR::Inst& inst) {
|
|||
case IR::Opcode::FPCmpClass32:
|
||||
FoldCmpClass(inst);
|
||||
return;
|
||||
case IR::Opcode::ShiftLeftLogical32:
|
||||
FoldWhenAllImmediates(inst, [](u32 a, u32 b) { return static_cast<u32>(a << b); });
|
||||
return;
|
||||
case IR::Opcode::ShiftRightLogical32:
|
||||
FoldWhenAllImmediates(inst, [](u32 a, u32 b) { return static_cast<u32>(a >> b); });
|
||||
return;
|
||||
case IR::Opcode::ShiftRightArithmetic32:
|
||||
FoldWhenAllImmediates(inst, [](s32 a, s32 b) { return static_cast<u32>(a >> b); });
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue