From 9bdff6a9aa9a570e16cbca327cee44ee74b4411b Mon Sep 17 00:00:00 2001 From: Merry Date: Sat, 23 Jul 2022 18:42:43 +0100 Subject: [PATCH] constant_propagation_pass: Shift with non-zero value does not require c flag as input --- src/dynarmic/ir/opt/constant_propagation_pass.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/dynarmic/ir/opt/constant_propagation_pass.cpp b/src/dynarmic/ir/opt/constant_propagation_pass.cpp index f30d9836..f63f6464 100644 --- a/src/dynarmic/ir/opt/constant_propagation_pass.cpp +++ b/src/dynarmic/ir/opt/constant_propagation_pass.cpp @@ -300,6 +300,7 @@ bool FoldShifts(IR::Inst& inst) { } const auto shift_amount = inst.GetArg(1); + if (shift_amount.IsZero()) { if (carry_inst) { carry_inst->ReplaceUsesWith(inst.GetArg(2)); @@ -308,6 +309,10 @@ bool FoldShifts(IR::Inst& inst) { return false; } + if (inst.NumArgs() == 3 && shift_amount.IsImmediate() && !shift_amount.IsZero()) { + inst.SetArg(2, IR::Value(false)); + } + if (!inst.AreAllArgsImmediates() || carry_inst) { return false; }