diff --git a/External/FEXCore/Source/Interface/IR/Passes/ConstProp.cpp b/External/FEXCore/Source/Interface/IR/Passes/ConstProp.cpp index db72a58ed..36474d16f 100644 --- a/External/FEXCore/Source/Interface/IR/Passes/ConstProp.cpp +++ b/External/FEXCore/Source/Interface/IR/Passes/ConstProp.cpp @@ -374,6 +374,13 @@ bool ConstProp::Run(IREmitter *IREmit) { IREmit->ReplaceWithConstant(CodeNode, NewConstant); Changed = true; continue; + } else if (IREmit->IsValueConstant(Op->Header.Args[1], &Constant2) && __builtin_popcountl(Constant2) == 1) { + if (IROp->Size == 4 || IROp->Size == 8) { + uint64_t amt = __builtin_ctzl(Constant2); + IREmit->SetWriteCursor(CodeNode); + auto shift = IREmit->_Lshl(CurrentIR.GetNode(Op->Header.Args[0]), IREmit->_Constant(amt)); + IREmit->ReplaceAllUsesWith(CodeNode, shift); + } } break; }