[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