return C->getNumOperands();
}
+/// replaceAllUsesWith - Replace all uses of debug info referenced by
+/// this descriptor. After this completes, the current debug info value
+/// is erased.
+void DIDerivedType::replaceAllUsesWith(DIDescriptor &D) {
+ if (isNull())
+ return;
+
+ assert (!D.isNull() && "Can not replace with null");
+ getGV()->replaceAllUsesWith(D.getGV());
+ getGV()->eraseFromParent();
+}
+
/// Verify - Verify that a compile unit is well formed.
bool DICompileUnit::Verify() const {
if (isNull())
//===----------------------------------------------------------------------===//
DIFactory::DIFactory(Module &m)
- : M(m), StopPointFn(0), FuncStartFn(0), RegionStartFn(0), RegionEndFn(0),
+ : M(m), VMContext(M.getContext()), StopPointFn(0), FuncStartFn(0),
+ RegionStartFn(0), RegionEndFn(0),
DeclareFn(0) {
- EmptyStructPtr =
- M.getContext().getPointerTypeUnqual(M.getContext().getStructType());
+ EmptyStructPtr = VMContext.getPointerTypeUnqual(VMContext.getStructType());
}
/// getCastToEmpty - Return this descriptor as a Constant* with type '{}*'.
/// This is only valid when the descriptor is non-null.
Constant *DIFactory::getCastToEmpty(DIDescriptor D) {
- if (D.isNull()) return M.getContext().getNullValue(EmptyStructPtr);
- return M.getContext().getConstantExprBitCast(D.getGV(), EmptyStructPtr);
+ if (D.isNull()) return VMContext.getNullValue(EmptyStructPtr);
+ return VMContext.getConstantExprBitCast(D.getGV(), EmptyStructPtr);
}
Constant *DIFactory::GetTagConstant(unsigned TAG) {
// Return Constant if previously defined.
if (Slot) return Slot;
- const PointerType *DestTy = M.getContext().getPointerTypeUnqual(Type::Int8Ty);
+ const PointerType *DestTy = VMContext.getPointerTypeUnqual(Type::Int8Ty);
// If empty string then use a i8* null instead.
if (String.empty())
- return Slot = M.getContext().getConstantPointerNull(DestTy);
+ return Slot = VMContext.getConstantPointerNull(DestTy);
// Construct string as an llvm constant.
- Constant *ConstStr = M.getContext().getConstantArray(String);
+ Constant *ConstStr = VMContext.getConstantArray(String);
// Otherwise create and return a new string global.
- GlobalVariable *StrGV = new GlobalVariable(ConstStr->getType(), true,
+ GlobalVariable *StrGV = new GlobalVariable(M, ConstStr->getType(), true,
GlobalVariable::InternalLinkage,
- ConstStr, ".str", &M);
+ ConstStr, ".str");
StrGV->setSection("llvm.metadata");
- return Slot = M.getContext().getConstantExprBitCast(StrGV, DestTy);
+ return Slot = VMContext.getConstantExprBitCast(StrGV, DestTy);
}
//===----------------------------------------------------------------------===//
DIArray DIFactory::GetOrCreateArray(DIDescriptor *Tys, unsigned NumTys) {
SmallVector<Constant*, 16> Elts;
- LLVMContext& Ctxt = M.getContext();
-
for (unsigned i = 0; i != NumTys; ++i)
Elts.push_back(getCastToEmpty(Tys[i]));
- Constant *Init = Ctxt.getConstantArray(Ctxt.getArrayType(EmptyStructPtr,
+ Constant *Init = VMContext.getConstantArray(VMContext.getArrayType(EmptyStructPtr,
Elts.size()),
Elts.data(), Elts.size());
// If we already have this array, just return the uniqued version.
DIDescriptor &Entry = SimpleConstantCache[Init];
if (!Entry.isNull()) return DIArray(Entry.getGV());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.array", &M);
+ Init, "llvm.dbg.array");
GV->setSection("llvm.metadata");
Entry = DIDescriptor(GV);
return DIArray(GV);
DISubrange DIFactory::GetOrCreateSubrange(int64_t Lo, int64_t Hi) {
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_subrange_type),
- M.getContext().getConstantInt(Type::Int64Ty, Lo),
- M.getContext().getConstantInt(Type::Int64Ty, Hi)
+ ConstantInt::get(Type::Int64Ty, Lo),
+ ConstantInt::get(Type::Int64Ty, Hi)
};
- Constant *Init =
- M.getContext().getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
// If we already have this range, just return the uniqued version.
DIDescriptor &Entry = SimpleConstantCache[Init];
M.addTypeName("llvm.dbg.subrange.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.subrange", &M);
+ Init, "llvm.dbg.subrange");
GV->setSection("llvm.metadata");
Entry = DIDescriptor(GV);
return DISubrange(GV);
bool isOptimized,
const char *Flags,
unsigned RunTimeVer) {
- LLVMContext& Ctxt = M.getContext();
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_compile_unit),
- Ctxt.getNullValue(EmptyStructPtr),
- Ctxt.getConstantInt(Type::Int32Ty, LangID),
+ VMContext.getNullValue(EmptyStructPtr),
+ ConstantInt::get(Type::Int32Ty, LangID),
GetStringConstant(Filename),
GetStringConstant(Directory),
GetStringConstant(Producer),
- Ctxt.getConstantInt(Type::Int1Ty, isMain),
- Ctxt.getConstantInt(Type::Int1Ty, isOptimized),
+ ConstantInt::get(Type::Int1Ty, isMain),
+ ConstantInt::get(Type::Int1Ty, isOptimized),
GetStringConstant(Flags),
- Ctxt.getConstantInt(Type::Int32Ty, RunTimeVer)
+ ConstantInt::get(Type::Int32Ty, RunTimeVer)
};
- Constant *Init =
- Ctxt.getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.compile_unit.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::LinkOnceAnyLinkage,
- Init, "llvm.dbg.compile_unit", &M);
+ Init, "llvm.dbg.compile_unit");
GV->setSection("llvm.metadata");
return DICompileUnit(GV);
}
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_enumerator),
GetStringConstant(Name),
- M.getContext().getConstantInt(Type::Int64Ty, Val)
+ ConstantInt::get(Type::Int64Ty, Val)
};
- Constant *Init =
- M.getContext().getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.enumerator.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.enumerator", &M);
+ Init, "llvm.dbg.enumerator");
GV->setSection("llvm.metadata");
return DIEnumerator(GV);
}
uint64_t AlignInBits,
uint64_t OffsetInBits, unsigned Flags,
unsigned Encoding) {
-
- LLVMContext& Ctxt = M.getContext();
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_base_type),
getCastToEmpty(Context),
GetStringConstant(Name),
getCastToEmpty(CompileUnit),
- Ctxt.getConstantInt(Type::Int32Ty, LineNumber),
- Ctxt.getConstantInt(Type::Int64Ty, SizeInBits),
- Ctxt.getConstantInt(Type::Int64Ty, AlignInBits),
- Ctxt.getConstantInt(Type::Int64Ty, OffsetInBits),
- Ctxt.getConstantInt(Type::Int32Ty, Flags),
- Ctxt.getConstantInt(Type::Int32Ty, Encoding)
+ ConstantInt::get(Type::Int32Ty, LineNumber),
+ ConstantInt::get(Type::Int64Ty, SizeInBits),
+ ConstantInt::get(Type::Int64Ty, AlignInBits),
+ ConstantInt::get(Type::Int64Ty, OffsetInBits),
+ ConstantInt::get(Type::Int32Ty, Flags),
+ ConstantInt::get(Type::Int32Ty, Encoding)
};
- Constant *Init =
- Ctxt.getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.basictype.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.basictype", &M);
+ Init, "llvm.dbg.basictype");
GV->setSection("llvm.metadata");
return DIBasicType(GV);
}
uint64_t OffsetInBits,
unsigned Flags,
DIType DerivedFrom) {
-
- LLVMContext& Ctxt = M.getContext();
Constant *Elts[] = {
GetTagConstant(Tag),
getCastToEmpty(Context),
GetStringConstant(Name),
getCastToEmpty(CompileUnit),
- Ctxt.getConstantInt(Type::Int32Ty, LineNumber),
- Ctxt.getConstantInt(Type::Int64Ty, SizeInBits),
- Ctxt.getConstantInt(Type::Int64Ty, AlignInBits),
- Ctxt.getConstantInt(Type::Int64Ty, OffsetInBits),
- Ctxt.getConstantInt(Type::Int32Ty, Flags),
+ ConstantInt::get(Type::Int32Ty, LineNumber),
+ ConstantInt::get(Type::Int64Ty, SizeInBits),
+ ConstantInt::get(Type::Int64Ty, AlignInBits),
+ ConstantInt::get(Type::Int64Ty, OffsetInBits),
+ ConstantInt::get(Type::Int32Ty, Flags),
getCastToEmpty(DerivedFrom)
};
- Constant *Init =
- Ctxt.getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.derivedtype.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.derivedtype", &M);
+ Init, "llvm.dbg.derivedtype");
GV->setSection("llvm.metadata");
return DIDerivedType(GV);
}
DIType DerivedFrom,
DIArray Elements,
unsigned RuntimeLang) {
- LLVMContext& Ctxt = M.getContext();
+
Constant *Elts[] = {
GetTagConstant(Tag),
getCastToEmpty(Context),
GetStringConstant(Name),
getCastToEmpty(CompileUnit),
- Ctxt.getConstantInt(Type::Int32Ty, LineNumber),
- Ctxt.getConstantInt(Type::Int64Ty, SizeInBits),
- Ctxt.getConstantInt(Type::Int64Ty, AlignInBits),
- Ctxt.getConstantInt(Type::Int64Ty, OffsetInBits),
- Ctxt.getConstantInt(Type::Int32Ty, Flags),
+ ConstantInt::get(Type::Int32Ty, LineNumber),
+ ConstantInt::get(Type::Int64Ty, SizeInBits),
+ ConstantInt::get(Type::Int64Ty, AlignInBits),
+ ConstantInt::get(Type::Int64Ty, OffsetInBits),
+ ConstantInt::get(Type::Int32Ty, Flags),
getCastToEmpty(DerivedFrom),
getCastToEmpty(Elements),
- Ctxt.getConstantInt(Type::Int32Ty, RuntimeLang)
+ ConstantInt::get(Type::Int32Ty, RuntimeLang)
};
- Constant *Init =
- Ctxt.getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.composite.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.composite", &M);
+ Init, "llvm.dbg.composite");
GV->setSection("llvm.metadata");
return DICompositeType(GV);
}
bool isLocalToUnit,
bool isDefinition) {
- LLVMContext& Ctxt = M.getContext();
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_subprogram),
- Ctxt.getNullValue(EmptyStructPtr),
+ VMContext.getNullValue(EmptyStructPtr),
getCastToEmpty(Context),
GetStringConstant(Name),
GetStringConstant(DisplayName),
GetStringConstant(LinkageName),
getCastToEmpty(CompileUnit),
- Ctxt.getConstantInt(Type::Int32Ty, LineNo),
+ ConstantInt::get(Type::Int32Ty, LineNo),
getCastToEmpty(Type),
- Ctxt.getConstantInt(Type::Int1Ty, isLocalToUnit),
- Ctxt.getConstantInt(Type::Int1Ty, isDefinition)
+ ConstantInt::get(Type::Int1Ty, isLocalToUnit),
+ ConstantInt::get(Type::Int1Ty, isDefinition)
};
- Constant *Init =
- Ctxt.getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.subprogram.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::LinkOnceAnyLinkage,
- Init, "llvm.dbg.subprogram", &M);
+ Init, "llvm.dbg.subprogram");
GV->setSection("llvm.metadata");
return DISubprogram(GV);
}
DICompileUnit CompileUnit,
unsigned LineNo, DIType Type,bool isLocalToUnit,
bool isDefinition, llvm::GlobalVariable *Val) {
-
- LLVMContext& Ctxt = M.getContext();
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_variable),
- Ctxt.getNullValue(EmptyStructPtr),
+ VMContext.getNullValue(EmptyStructPtr),
getCastToEmpty(Context),
GetStringConstant(Name),
GetStringConstant(DisplayName),
GetStringConstant(LinkageName),
getCastToEmpty(CompileUnit),
- Ctxt.getConstantInt(Type::Int32Ty, LineNo),
+ ConstantInt::get(Type::Int32Ty, LineNo),
getCastToEmpty(Type),
- Ctxt.getConstantInt(Type::Int1Ty, isLocalToUnit),
- Ctxt.getConstantInt(Type::Int1Ty, isDefinition),
- Ctxt.getConstantExprBitCast(Val, EmptyStructPtr)
+ ConstantInt::get(Type::Int1Ty, isLocalToUnit),
+ ConstantInt::get(Type::Int1Ty, isDefinition),
+ VMContext.getConstantExprBitCast(Val, EmptyStructPtr)
};
- Constant *Init =
- Ctxt.getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.global_variable.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::LinkOnceAnyLinkage,
- Init, "llvm.dbg.global_variable", &M);
+ Init, "llvm.dbg.global_variable");
GV->setSection("llvm.metadata");
return DIGlobalVariable(GV);
}
const std::string &Name,
DICompileUnit CompileUnit, unsigned LineNo,
DIType Type) {
- LLVMContext& Ctxt = M.getContext();
-
Constant *Elts[] = {
GetTagConstant(Tag),
getCastToEmpty(Context),
GetStringConstant(Name),
getCastToEmpty(CompileUnit),
- Ctxt.getConstantInt(Type::Int32Ty, LineNo),
+ ConstantInt::get(Type::Int32Ty, LineNo),
getCastToEmpty(Type)
};
- Constant *Init =
- Ctxt.getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.variable.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.variable", &M);
+ Init, "llvm.dbg.variable");
GV->setSection("llvm.metadata");
return DIVariable(GV);
}
/// CreateBlock - This creates a descriptor for a lexical block with the
-/// specified parent context.
+/// specified parent VMContext.
DIBlock DIFactory::CreateBlock(DIDescriptor Context) {
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_lexical_block),
getCastToEmpty(Context)
};
- Constant *Init =
- M.getContext().getConstantStruct(Elts, sizeof(Elts)/sizeof(Elts[0]));
+ Constant *Init = VMContext.getConstantStruct(Elts,
+ sizeof(Elts)/sizeof(Elts[0]));
M.addTypeName("llvm.dbg.block.type", Init->getType());
- GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
+ GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true,
GlobalValue::InternalLinkage,
- Init, "llvm.dbg.block", &M);
+ Init, "llvm.dbg.block");
GV->setSection("llvm.metadata");
return DIBlock(GV);
}
// Invoke llvm.dbg.stoppoint
Value *Args[] = {
- M.getContext().getConstantInt(llvm::Type::Int32Ty, LineNo),
- M.getContext().getConstantInt(llvm::Type::Int32Ty, ColNo),
+ ConstantInt::get(llvm::Type::Int32Ty, LineNo),
+ ConstantInt::get(llvm::Type::Int32Ty, ColNo),
getCastToEmpty(CU)
};
CallInst::Create(StopPointFn, Args, Args+3, "", BB);
Value *findDbgGlobalDeclare(GlobalVariable *V) {
const Module *M = V->getParent();
+ LLVMContext& Context = M->getContext();
+
const Type *Ty = M->getTypeByName("llvm.dbg.global_variable.type");
if (!Ty) return 0;
- Ty = V->getParent()->getContext().getPointerType(Ty, 0);
+ Ty = Context.getPointerType(Ty, 0);
Value *Val = V->stripPointerCasts();
for (Value::use_iterator I = Val->use_begin(), E = Val->use_end();