aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/llvm/CodeGen/MachineModuleInfo.h20
-rw-r--r--include/llvm/Function.h17
2 files changed, 34 insertions, 3 deletions
diff --git a/include/llvm/CodeGen/MachineModuleInfo.h b/include/llvm/CodeGen/MachineModuleInfo.h
index e9b645b..192f37d 100644
--- a/include/llvm/CodeGen/MachineModuleInfo.h
+++ b/include/llvm/CodeGen/MachineModuleInfo.h
@@ -113,7 +113,11 @@ class MachineModuleInfo : public ImmutablePass {
// LandingPads - List of LandingPadInfo describing the landing pad information
// in the current function.
std::vector<LandingPadInfo> LandingPads;
-
+
+ // Map of invoke call site index values to associated begin EH_LABEL for
+ // the current function.
+ DenseMap<unsigned, unsigned> CallSiteMap;
+
// TypeInfos - List of C++ TypeInfo used in the current function.
//
std::vector<GlobalVariable *> TypeInfos;
@@ -301,7 +305,19 @@ public:
const std::vector<LandingPadInfo> &getLandingPads() const {
return LandingPads;
}
-
+
+ /// setCallSiteBeginLabel - Map the begin label for a call site
+ void setCallSiteBeginLabel(unsigned BeginLabel, unsigned Site) {
+ CallSiteMap[BeginLabel] = Site;
+ }
+
+ /// getCallSiteBeginLabel - Get the call site number for a begin label
+ unsigned getCallSiteBeginLabel(unsigned BeginLabel) {
+ assert(CallSiteMap.count(BeginLabel) &&
+ "Missing call site number for EH_LABEL!");
+ return CallSiteMap[BeginLabel];
+ }
+
/// getTypeInfos - Return a reference to the C++ typeinfo for the current
/// function.
const std::vector<GlobalVariable *> &getTypeInfos() const {
diff --git a/include/llvm/Function.h b/include/llvm/Function.h
index 3882233..72cb267 100644
--- a/include/llvm/Function.h
+++ b/include/llvm/Function.h
@@ -24,6 +24,7 @@
#include "llvm/Argument.h"
#include "llvm/Attributes.h"
#include "llvm/Support/Compiler.h"
+#include "llvm/ADT/DenseMap.h"
namespace llvm {
@@ -86,6 +87,8 @@ private:
mutable ArgumentListType ArgumentList; ///< The formal arguments
ValueSymbolTable *SymTab; ///< Symbol table of args/instructions
AttrListPtr AttributeList; ///< Parameter attributes
+ DenseMap<Instruction*, unsigned>
+ CallSiteNumbering; ///< SjLj EH call site numbering
// HasLazyArguments is stored in Value::SubclassData.
/*bool HasLazyArguments;*/
@@ -165,7 +168,19 @@ public:
setValueSubclassData((getSubclassDataFromValue() & 1) |
(static_cast<unsigned>(CC) << 1));
}
-
+
+ /// setCallSiteNumber - Set the call site number mapping for an invoke
+ /// in the function
+ void setCallSiteNumber(Instruction *II, unsigned Num) {
+ CallSiteNumbering[II] = Num;
+ }
+
+ /// getCallSiteNumber - Get the call site number for an invoke instruction
+ unsigned getCallSiteNumber(Instruction *II) {
+ if (CallSiteNumbering.count(II) == 0) return 0;
+ return CallSiteNumbering[II];
+ }
+
/// getAttributes - Return the attribute list for this Function.
///
const AttrListPtr &getAttributes() const { return AttributeList; }