From 92f31648b9659f125d2bd802124e381ea44befea Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 11 Mar 2024 10:59:38 -0400 Subject: [PATCH] RCLSE: optimize out pointless stores can help a lot of x86 code because x86 is 2-address and a64 is 3-address, so x86 ends up with piles of movs that end up dead after translation It's not a win across the board because our RA isn't aware of tied registers so sometimes we regress moves. But it's a win on average, and the RA bits can be improved with time. Signed-off-by: Alyssa Rosenzweig --- .../IR/Passes/DeadContextStoreElimination.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/FEXCore/Source/Interface/IR/Passes/DeadContextStoreElimination.cpp b/FEXCore/Source/Interface/IR/Passes/DeadContextStoreElimination.cpp index f8a33e653..44d34f633 100644 --- a/FEXCore/Source/Interface/IR/Passes/DeadContextStoreElimination.cpp +++ b/FEXCore/Source/Interface/IR/Passes/DeadContextStoreElimination.cpp @@ -544,10 +544,20 @@ bool RCLSE::ClassifyContextLoad(FEXCore::IR::IREmitter *IREmit, ContextInfo *Loc bool RCLSE::ClassifyContextStore(FEXCore::IR::IREmitter *IREmit, ContextInfo *LocalInfo, FEXCore::IR::RegisterClassType Class, uint32_t Offset, uint8_t Size, FEXCore::IR::OrderedNode *CodeNode, FEXCore::IR::OrderedNode *ValueNode) { auto Info = FindMemberInfo(LocalInfo, Offset, Size); + ContextMemberInfo PreviousMemberInfoCopy = *Info; RecordAccess(Info, Class, Offset, Size, LastAccessType::WRITE, ValueNode, CodeNode); - // TODO: Optimize redundant stores. - // ContextMemberInfo PreviousMemberInfoCopy = *Info; + + if (PreviousMemberInfoCopy.AccessRegClass == Info->AccessRegClass && + PreviousMemberInfoCopy.AccessOffset == Info->AccessOffset && + PreviousMemberInfoCopy.AccessSize == Size && + PreviousMemberInfoCopy.Accessed == LastAccessType::WRITE) { + // This optimizes redundant stores with no intervening load + IREmit->Remove(PreviousMemberInfoCopy.StoreNode); + return true; + } + + // TODO: Optimize the case of partial stores. return false; }