diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 2 | ||||
-rw-r--r-- | lib/CodeGen/DebugLoc.cpp | 38 | ||||
-rw-r--r-- | lib/CodeGen/MachineFunction.cpp | 18 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/FastISel.cpp | 38 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 53 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuild.h | 2 |
6 files changed, 27 insertions, 124 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 438ba035ba..45462da0d2 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1311,7 +1311,7 @@ void AsmPrinter::PrintSpecial(const MachineInstr *MI, const char *Code) const { void AsmPrinter::processDebugLoc(DebugLoc DL) { if (TAI->doesSupportDebugInformation() && DW->ShouldEmitDwarfDebug()) { if (!DL.isUnknown()) { - static DebugLocTuple PrevDLT(0, DebugScope::getInvalid(), ~0U, ~0U); + static DebugLocTuple PrevDLT(0, ~0U, ~0U); DebugLocTuple CurDLT = MF->getDebugLocTuple(DL); if (CurDLT.CompileUnit != 0 && PrevDLT != CurDLT) diff --git a/lib/CodeGen/DebugLoc.cpp b/lib/CodeGen/DebugLoc.cpp deleted file mode 100644 index bc1a5b1340..0000000000 --- a/lib/CodeGen/DebugLoc.cpp +++ /dev/null @@ -1,38 +0,0 @@ -//===-- DebugLoc.cpp ------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// Implementation for DebugScopeTracker. -// -//===----------------------------------------------------------------------===// - -#include "llvm/CodeGen/DebugLoc.h" -#include "llvm/CodeGen/MachineFunction.h" -using namespace llvm; - -/// EnterDebugScope - Start a new debug scope. ScopeGV can be a DISubprogram -/// or a DIBlock. -void DebugScopeTracker::EnterDebugScope(GlobalVariable *ScopeGV, - MachineFunction &MF) { - assert(ScopeGV && "GlobalVariable for scope is null!"); - CurScope = MF.CreateDebugScope(ScopeGV, CurScope); -} - -/// ExitDebugScope - "Pop" a DISubprogram or a DIBlock. -void DebugScopeTracker::ExitDebugScope(GlobalVariable *ScopeGV, - MachineFunction &MF) { - assert(ScopeGV && "GlobalVariable for scope is null!"); - assert(!CurScope.isInvalid() && "Mismatched region.end ?"); - // We may have skipped a region.end because it was in an unreachable block. - // Go up the scope chain until we reach the scope that ScopeGV points to. - DebugScopeInfo DSI; - do { - DSI = MF.getDebugScopeInfo(CurScope); - CurScope = DSI.Parent; - } while (!DSI.Parent.isInvalid() && DSI.GV != ScopeGV); -} diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index d1d782c825..cacfed1d9f 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -403,9 +403,8 @@ unsigned MachineFunction::addLiveIn(unsigned PReg, /// source file, line, and column. If none currently exists, create a new /// DebugLocTuple, and insert it into the DebugIdMap. unsigned MachineFunction::getOrCreateDebugLocID(GlobalVariable *CompileUnit, - DebugScope Scope, unsigned Line, unsigned Col) { - DebugLocTuple Tuple(CompileUnit, Scope, Line, Col); + DebugLocTuple Tuple(CompileUnit, Line, Col); DenseMap<DebugLocTuple, unsigned>::iterator II = DebugLocInfo.DebugIdMap.find(Tuple); if (II != DebugLocInfo.DebugIdMap.end()) @@ -425,21 +424,6 @@ DebugLocTuple MachineFunction::getDebugLocTuple(DebugLoc DL) const { return DebugLocInfo.DebugLocations[Idx]; } -/// CreateDebugScope - Create a new debug scope. -DebugScope MachineFunction::CreateDebugScope(GlobalVariable *ScopeGV, - DebugScope Parent) { - DbgScopeInfos.push_back(DebugScopeInfo(ScopeGV, Parent)); - return DebugScope::get(DbgScopeInfos.size() - 1); -} - -/// getDebugScopeInfo - Get the DebugScopeInfo for a given DebugScope object. -const DebugScopeInfo &MachineFunction::getDebugScopeInfo(DebugScope DS) const { - unsigned Idx = DS.getIndex(); - assert(Idx < DbgScopeInfos.size() && "Invalid index into debug scopes!"); - return DbgScopeInfos[Idx]; -} - - //===----------------------------------------------------------------------===// // MachineFrameInfo implementation //===----------------------------------------------------------------------===// diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index 1c05b0a6ce..367cf4cd5c 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -331,22 +331,17 @@ bool FastISel::SelectCall(User *I) { DICompileUnit CU(cast<GlobalVariable>(SPI->getContext())); unsigned Line = SPI->getLine(); unsigned Col = SPI->getColumn(); - unsigned Idx = MF.getOrCreateDebugLocID(CU.getGV(), - DbgScopeTrack.getCurScope(), - Line, Col); + unsigned Idx = MF.getOrCreateDebugLocID(CU.getGV(), Line, Col); setCurDebugLoc(DebugLoc::get(Idx)); } return true; } case Intrinsic::dbg_region_start: { DbgRegionStartInst *RSI = cast<DbgRegionStartInst>(I); - if (!DIDescriptor::ValidDebugInfo(RSI->getContext(), CodeGenOpt::None)) - return true; - - GlobalVariable *Rgn = cast<GlobalVariable>(RSI->getContext()); - DbgScopeTrack.EnterDebugScope(Rgn, MF); - if (DW && DW->ShouldEmitDwarfDebug()) { - unsigned ID = DW->RecordRegionStart(Rgn); + if (DIDescriptor::ValidDebugInfo(RSI->getContext(), CodeGenOpt::None) && + DW && DW->ShouldEmitDwarfDebug()) { + unsigned ID = + DW->RecordRegionStart(cast<GlobalVariable>(RSI->getContext())); const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL); BuildMI(MBB, DL, II).addImm(ID); } @@ -354,14 +349,10 @@ bool FastISel::SelectCall(User *I) { } case Intrinsic::dbg_region_end: { DbgRegionEndInst *REI = cast<DbgRegionEndInst>(I); - if (!DIDescriptor::ValidDebugInfo(REI->getContext(), CodeGenOpt::None)) - return true; - - GlobalVariable *Rgn = cast<GlobalVariable>(REI->getContext()); - DbgScopeTrack.ExitDebugScope(Rgn, MF); - if (DW && DW->ShouldEmitDwarfDebug()) { + if (DIDescriptor::ValidDebugInfo(REI->getContext(), CodeGenOpt::None) && + DW && DW->ShouldEmitDwarfDebug()) { unsigned ID = 0; - DISubprogram Subprogram(Rgn); + DISubprogram Subprogram(cast<GlobalVariable>(REI->getContext())); if (!Subprogram.isNull() && !Subprogram.describes(MF.getFunction())) { // This is end of an inlined function. const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL); @@ -391,7 +382,6 @@ bool FastISel::SelectCall(User *I) { DebugLoc PrevLoc = DL; DISubprogram Subprogram(cast<GlobalVariable>(SP)); DICompileUnit CompileUnit = Subprogram.getCompileUnit(); - DbgScopeTrack.EnterDebugScope(Subprogram.getGV(), MF); if (!Subprogram.describes(MF.getFunction())) { // This is a beginning of an inlined function. @@ -403,10 +393,8 @@ bool FastISel::SelectCall(User *I) { return true; // Record the source line. unsigned Line = Subprogram.getLineNumber(); - setCurDebugLoc( - DebugLoc::get(MF.getOrCreateDebugLocID(CompileUnit.getGV(), - DbgScopeTrack.getCurScope(), - Line, 0))); + setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID( + CompileUnit.getGV(), Line, 0))); if (DW && DW->ShouldEmitDwarfDebug()) { DebugLocTuple PrevLocTpl = MF.getDebugLocTuple(PrevLoc); @@ -420,10 +408,8 @@ bool FastISel::SelectCall(User *I) { } else { // Record the source line. unsigned Line = Subprogram.getLineNumber(); - MF.setDefaultDebugLoc( - DebugLoc::get(MF.getOrCreateDebugLocID(CompileUnit.getGV(), - DbgScopeTrack.getCurScope(), - Line, 0))); + MF.setDefaultDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID( + CompileUnit.getGV(), Line, 0))); if (DW && DW->ShouldEmitDwarfDebug()) { // llvm.dbg.func_start also defines beginning of function scope. DW->RecordRegionStart(cast<GlobalVariable>(FSI->getSubprogram())); diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index f0b1ec8a27..430dcfd286 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -312,17 +312,6 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf, !StaticAllocaMap.count(cast<AllocaInst>(I))) InitializeRegForValue(I); - // FIXME: PHI instructions currently get an invalid scope. This is because - // tracking of debug scopes is done through a simple mechanism where - // "entering" a scope implies that the scope is entered for the first time. - // If we keep track of debug scopes for the following loop, the PHI - // instructions would get scopes that will not be used again later by the - // instruction selectors. - // Either provide a mechanism to re-enter a previously created scope or wait - // for when the DebugLoc is retrieved from Instruction, in which case the - // current debug scope tracking mechanism will be obsolete. - DebugScope DbgScope; - // Create an initial MachineBasicBlock for each LLVM BasicBlock in F. This // also creates the initial PHI MachineInstrs, though none of the input // operands are populated. @@ -348,7 +337,6 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf, CodeGenOpt::Default)) { DICompileUnit CU(cast<GlobalVariable>(SPI->getContext())); unsigned idx = MF->getOrCreateDebugLocID(CU.getGV(), - DbgScope, SPI->getLine(), SPI->getColumn()); DL = DebugLoc::get(idx); @@ -364,7 +352,7 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf, DISubprogram Subprogram(cast<GlobalVariable>(SP)); DICompileUnit CU(Subprogram.getCompileUnit()); unsigned Line = Subprogram.getLineNumber(); - DL = DebugLoc::get(MF->getOrCreateDebugLocID(CU.getGV(), DbgScope, + DL = DebugLoc::get(MF->getOrCreateDebugLocID(CU.getGV(), Line, 0)); } @@ -3921,9 +3909,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { MachineFunction &MF = DAG.getMachineFunction(); DICompileUnit CU(cast<GlobalVariable>(SPI.getContext())); DebugLoc Loc = DebugLoc::get(MF.getOrCreateDebugLocID(CU.getGV(), - DbgScopeTrack.getCurScope(), - SPI.getLine(), - SPI.getColumn())); + SPI.getLine(), SPI.getColumn())); setCurDebugLoc(Loc); if (OptLevel == CodeGenOpt::None) @@ -3937,14 +3923,11 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { case Intrinsic::dbg_region_start: { DwarfWriter *DW = DAG.getDwarfWriter(); DbgRegionStartInst &RSI = cast<DbgRegionStartInst>(I); - if (!DIDescriptor::ValidDebugInfo(RSI.getContext(), OptLevel)) - return 0; - MachineFunction &MF = DAG.getMachineFunction(); - GlobalVariable *Rgn = cast<GlobalVariable>(RSI.getContext()); - DbgScopeTrack.EnterDebugScope(Rgn, MF); - if (DW && DW->ShouldEmitDwarfDebug()) { - unsigned LabelID = DW->RecordRegionStart(Rgn); + if (DIDescriptor::ValidDebugInfo(RSI.getContext(), OptLevel) && + DW && DW->ShouldEmitDwarfDebug()) { + unsigned LabelID = + DW->RecordRegionStart(cast<GlobalVariable>(RSI.getContext())); DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), getRoot(), LabelID)); } @@ -3954,14 +3937,11 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { case Intrinsic::dbg_region_end: { DwarfWriter *DW = DAG.getDwarfWriter(); DbgRegionEndInst &REI = cast<DbgRegionEndInst>(I); - if (!DIDescriptor::ValidDebugInfo(REI.getContext(), OptLevel)) - return 0; - MachineFunction &MF = DAG.getMachineFunction(); - GlobalVariable *Rgn = cast<GlobalVariable>(REI.getContext()); - DbgScopeTrack.ExitDebugScope(Rgn, MF); - if (DW && DW->ShouldEmitDwarfDebug()) { - DISubprogram Subprogram(Rgn); + if (DIDescriptor::ValidDebugInfo(REI.getContext(), OptLevel) && + DW && DW->ShouldEmitDwarfDebug()) { + MachineFunction &MF = DAG.getMachineFunction(); + DISubprogram Subprogram(cast<GlobalVariable>(REI.getContext())); if (Subprogram.isNull() || Subprogram.describes(MF.getFunction())) { unsigned LabelID = @@ -3994,7 +3974,6 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { return 0; MachineFunction &MF = DAG.getMachineFunction(); - DbgScopeTrack.EnterDebugScope(cast<GlobalVariable>(SP), MF); if (OptLevel == CodeGenOpt::None) { // llvm.dbg.func.start implicitly defines a dbg_stoppoint which is what // (most?) gdb expects. @@ -4014,9 +3993,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { // Record the source line. unsigned Line = Subprogram.getLineNumber(); setCurDebugLoc(DebugLoc::get( - MF.getOrCreateDebugLocID(CompileUnit.getGV(), - DbgScopeTrack.getCurScope(), - Line, 0))); + MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0))); if (DW && DW->ShouldEmitDwarfDebug()) { DebugLocTuple PrevLocTpl = MF.getDebugLocTuple(PrevLoc); @@ -4031,9 +4008,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { // Record the source line. unsigned Line = Subprogram.getLineNumber(); MF.setDefaultDebugLoc(DebugLoc::get( - MF.getOrCreateDebugLocID(CompileUnit.getGV(), - DbgScopeTrack.getCurScope(), - Line, 0))); + MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0))); if (DW && DW->ShouldEmitDwarfDebug()) { // llvm.dbg.func_start also defines beginning of function scope. DW->RecordRegionStart(cast<GlobalVariable>(FSI.getSubprogram())); @@ -4060,9 +4035,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { // create a label if this is a beginning of inlined function. unsigned Line = Subprogram.getLineNumber(); setCurDebugLoc(DebugLoc::get( - MF.getOrCreateDebugLocID(CompileUnit.getGV(), - DbgScopeTrack.getCurScope(), - Line, 0))); + MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0))); // FIXME - Start new region because llvm.dbg.func_start also defines // beginning of function scope. } diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.h b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.h index 0c9b317b5d..578aa591ce 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.h +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.h @@ -169,8 +169,6 @@ class SelectionDAGLowering { /// CurDebugLoc - current file + line number. Changes as we build the DAG. DebugLoc CurDebugLoc; - DebugScopeTracker DbgScopeTrack; - DenseMap<const Value*, SDValue> NodeMap; /// PendingLoads - Loads are not emitted to the program immediately. We bunch |