From 0f312d6998aac8620e6596fd41e472bb76aee6a1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 23 May 2004 21:13:24 +0000 Subject: [PATCH] Implement the interfaces to update value numbering information. Add an assert. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13679 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/LoadValueNumbering.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/Analysis/LoadValueNumbering.cpp b/lib/Analysis/LoadValueNumbering.cpp index 97a57562bd7..32d574a55bd 100644 --- a/lib/Analysis/LoadValueNumbering.cpp +++ b/lib/Analysis/LoadValueNumbering.cpp @@ -56,6 +56,24 @@ namespace { virtual void getEqualNumberNodes(Value *V1, std::vector &RetVals) const; + /// 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) { + getAnalysis().deleteValue(V); + } + + /// copyValue - This method should be used whenever a preexisting value in + /// the program is copied or cloned, introducing a new value. Note that + /// analysis implementations should tolerate clients that use this method to + /// introduce the same value multiple times: if the analysis already knows + /// about a value, it should ignore the request. + /// + virtual void copyValue(Value *From, Value *To) { + getAnalysis().copyValue(From, To); + } + /// getCallEqualNumberNodes - Given a call instruction, find other calls /// that have the same value number. void getCallEqualNumberNodes(CallInst *CI, @@ -103,7 +121,7 @@ static bool isPathTransparentTo(BasicBlock *CurBlock, BasicBlock *Dom, TransparentBlocks.insert(TBI, std::make_pair(CurBlock, false)); return false; } - TransparentBlocks.insert(TBI, std::make_pair(CurBlock, true)); + TransparentBlocks.insert(TBI, std::make_pair(CurBlock, true)); } else if (!TBI->second) // This block is known non-transparent, so that path can't be either. return false; @@ -505,8 +523,12 @@ void LoadVN::getEqualNumberNodes(Value *V, BasicBlock::iterator BBI = I->first->end(); while (1) { + assert(BBI != I->first->begin() && + "There is a store in this block of the pointer, but the store" + " doesn't mod the address being stored to?? Must be a bug in" + " the alias analysis implementation!"); --BBI; - if (AA.getModRefInfo(BBI, LoadPtr, LoadSize)& AliasAnalysis::Mod){ + if (AA.getModRefInfo(BBI, LoadPtr, LoadSize) & AliasAnalysis::Mod) { // If the invalidating instruction is one of the candidates, // then it provides the value the load loads. if (StoreInst *SI = dyn_cast(BBI))