[llvm-commits] [poolalloc] r130276 - in /poolalloc/trunk: include/dsa/DSSupport.h lib/DSA/DSGraph.cpp
Will Dietz
wdietz2 at illinois.edu
Tue Apr 26 20:00:03 PDT 2011
Author: wdietz2
Date: Tue Apr 26 22:00:03 2011
New Revision: 130276
URL: http://llvm.org/viewvc/llvm-project?rev=130276&view=rev
Log:
Switch MappedSites from vector to set. Significantly reduces memory, runtime.
If MappedSites is too expensive later/still, perhaps use SuperSet.
Allows running -dsa-bu on 176.gcc in 85s and 4G on gravity.
(Without this change, it ran for 24 minutes using 7G before I got bored)
DSA still runs out of memory in -dsa-cbu on 176.gcc (so no poolalloc).
Other than more appropriate datastructure, no functionality changed.
Modified:
poolalloc/trunk/include/dsa/DSSupport.h
poolalloc/trunk/lib/DSA/DSGraph.cpp
Modified: poolalloc/trunk/include/dsa/DSSupport.h
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/include/dsa/DSSupport.h?rev=130276&r1=130275&r2=130276&view=diff
==============================================================================
--- poolalloc/trunk/include/dsa/DSSupport.h (original)
+++ poolalloc/trunk/include/dsa/DSSupport.h Tue Apr 26 22:00:03 2011
@@ -156,13 +156,16 @@
/// the DSNode handles for the function arguments.
///
class DSCallSite {
+public:
+ typedef std::set<CallSite> MappedSites_t;
+private:
CallSite Site; // Actual call site
const Function *CalleeF; // The function called (direct call)
DSNodeHandle CalleeN; // The function node called (indirect call)
DSNodeHandle RetVal; // Returned value
DSNodeHandle VarArgVal; // Merged var-arg val
std::vector<DSNodeHandle> CallArgs; // The pointer arguments
- std::vector<CallSite> MappedSites; // The merged callsites
+ MappedSites_t MappedSites; // The merged callsites
static void InitNH(DSNodeHandle &NH, const DSNodeHandle &Src,
const std::map<const DSNode*, DSNode*> &NodeMap) {
@@ -226,9 +229,7 @@
CallArgs.resize(FromCall.CallArgs.size());
for (unsigned i = 0, e = FromCall.CallArgs.size(); i != e; ++i)
InitNH(CallArgs[i], FromCall.CallArgs[i], NodeMap);
- MappedSites.resize(FromCall.MappedSites.size());
- for (unsigned i = 0, e = FromCall.MappedSites.size(); i != e; ++i)
- MappedSites[i] = FromCall.MappedSites[i];
+ MappedSites = FromCall.MappedSites;
}
const DSCallSite &operator=(const DSCallSite &RHS) {
@@ -278,14 +279,9 @@
return CallArgs[i];
}
- CallSite &getMappedCallSite(unsigned i) {
- assert(i < MappedSites.size() && "Argument to getMappedCallSite is out of range!");
- return MappedSites[i];
- }
- const CallSite &getMappedCallSite(unsigned i) const {
- assert(i < MappedSites.size() && "Argument to getMappedCallSite is out of range!");
- return MappedSites[i];
- }
+
+ const MappedSites_t::iterator ms_begin() const { return MappedSites.begin(); }
+ const MappedSites_t::iterator ms_end() const { return MappedSites.end(); }
void addPtrArg(const DSNodeHandle &NH) {
CallArgs.push_back(NH);
@@ -318,9 +314,8 @@
for (unsigned a = MinArgs, e = CS.getNumPtrArgs(); a != e; ++a)
CallArgs.push_back(CS.getPtrArg(a));
- MappedSites.push_back(CS.getCallSite());
- for (unsigned a = 0, e = CS.MappedSites.size(); a != e; ++a)
- MappedSites.push_back(CS.MappedSites[a]);
+ MappedSites.insert(CS.getCallSite());
+ MappedSites.insert(CS.ms_begin(), CS.ms_end());
}
/// markReachableNodes - This method recursively traverses the specified
Modified: poolalloc/trunk/lib/DSA/DSGraph.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DSGraph.cpp?rev=130276&r1=130275&r2=130276&view=diff
==============================================================================
--- poolalloc/trunk/lib/DSA/DSGraph.cpp (original)
+++ poolalloc/trunk/lib/DSA/DSGraph.cpp Tue Apr 26 22:00:03 2011
@@ -1650,8 +1650,8 @@
//
const std::list<DSCallSite>& Calls = getFunctionCalls();
for (std::list<DSCallSite>::const_iterator ii = Calls.begin(),
- ee = Calls.end();
- ii != ee; ++ii) {
+ ee = Calls.end();
+ ii != ee; ++ii) {
//
// Direct calls are easy. We know to where they go.
//
@@ -1685,18 +1685,20 @@
DCG.insert(CS, *Fi);
else
++NumFiltered;
- for (unsigned i = 0; i < ii->getNumMappedSites(); i++) {
- CallSite MCS = ii->getMappedCallSite(i);
- for (std::vector<const Function*>::iterator Fi = MaybeTargets.begin(),
+ for (DSCallSite::MappedSites_t::iterator I = ii->ms_begin(),
+ E = ii->ms_end(); I != E; ++I) {
+ CallSite MCS = *I;
+ for (std::vector<const Function*>::iterator Fi = MaybeTargets.begin(),
Fe = MaybeTargets.end(); Fi != Fe; ++Fi)
if (!filter || functionIsCallable(MCS, *Fi))
DCG.insert(MCS, *Fi);
else
++NumFiltered;
- }
+ }
}
}
}
+
void DSGraph::buildCompleteCallGraph(DSCallGraph& DCG,
std::vector<const Function*>& GlobalFunctionList, bool filter) const {
//
@@ -1724,10 +1726,12 @@
DCG.insert(CS, *Fi);
else
++NumFiltered;
- for (unsigned i = 0; i < ii->getNumMappedSites(); i++) {
- CallSite MCS = ii->getMappedCallSite(i);
+
+ for (DSCallSite::MappedSites_t::iterator I = ii->ms_begin(),
+ E = ii->ms_end(); I != E; ++I) {
+ CallSite MCS = *I;
for (std::vector<const Function*>::iterator Fi = MaybeTargets.begin(),
- Fe = MaybeTargets.end(); Fi != Fe; ++Fi){
+ Fe = MaybeTargets.end(); Fi != Fe; ++Fi) {
if (!filter || functionIsCallable(MCS, *Fi))
DCG.insert(MCS, *Fi);
else
More information about the llvm-commits
mailing list