#define LLVM_CODEGEN_MACHINEMODULEINFO_H
#include "llvm/Support/Dwarf.h"
-#include "llvm/Support/DataTypes.h"
+#include "llvm/System/DataTypes.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/UniqueVector.h"
#include "llvm/CodeGen/MachineLocation.h"
#include "llvm/GlobalValue.h"
#include "llvm/Pass.h"
+#include "llvm/Metadata.h"
+#include "llvm/Support/ValueHandle.h"
namespace llvm {
/// llvm.compiler.used.
SmallPtrSet<const Function *, 32> UsedFunctions;
- /// UsedDbgLabels - labels are used by debug info entries.
- SmallSet<unsigned, 8> UsedDbgLabels;
-
bool CallsEHReturn;
bool CallsUnwindInit;
public:
static char ID; // Pass identification, replacement for typeid
- typedef DenseMap<MDNode *, std::pair<MDNode *, unsigned> > VariableDbgInfoMapTy;
+ typedef std::pair<unsigned, TrackingVH<MDNode> > UnsignedAndMDNodePair;
+ typedef SmallVector< std::pair<TrackingVH<MDNode>, UnsignedAndMDNodePair>, 4>
+ VariableDbgInfoMapTy;
VariableDbgInfoMapTy VariableDbgInfo;
MachineModuleInfo();
Ty &getObjFileInfo() {
if (ObjFileMMI == 0)
ObjFileMMI = new Ty(*this);
-
- assert((void*)dynamic_cast<Ty*>(ObjFileMMI) == (void*)ObjFileMMI &&
- "Invalid concrete type or multiple inheritence for getInfo");
return *static_cast<Ty*>(ObjFileMMI);
}
return LabelID ? LabelIDList[LabelID - 1] : 0;
}
- /// isDbgLabelUsed - Return true if label with LabelID is used by
- /// DwarfWriter.
- bool isDbgLabelUsed(unsigned LabelID) {
- return UsedDbgLabels.count(LabelID);
- }
-
- /// RecordUsedDbgLabel - Mark label with LabelID as used. This is used
- /// by DwarfWriter to inform DebugLabelFolder that certain labels are
- /// not to be deleted.
- void RecordUsedDbgLabel(unsigned LabelID) {
- UsedDbgLabels.insert(LabelID);
- }
-
/// getFrameMoves - Returns a reference to a list of moves done in the current
/// function's prologue. Used to construct frame maps for debug and exception
/// handling comsumers.
/// setVariableDbgInfo - Collect information used to emit debugging information
/// of a variable.
- void setVariableDbgInfo(MDNode *N, MDNode *L, unsigned S) {
- if (N && L)
- VariableDbgInfo[N] = std::make_pair(L, S);
+ void setVariableDbgInfo(MDNode *N, unsigned Slot, MDNode *Scope) {
+ VariableDbgInfo.push_back(std::make_pair(N, std::make_pair(Slot, Scope)));
}
VariableDbgInfoMapTy &getVariableDbgInfo() { return VariableDbgInfo; }