mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-29 10:25:12 +00:00
Update DebugInfo interface to use metadata, instead of special named llvm.dbg.... global variables, to encode debugging information in llvm IR. This is mostly a mechanical change that tests metadata support very well.
This change speeds up llvm-gcc by more then 6% at "-O0 -g" (measured by compiling InstructionCombining.cpp!) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79977 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
|
||||
//===-- PIC16DebugInfo.cpp - Implementation for PIC16 Debug Information ======//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
@@ -69,7 +70,7 @@ void PIC16DbgInfo::PopulateDerivedTypeInfo (DIType Ty, unsigned short &TypeNo,
|
||||
|
||||
// We also need to encode the the information about the base type of
|
||||
// pointer in TypeNo.
|
||||
DIType BaseType = DIDerivedType(Ty.getGV()).getTypeDerivedFrom();
|
||||
DIType BaseType = DIDerivedType(Ty.getNode()).getTypeDerivedFrom();
|
||||
PopulateDebugInfo(BaseType, TypeNo, HasAux, Aux, TagName);
|
||||
}
|
||||
|
||||
@@ -78,7 +79,7 @@ void PIC16DbgInfo::PopulateArrayTypeInfo (DIType Ty, unsigned short &TypeNo,
|
||||
bool &HasAux, int Aux[],
|
||||
std::string &TagName) {
|
||||
|
||||
DICompositeType CTy = DICompositeType(Ty.getGV());
|
||||
DICompositeType CTy = DICompositeType(Ty.getNode());
|
||||
DIArray Elements = CTy.getTypeArray();
|
||||
unsigned short size = 1;
|
||||
unsigned short Dimension[4]={0,0,0,0};
|
||||
@@ -87,7 +88,7 @@ void PIC16DbgInfo::PopulateArrayTypeInfo (DIType Ty, unsigned short &TypeNo,
|
||||
if (Element.getTag() == dwarf::DW_TAG_subrange_type) {
|
||||
TypeNo = TypeNo << PIC16Dbg::S_DERIVED;
|
||||
TypeNo = TypeNo | PIC16Dbg::DT_ARY;
|
||||
DISubrange SubRange = DISubrange(Element.getGV());
|
||||
DISubrange SubRange = DISubrange(Element.getNode());
|
||||
Dimension[i] = SubRange.getHi() - SubRange.getLo() + 1;
|
||||
// Each dimension is represented by 2 bytes starting at byte 9.
|
||||
Aux[8+i*2+0] = Dimension[i];
|
||||
@@ -110,7 +111,7 @@ void PIC16DbgInfo::PopulateStructOrUnionTypeInfo (DIType Ty,
|
||||
unsigned short &TypeNo,
|
||||
bool &HasAux, int Aux[],
|
||||
std::string &TagName) {
|
||||
DICompositeType CTy = DICompositeType(Ty.getGV());
|
||||
DICompositeType CTy = DICompositeType(Ty.getNode());
|
||||
TypeNo = TypeNo << PIC16Dbg::S_BASIC;
|
||||
if (Ty.getTag() == dwarf::DW_TAG_structure_type)
|
||||
TypeNo = TypeNo | PIC16Dbg::T_STRUCT;
|
||||
@@ -123,7 +124,7 @@ void PIC16DbgInfo::PopulateStructOrUnionTypeInfo (DIType Ty,
|
||||
// llvm.dbg.composite* global variable. Since we need to revisit
|
||||
// PIC16DebugInfo implementation anyways after the MDNodes based
|
||||
// framework is done, let us continue with the way it is.
|
||||
std::string UniqueSuffix = "." + Ty.getGV()->getNameStr().substr(18);
|
||||
std::string UniqueSuffix = "." + Ty.getNode()->getNameStr().substr(18);
|
||||
TagName += UniqueSuffix;
|
||||
unsigned short size = CTy.getSizeInBits()/8;
|
||||
// 7th and 8th byte represent size.
|
||||
@@ -210,11 +211,10 @@ void PIC16DbgInfo::BeginModule(Module &M) {
|
||||
DbgFinder.processModule(M);
|
||||
if (DbgFinder.compile_unit_count() != 0) {
|
||||
// FIXME : What if more then one CUs are present in a module ?
|
||||
GlobalVariable *CU = *DbgFinder.compile_unit_begin();
|
||||
MDNode *CU = *DbgFinder.compile_unit_begin();
|
||||
EmitDebugDirectives = true;
|
||||
SwitchToCU(CU);
|
||||
}
|
||||
|
||||
// Emit debug info for decls of composite types.
|
||||
EmitCompositeTypeDecls(M);
|
||||
}
|
||||
@@ -259,7 +259,7 @@ void PIC16DbgInfo::ChangeDebugLoc(const MachineFunction &MF,
|
||||
if (! EmitDebugDirectives) return;
|
||||
assert (! DL.isUnknown() && "can't change to invalid debug loc");
|
||||
|
||||
GlobalVariable *CU = MF.getDebugLocTuple(DL).CompileUnit;
|
||||
MDNode *CU = MF.getDebugLocTuple(DL).CompileUnit;
|
||||
unsigned line = MF.getDebugLocTuple(DL).Line;
|
||||
|
||||
SwitchToCU(CU);
|
||||
@@ -306,8 +306,7 @@ void PIC16DbgInfo::EmitCompositeTypeElements (DICompositeType CTy,
|
||||
int ElementAux[PIC16Dbg::AuxSize] = { 0 };
|
||||
std::string TagName = "";
|
||||
std::string ElementName;
|
||||
GlobalVariable *GV = Element.getGV();
|
||||
DIDerivedType DITy(GV);
|
||||
DIDerivedType DITy(Element.getNode());
|
||||
DITy.getName(ElementName);
|
||||
unsigned short ElementSize = DITy.getSizeInBits()/8;
|
||||
// Get mangleddd name for this structure/union element.
|
||||
@@ -343,7 +342,7 @@ void PIC16DbgInfo::EmitCompositeTypeDecls(Module &M) {
|
||||
CTy.getName(Name);
|
||||
// Get the number after llvm.dbg.composite and make UniqueSuffix from
|
||||
// it.
|
||||
std::string DIVar = CTy.getGV()->getNameStr();
|
||||
std::string DIVar = CTy.getNode()->getNameStr();
|
||||
std::string UniqueSuffix = "." + DIVar.substr(18);
|
||||
std::string MangledCTyName = Name + UniqueSuffix;
|
||||
unsigned short size = CTy.getSizeInBits()/8;
|
||||
@@ -441,7 +440,7 @@ void PIC16DbgInfo::EmitSymbol(std::string Name, short Class, unsigned short
|
||||
void PIC16DbgInfo::EmitVarDebugInfo(Module &M) {
|
||||
DebugInfoFinder DbgFinder;
|
||||
DbgFinder.processModule(M);
|
||||
|
||||
|
||||
for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
|
||||
E = DbgFinder.global_variable_end(); I != E; ++I) {
|
||||
DIGlobalVariable DIGV(*I);
|
||||
@@ -466,7 +465,7 @@ void PIC16DbgInfo::EmitVarDebugInfo(Module &M) {
|
||||
|
||||
/// SwitchToCU - Switch to a new compilation unit.
|
||||
///
|
||||
void PIC16DbgInfo::SwitchToCU(GlobalVariable *CU) {
|
||||
void PIC16DbgInfo::SwitchToCU(MDNode *CU) {
|
||||
// Get the file path from CU.
|
||||
DICompileUnit cu(CU);
|
||||
std::string DirName, FileName;
|
||||
|
Reference in New Issue
Block a user