From 2655adb3b26b845193be9802f6f938d836c4a939 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Wed, 11 Jul 2007 20:38:34 +0000 Subject: [PATCH] Handle eliminating stores that occur right before a free. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39753 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/FastDSE.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/Transforms/Scalar/FastDSE.cpp b/lib/Transforms/Scalar/FastDSE.cpp index e344f55e823..82862f7b489 100644 --- a/lib/Transforms/Scalar/FastDSE.cpp +++ b/lib/Transforms/Scalar/FastDSE.cpp @@ -74,14 +74,22 @@ bool FDSE::runOnBasicBlock(BasicBlock &BB) { // Do a top-down walk on the BB for (BasicBlock::iterator BBI = BB.begin(), BBE = BB.end(); BBI != BBE; ++BBI) { // If we find a store... - if (StoreInst* S = dyn_cast(BBI)) { - StoreInst*& last = lastStore[S->getPointerOperand()]; + if (isa(BBI) || isa(BBI)) { + Value* pointer = 0; + if (StoreInst* S = dyn_cast(BBI)) + pointer = S->getPointerOperand(); + else if (FreeInst* F = dyn_cast(BBI)) + pointer = F->getPointerOperand(); + assert(pointer && "Not a free or a store?"); + + StoreInst*& last = lastStore[pointer]; // ... to a pointer that has been stored to before... if (last) { // ... and no other memory dependencies are between them.... - if (MD.getDependency(S) == last) { + if (MD.getDependency(BBI) == last) { + // Remove it! MD.removeInstruction(last); @@ -96,7 +104,10 @@ bool FDSE::runOnBasicBlock(BasicBlock &BB) { } // Update our most-recent-store map - last = S; + if (StoreInst* S = dyn_cast(BBI)) + last = S; + else + last = 0; } } -- 2.34.1