From 46fb0503f0c1c1e2ea7c0d7aeecaefc0ea28fc47 Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Sat, 21 Nov 2020 11:31:42 +0200 Subject: [PATCH] ConstProp: Mul x,#powof2 -> Lshl x,clz(#powof2) --- External/FEXCore/Source/Interface/IR/Passes/ConstProp.cpp | 7 +++++++ 1 file changed, 7 insertions(+) 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; }