From f41700cd58f8411995aa61ef68a258f092e03f87 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 19 May 2020 21:20:15 -0700 Subject: [PATCH] Lets DCE pass use the new `HasSideEffects` IR attribute This will be less prone to breaking since you should have the sideeffect described in the IR --- .../IR/Passes/DeadCodeElimination.cpp | 33 +++---------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/External/FEXCore/Source/Interface/IR/Passes/DeadCodeElimination.cpp b/External/FEXCore/Source/Interface/IR/Passes/DeadCodeElimination.cpp index 7a83b7fb4..da6393be2 100644 --- a/External/FEXCore/Source/Interface/IR/Passes/DeadCodeElimination.cpp +++ b/External/FEXCore/Source/Interface/IR/Passes/DeadCodeElimination.cpp @@ -1,6 +1,8 @@ #include "Interface/IR/PassManager.h" #include "Interface/Core/OpcodeDispatcher.h" +#include + #include namespace FEXCore::IR { @@ -42,38 +44,13 @@ bool DeadCodeElimination::Run(IREmitter *IREmit) { OrderedNode *CodeNode = CodeOp->GetNode(ListBegin); auto IROp = CodeNode->Op(DataBegin); - switch (IROp->Op) { - // State/memory storage - case OP_STORECONTEXTINDEXED: - case OP_STORECONTEXT: - case OP_STORECONTEXTPAIR: - case OP_STOREFLAG: - case OP_STOREMEM: - case OP_CAS: - case OP_PRINT: - // Keep - break; - // IO - case OP_SYSCALL: - // Keep - break; - // Control flow - case OP_BREAK: - case OP_JUMP: - case OP_EXITFUNCTION: - case OP_CONDJUMP: - // Keep - break; - case OP_DUMMY: - case OP_ENDBLOCK: - // Keep, so we don't have to update block first/last - break; - default: + // Skip over anything that has side effects + // Use count tracking can't safely remove anything with side effects + if (!IR::HasSideEffects(IROp->Op)) { if (CodeNode->GetUses() == 0) { NumRemoved++; IREmit->Remove(CodeNode); } - break; } if (CodeLast == CodeBegin) {