[llvm-commits] CVS: llvm/include/llvm/Analysis/DSSupport.h DataStructure.h IPModRef.h
Chris Lattner
lattner at cs.uiuc.edu
Sat Sep 20 11:35:00 PDT 2003
Changes in directory llvm/include/llvm/Analysis:
DSSupport.h updated: 1.22 -> 1.23
DataStructure.h updated: 1.70 -> 1.71
IPModRef.h updated: 1.11 -> 1.12
---
Log message:
Switch from using CallInst's to represent call sites to using the LLVM
CallSite class. Now we can represent function calls by invoke instructions
too!
---
Diffs of the changes:
Index: llvm/include/llvm/Analysis/DSSupport.h
diff -u llvm/include/llvm/Analysis/DSSupport.h:1.22 llvm/include/llvm/Analysis/DSSupport.h:1.23
--- llvm/include/llvm/Analysis/DSSupport.h:1.22 Sat Jul 26 17:56:46 2003
+++ llvm/include/llvm/Analysis/DSSupport.h Sat Sep 20 11:34:02 2003
@@ -7,11 +7,9 @@
#ifndef LLVM_ANALYSIS_DSSUPPORT_H
#define LLVM_ANALYSIS_DSSUPPORT_H
-#include <vector>
#include <functional>
-#include <string>
-#include <cassert>
#include "Support/hash_set"
+#include "llvm/Support/CallSite.h"
class Function;
class CallInst;
@@ -127,7 +125,7 @@
/// the DSNode handles for the function arguments.
///
class DSCallSite {
- CallInst *Inst; // Actual call site
+ CallSite Site; // Actual call site
Function *CalleeF; // The function called (direct call)
DSNodeHandle CalleeN; // The function node called (indirect call)
DSNodeHandle RetVal; // Returned value
@@ -160,21 +158,21 @@
/// Constructor. Note - This ctor destroys the argument vector passed in. On
/// exit, the argument vector is empty.
///
- DSCallSite(CallInst &inst, const DSNodeHandle &rv, DSNode *Callee,
+ DSCallSite(CallSite CS, const DSNodeHandle &rv, DSNode *Callee,
std::vector<DSNodeHandle> &Args)
- : Inst(&inst), CalleeF(0), CalleeN(Callee), RetVal(rv) {
+ : Site(CS), CalleeF(0), CalleeN(Callee), RetVal(rv) {
assert(Callee && "Null callee node specified for call site!");
Args.swap(CallArgs);
}
- DSCallSite(CallInst &inst, const DSNodeHandle &rv, Function *Callee,
+ DSCallSite(CallSite CS, const DSNodeHandle &rv, Function *Callee,
std::vector<DSNodeHandle> &Args)
- : Inst(&inst), CalleeF(Callee), RetVal(rv) {
+ : Site(CS), CalleeF(Callee), RetVal(rv) {
assert(Callee && "Null callee function specified for call site!");
Args.swap(CallArgs);
}
DSCallSite(const DSCallSite &DSCS) // Simple copy ctor
- : Inst(DSCS.Inst), CalleeF(DSCS.CalleeF), CalleeN(DSCS.CalleeN),
+ : Site(DSCS.Site), CalleeF(DSCS.CalleeF), CalleeN(DSCS.CalleeN),
RetVal(DSCS.RetVal), CallArgs(DSCS.CallArgs) {}
/// Mapping copy constructor - This constructor takes a preexisting call site
@@ -183,7 +181,7 @@
///
template<typename MapTy>
DSCallSite(const DSCallSite &FromCall, const MapTy &NodeMap) {
- Inst = FromCall.Inst;
+ Site = FromCall.Site;
InitNH(RetVal, FromCall.RetVal, NodeMap);
InitNH(CalleeN, FromCall.CalleeN, NodeMap);
CalleeF = FromCall.CalleeF;
@@ -194,7 +192,7 @@
}
const DSCallSite &operator=(const DSCallSite &RHS) {
- Inst = RHS.Inst;
+ Site = RHS.Site;
CalleeF = RHS.CalleeF;
CalleeN = RHS.CalleeN;
RetVal = RHS.RetVal;
@@ -212,7 +210,7 @@
// Accessor functions...
Function &getCaller() const;
- CallInst &getCallInst() const { return *Inst; }
+ CallSite getCallSite() const { return Site; }
DSNodeHandle &getRetVal() { return RetVal; }
const DSNodeHandle &getRetVal() const { return RetVal; }
@@ -236,7 +234,7 @@
void swap(DSCallSite &CS) {
if (this != &CS) {
- std::swap(Inst, CS.Inst);
+ std::swap(Site, CS.Site);
std::swap(RetVal, CS.RetVal);
std::swap(CalleeN, CS.CalleeN);
std::swap(CalleeF, CS.CalleeF);
Index: llvm/include/llvm/Analysis/DataStructure.h
diff -u llvm/include/llvm/Analysis/DataStructure.h:1.70 llvm/include/llvm/Analysis/DataStructure.h:1.71
--- llvm/include/llvm/Analysis/DataStructure.h:1.70 Sat Jul 26 17:56:46 2003
+++ llvm/include/llvm/Analysis/DataStructure.h Sat Sep 20 11:34:02 2003
@@ -11,10 +11,9 @@
#include "Support/hash_set"
class Type;
-class CallInst;
+class Instruction;
class DSGraph;
class DSNode;
-class DSCallSite;
// FIXME: move this stuff to a private header
namespace DataStructureAnalysis {
@@ -75,7 +74,7 @@
// DSInfo, one graph for each function
hash_map<Function*, DSGraph*> DSInfo;
DSGraph *GlobalsGraph;
- hash_multimap<CallInst*, Function*> ActualCallees;
+ hash_multimap<Instruction*, Function*> ActualCallees;
public:
~BUDataStructures() { releaseMemory(); }
@@ -106,7 +105,7 @@
AU.addRequired<LocalDataStructures>();
}
- typedef hash_multimap<CallInst*, Function*> ActualCalleesTy;
+ typedef hash_multimap<Instruction*, Function*> ActualCalleesTy;
const ActualCalleesTy &getActualCallees() const {
return ActualCallees;
}
Index: llvm/include/llvm/Analysis/IPModRef.h
diff -u llvm/include/llvm/Analysis/IPModRef.h:1.11 llvm/include/llvm/Analysis/IPModRef.h:1.12
--- llvm/include/llvm/Analysis/IPModRef.h:1.11 Sat Jun 21 22:05:45 2003
+++ llvm/include/llvm/Analysis/IPModRef.h Sat Sep 20 11:34:02 2003
@@ -45,7 +45,10 @@
class Module;
class Function;
+class CallSite;
+class Instruction;
class CallInst;
+class InvokeInst;
class DSNode;
class DSGraph;
class DSNodeHandle;
@@ -117,15 +120,15 @@
IPModRef& IPModRefObj; // The IPModRef Object owning this
DSGraph* funcTDGraph; // Top-down DS graph for function
ModRefInfo funcModRefInfo; // ModRefInfo for the function body
- std::map<const CallInst*, ModRefInfo*>
+ std::map<const Instruction*, ModRefInfo*>
callSiteModRefInfo; // ModRefInfo for each callsite
std::map<const DSNode*, unsigned> NodeIds;
friend class IPModRef;
void computeModRef (const Function &func);
- void computeModRef (const CallInst& callInst);
- DSGraph *ResolveCallSiteModRefInfo(CallInst &CI,
+ void computeModRef (CallSite call);
+ DSGraph *ResolveCallSiteModRefInfo(CallSite CS,
hash_map<const DSNode*, DSNodeHandle> &NodeMap);
public:
@@ -145,9 +148,14 @@
return &funcModRefInfo;
}
const ModRefInfo* getModRefInfo (const CallInst& callInst) const {
- std::map<const CallInst*, ModRefInfo*>::const_iterator I =
- callSiteModRefInfo.find(&callInst);
- return (I == callSiteModRefInfo.end())? NULL : I->second;
+ std::map<const Instruction*, ModRefInfo*>::const_iterator I =
+ callSiteModRefInfo.find((Instruction*)&callInst);
+ return (I == callSiteModRefInfo.end()) ? NULL : I->second;
+ }
+ const ModRefInfo* getModRefInfo (const InvokeInst& II) const {
+ std::map<const Instruction*, ModRefInfo*>::const_iterator I =
+ callSiteModRefInfo.find((Instruction*)&II);
+ return (I == callSiteModRefInfo.end()) ? NULL : I->second;
}
// Get the nodeIds used to index all Mod/Ref information for current function
More information about the llvm-commits
mailing list