[llvm-commits] [poolalloc] r124335 - in /poolalloc/trunk: include/dsa/DSCallGraph.h lib/DSA/DSCallGraph.cpp

Arushi Aggarwal aggarwa4 at illinois.edu
Wed Jan 26 15:36:36 PST 2011


Author: aggarwa4
Date: Wed Jan 26 17:36:36 2011
New Revision: 124335

URL: http://llvm.org/viewvc/llvm-project?rev=124335&view=rev
Log:
Add a function to get all the functions callable
from a given call site.

Modified:
    poolalloc/trunk/include/dsa/DSCallGraph.h
    poolalloc/trunk/lib/DSA/DSCallGraph.cpp

Modified: poolalloc/trunk/include/dsa/DSCallGraph.h
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/include/dsa/DSCallGraph.h?rev=124335&r1=124334&r2=124335&view=diff
==============================================================================
--- poolalloc/trunk/include/dsa/DSCallGraph.h (original)
+++ poolalloc/trunk/include/dsa/DSCallGraph.h Wed Jan 26 17:36:36 2011
@@ -185,6 +185,8 @@
   void buildRoots();
   
   void buildIncompleteCalleeSet(svset<const llvm::Function*> callees);
+  
+  void addFullFunctionList(llvm::CallSite CS, std::vector<const llvm::Function*> &List) const;
 
   void dump();
 

Modified: poolalloc/trunk/lib/DSA/DSCallGraph.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DSCallGraph.cpp?rev=124335&r1=124334&r2=124335&view=diff
==============================================================================
--- poolalloc/trunk/lib/DSA/DSCallGraph.cpp (original)
+++ poolalloc/trunk/lib/DSA/DSCallGraph.cpp Wed Jan 26 17:36:36 2011
@@ -12,6 +12,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "dsa/DSCallGraph.h"
+#include "dsa/DataStructure.h"
+#include "dsa/DSGraph.h"
 
 #include "llvm/Function.h"
 #include "llvm/DerivedTypes.h"
@@ -20,6 +22,8 @@
 
 #include <algorithm>
 
+using namespace llvm;
+
 static bool _hasPointers(const llvm::FunctionType* T) {
   if (T->isVarArg()) return true;
   if (T->getReturnType()->isPointerTy()) return true;
@@ -253,3 +257,25 @@
 void DSCallGraph::insureEntry(const llvm::Function* F) {
   SimpleCallees[F];
 }
+
+void DSCallGraph::addFullFunctionList(llvm::CallSite CS, 
+                    std::vector<const llvm::Function*> &List) const {
+  DSCallGraph::callee_iterator csi = callee_begin(CS),
+                               cse = callee_end(CS);
+  while(csi != cse) {
+    const Function *F = *csi;        
+    DSCallGraph::scc_iterator sccii = scc_begin(F),
+                              sccee = scc_end(F);
+    for(;sccii != sccee; ++sccii) {
+      List.push_back (*sccii);
+    }
+    ++csi;
+  }
+  const Function *F1 = CS.getInstruction()->getParent()->getParent();
+  F1 = sccLeader(&*F1);
+  DSCallGraph::scc_iterator sccii = scc_begin(F1),
+                            sccee = scc_end(F1);
+  for(;sccii != sccee; ++sccii) {
+    List.push_back (*sccii);
+  }
+}





More information about the llvm-commits mailing list