Index: llvm/trunk/include/llvm/Analysis/AliasAnalysis.h =================================================================== --- llvm/trunk/include/llvm/Analysis/AliasAnalysis.h +++ llvm/trunk/include/llvm/Analysis/AliasAnalysis.h @@ -507,26 +507,6 @@ uint64_t Size, const ModRefResult Mode) { return canInstructionRangeModRef(I1, I2, MemoryLocation(Ptr, Size), Mode); } - - //===--------------------------------------------------------------------===// - /// Methods that clients should call when they transform the program to allow - /// alias analyses to update their internal data structures. Note that these - /// methods may be called on any instruction, regardless of whether or not - /// they have pointer-analysis implications. - /// - - /// deleteValue - This method should be called whenever an LLVM Value is - /// deleted from the program, for example when an instruction is found to be - /// redundant and is eliminated. - /// - virtual void deleteValue(Value *V); - - /// replaceWithNewValue - This method is the obvious combination of the two - /// above, and it provided as a helper to simplify client code. - /// - void replaceWithNewValue(Value *Old, Value *New) { - deleteValue(Old); - } }; /// isNoAliasCall - Return true if this pointer is returned by a noalias Index: llvm/trunk/lib/Analysis/AliasAnalysis.cpp =================================================================== --- llvm/trunk/lib/Analysis/AliasAnalysis.cpp +++ llvm/trunk/lib/Analysis/AliasAnalysis.cpp @@ -66,11 +66,6 @@ return AA->getArgModRefInfo(CS, ArgIdx); } -void AliasAnalysis::deleteValue(Value *V) { - assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); - AA->deleteValue(V); -} - AliasAnalysis::ModRefResult AliasAnalysis::getModRefInfo(Instruction *I, ImmutableCallSite Call) { // We may have two calls Index: llvm/trunk/lib/Analysis/AliasDebugger.cpp =================================================================== --- llvm/trunk/lib/Analysis/AliasDebugger.cpp +++ llvm/trunk/lib/Analysis/AliasDebugger.cpp @@ -119,12 +119,6 @@ assert(Vals.find(Loc.Ptr) != Vals.end() && "Never seen value in AA before"); return AliasAnalysis::pointsToConstantMemory(Loc, OrLocal); } - - void deleteValue(Value *V) override { - assert(Vals.find(V) != Vals.end() && "Never seen value in AA before"); - AliasAnalysis::deleteValue(V); - } - }; } Index: llvm/trunk/lib/Analysis/AliasSetTracker.cpp =================================================================== --- llvm/trunk/lib/Analysis/AliasSetTracker.cpp +++ llvm/trunk/lib/Analysis/AliasSetTracker.cpp @@ -505,9 +505,6 @@ // dangling pointers to deleted instructions. // void AliasSetTracker::deleteValue(Value *PtrVal) { - // Notify the alias analysis implementation that this value is gone. - AA.deleteValue(PtrVal); - // If this is a call instruction, remove the callsite from the appropriate // AliasSet (if present). if (Instruction *Inst = dyn_cast(PtrVal)) { Index: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp =================================================================== --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -1618,7 +1618,6 @@ assert(!NonLocalDeps.count(RemInst) && "RemInst got reinserted?"); - AA->deleteValue(RemInst); DEBUG(verifyRemoved(RemInst)); } /// verifyRemoved - Verify that the specified instruction does not occur Index: llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp =================================================================== --- llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp +++ llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp @@ -71,8 +71,6 @@ return ModRef; } - void deleteValue(Value *V) override {} - /// getAdjustedAnalysisPointer - This method is used when a pass implements /// an analysis interface through multiple inheritance. If needed, it /// should override this to adjust the this pointer as needed for the Index: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp =================================================================== --- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp +++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -501,7 +501,6 @@ if (GEP->use_empty()) { // Dead GEP's cause trouble later. Just remove them if we run into // them. - getAnalysis().deleteValue(GEP); GEP->eraseFromParent(); // TODO: This runs the above loop over and over again for dead GEPs // Couldn't we just do increment the UI iterator earlier and erase the @@ -743,10 +742,6 @@ F->getParent()->getFunctionList().insert(F, NF); NF->takeName(F); - // Get the alias analysis information that we need to update to reflect our - // changes. - AliasAnalysis &AA = getAnalysis(); - // Get the callgraph information that we need to update to reflect our // changes. CallGraph &CG = getAnalysis().getCallGraph(); @@ -873,10 +868,6 @@ Args.clear(); AttributesVec.clear(); - // Update the alias analysis implementation to know that we are replacing - // the old call with a new one. - AA.replaceWithNewValue(Call, New); - // Update the callgraph to know that the callsite has been transformed. CallGraphNode *CalleeNode = CG[Call->getParent()->getParent()]; CalleeNode->replaceCallEdge(CS, CallSite(New), NF_CGN); @@ -906,7 +897,6 @@ // new version. I->replaceAllUsesWith(I2); I2->takeName(I); - AA.replaceWithNewValue(I, I2); ++I2; continue; } @@ -935,7 +925,6 @@ // Anything that used the arg should now use the alloca. I->replaceAllUsesWith(TheAlloca); TheAlloca->takeName(I); - AA.replaceWithNewValue(I, TheAlloca); // If the alloca is used in a call, we must clear the tail flag since // the callee now uses an alloca from the caller. @@ -948,10 +937,8 @@ continue; } - if (I->use_empty()) { - AA.deleteValue(I); + if (I->use_empty()) continue; - } // Otherwise, if we promoted this argument, then all users are load // instructions (or GEPs with only load users), and all loads should be @@ -964,7 +951,6 @@ "Load element should sort to front!"); I2->setName(I->getName()+".val"); LI->replaceAllUsesWith(I2); - AA.replaceWithNewValue(LI, I2); LI->eraseFromParent(); DEBUG(dbgs() << "*** Promoted load of argument '" << I->getName() << "' in function '" << F->getName() << "'\n"); @@ -1001,10 +987,8 @@ while (!GEP->use_empty()) { LoadInst *L = cast(GEP->user_back()); L->replaceAllUsesWith(TheArg); - AA.replaceWithNewValue(L, TheArg); L->eraseFromParent(); } - AA.deleteValue(GEP); GEP->eraseFromParent(); } } @@ -1013,10 +997,6 @@ std::advance(I2, ArgIndices.size()); } - // Tell the alias analysis that the old function is about to disappear. - AA.replaceWithNewValue(F, NF); - - NF_CGN->stealCalledFunctionsFrom(CG[F]); // Now that the old function is dead, delete it. If there is a dangling Index: llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp =================================================================== --- llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp +++ llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp @@ -77,8 +77,6 @@ if (MemDep) MemDep->removeInstruction(PN); // Memdep updates AA itself. - else if (AA && isa(PN->getType())) - AA->deleteValue(PN); PN->eraseFromParent(); } Index: llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp =================================================================== --- llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp +++ llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp @@ -216,7 +216,6 @@ if (Value *V = SimplifyInstruction(PN, DL, nullptr, DT, AC)) { // This is a degenerate PHI already, don't modify it! PN->replaceAllUsesWith(V); - if (AA) AA->deleteValue(PN); PN->eraseFromParent(); continue; } @@ -443,7 +442,6 @@ // eliminate the PHI Node. if (HasUniqueIncomingValue) { NewPN->replaceAllUsesWith(UniqueValue); - if (AA) AA->deleteValue(NewPN); BEBlock->getInstList().erase(NewPN); } } @@ -618,7 +616,6 @@ for (BasicBlock::iterator I = L->getHeader()->begin(); (PN = dyn_cast(I++)); ) if (Value *V = SimplifyInstruction(PN, DL, nullptr, DT, AC)) { - if (AA) AA->deleteValue(PN); if (SE) SE->forgetValue(PN); PN->replaceAllUsesWith(V); PN->eraseFromParent(); Index: llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp =================================================================== --- llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp +++ llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp @@ -2806,11 +2806,8 @@ Instruction *J, Instruction *K, Instruction *&InsertionPt, Instruction *&K1, Instruction *&K2) { - if (isa(I)) { - AA->replaceWithNewValue(I, K); - AA->replaceWithNewValue(J, K); + if (isa(I)) return; - } Type *IType = I->getType(); Type *JType = J->getType(); @@ -3144,8 +3141,6 @@ if (!isa(I)) { L->replaceAllUsesWith(K1); H->replaceAllUsesWith(K2); - AA->replaceWithNewValue(L, K1); - AA->replaceWithNewValue(H, K2); } // Instructions that may read from memory may be in the load move set.