[llvm-commits] [poolalloc] r107188 - /poolalloc/trunk/lib/DSA/DataStructureAA.cpp

Will Dietz wdietz2 at illinois.edu
Tue Jun 29 11:38:26 PDT 2010


Author: wdietz2
Date: Tue Jun 29 13:38:26 2010
New Revision: 107188

URL: http://llvm.org/viewvc/llvm-project?rev=107188&view=rev
Log:
Added simple 'valid' state tracking for DS-AA, and assert if the pass is used after being invalidated.
This helps save debugging time by making it clear if an error is due to ds-aa being invalidated as opposed to wrong DSA results, etc.

Modified:
    poolalloc/trunk/lib/DSA/DataStructureAA.cpp

Modified: poolalloc/trunk/lib/DSA/DataStructureAA.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DataStructureAA.cpp?rev=107188&r1=107187&r2=107188&view=diff
==============================================================================
--- poolalloc/trunk/lib/DSA/DataStructureAA.cpp (original)
+++ poolalloc/trunk/lib/DSA/DataStructureAA.cpp Tue Jun 29 13:38:26 2010
@@ -35,10 +35,12 @@
     // information is also freed.
     CallSite MapCS;
     std::multimap<DSNode*, const DSNode*> CallerCalleeMap;
+    bool valid;
   public:
     static char ID;
-    DSAA() : ModulePass((intptr_t)&ID), TD(0) {}
+    DSAA() : ModulePass((intptr_t)&ID), TD(NULL), BU(NULL), valid(false) {}
     ~DSAA() {
+      valid = false;
       InvalidateCache();
     }
 
@@ -58,9 +60,20 @@
       InitializeAliasAnalysis(this);
       TD = &getAnalysis<TDDataStructures>();
       BU = &getAnalysis<BUDataStructures>();
+      //FIXME: Is this not a safe assumption?
+      //assert(!valid && "DSAA executed twice without being invalidated?");
+      valid = true;
       return false;
     }
 
+
+    void releaseMemory() {
+      valid = false;
+      TD = NULL;
+      BU = NULL;
+      InvalidateCache();
+    }
+
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
       AliasAnalysis::getAnalysisUsage(AU);
       AU.setPreservesAll();                         // Does not transform code
@@ -91,12 +104,14 @@
     }
 
     virtual void deleteValue(Value *V) {
+      assert(valid && "DSAA invalidated but then queried?!");
       InvalidateCache();
       BU->deleteValue(V);
       TD->deleteValue(V);
     }
 
     virtual void copyValue(Value *From, Value *To) {
+      assert(valid && "DSAA invalidated but then queried?!");
       if (From == To) return;
       InvalidateCache();
       BU->copyValue(From, To);
@@ -133,6 +148,7 @@
 
 AliasAnalysis::AliasResult DSAA::alias(const Value *V1, unsigned V1Size,
                                        const Value *V2, unsigned V2Size) {
+  assert(valid && "DSAA invalidated but then queried?!");
   if (V1 == V2) return MustAlias;
 
   DSGraph *G1 = getGraphForValue(V1);
@@ -183,6 +199,7 @@
 ///
 AliasAnalysis::ModRefResult
 DSAA::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
+  assert(valid && "DSAA invalidated but then queried?!");
   DSNode *N = 0;
   // First step, check our cache.
   if (CS.getInstruction() == MapCS.getInstruction()) {





More information about the llvm-commits mailing list