diff --git a/include/llvm/Analysis/DataStructure.h b/include/llvm/Analysis/DataStructure.h index 404ddc8f47b..f154a6e629c 100644 --- a/include/llvm/Analysis/DataStructure.h +++ b/include/llvm/Analysis/DataStructure.h @@ -11,11 +11,11 @@ class Type; class DSGraph; +class DSNodeHandle; class LocalDataStructures; // A collection of local graphs for a program class BUDataStructures; // A collection of bu graphs for a program class TDDataStructures; // A collection of td graphs for a program - // FIXME: move this stuff to a private header namespace DataStructureAnalysis { // isPointerType - Return true if this first class type is big enough to hold @@ -63,8 +63,19 @@ public: // only performs a "Bottom Up" propogation (hence the name). // class BUDataStructures : public Pass { +public: + struct CallSite { + Function *Caller; + std::vector Context; + + CallSite(Function &C, const std::vector &Con) + : Caller(&C), Context(Con) {} + }; + +private: // DSInfo, one graph for each function std::map DSInfo; + std::map > CallSites; public: ~BUDataStructures() { releaseMemory(); } @@ -77,6 +88,12 @@ public: return *I->second; } + const std::vector *getCallSites(const Function &F) const { + std::map >::const_iterator I + = CallSites.find(&F); + return I != CallSites.end() ? &I->second : 0; + } + // print - Print out the analysis results... void print(std::ostream &O, const Module *M) const; @@ -92,8 +109,6 @@ private: DSGraph &calculateGraph(Function &F); }; - -#if 0 // TDDataStructures - Analysis that computes new data structure graphs // for each function using the closed graphs for the callers computed // by the bottom-up pass. @@ -126,11 +141,10 @@ public: } private: DSGraph &calculateGraph(Function &F); - void pushGraphIntoCallee(DSGraph &callerGraph, DSGraph &calleeGraph, - std::map &OldValMap, - std::map &OldNodeMap); + + void ResolveCallSite(DSGraph &Graph, + const BUDataStructures::CallSite &CallSite); }; -#endif #if 0 // GlobalDSGraph - A common graph for all the globals and their outgoing links diff --git a/include/llvm/Analysis/DataStructure/DataStructure.h b/include/llvm/Analysis/DataStructure/DataStructure.h index 404ddc8f47b..f154a6e629c 100644 --- a/include/llvm/Analysis/DataStructure/DataStructure.h +++ b/include/llvm/Analysis/DataStructure/DataStructure.h @@ -11,11 +11,11 @@ class Type; class DSGraph; +class DSNodeHandle; class LocalDataStructures; // A collection of local graphs for a program class BUDataStructures; // A collection of bu graphs for a program class TDDataStructures; // A collection of td graphs for a program - // FIXME: move this stuff to a private header namespace DataStructureAnalysis { // isPointerType - Return true if this first class type is big enough to hold @@ -63,8 +63,19 @@ public: // only performs a "Bottom Up" propogation (hence the name). // class BUDataStructures : public Pass { +public: + struct CallSite { + Function *Caller; + std::vector Context; + + CallSite(Function &C, const std::vector &Con) + : Caller(&C), Context(Con) {} + }; + +private: // DSInfo, one graph for each function std::map DSInfo; + std::map > CallSites; public: ~BUDataStructures() { releaseMemory(); } @@ -77,6 +88,12 @@ public: return *I->second; } + const std::vector *getCallSites(const Function &F) const { + std::map >::const_iterator I + = CallSites.find(&F); + return I != CallSites.end() ? &I->second : 0; + } + // print - Print out the analysis results... void print(std::ostream &O, const Module *M) const; @@ -92,8 +109,6 @@ private: DSGraph &calculateGraph(Function &F); }; - -#if 0 // TDDataStructures - Analysis that computes new data structure graphs // for each function using the closed graphs for the callers computed // by the bottom-up pass. @@ -126,11 +141,10 @@ public: } private: DSGraph &calculateGraph(Function &F); - void pushGraphIntoCallee(DSGraph &callerGraph, DSGraph &calleeGraph, - std::map &OldValMap, - std::map &OldNodeMap); + + void ResolveCallSite(DSGraph &Graph, + const BUDataStructures::CallSite &CallSite); }; -#endif #if 0 // GlobalDSGraph - A common graph for all the globals and their outgoing links