[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