Implement the interfaces to update value numbering information. Add an
authorChris Lattner <sabre@nondot.org>
Sun, 23 May 2004 21:13:24 +0000 (21:13 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 23 May 2004 21:13:24 +0000 (21:13 +0000)
assert.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13679 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/LoadValueNumbering.cpp

index 97a57562bd73d38ea5c163bc197ea851efeb49cd..32d574a55bdab831766dab7266a150010f41525b 100644 (file)
@@ -56,6 +56,24 @@ namespace {
     virtual void getEqualNumberNodes(Value *V1,
                                      std::vector<Value*> &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<AliasAnalysis>().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<AliasAnalysis>().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<StoreInst>(BBI))