From df7d5d317096c342ee1c459139914965008fbcd7 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Thu, 21 May 2009 00:04:55 +0000 Subject: [PATCH] Temporarily revert r72191. It was causing an assert during llvm-gcc bootstrapping. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72200 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/DebugLoc.h | 73 ++----------------- include/llvm/CodeGen/FastISel.h | 1 - include/llvm/CodeGen/MachineFunction.h | 10 +-- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 2 +- lib/CodeGen/DebugLoc.cpp | 38 ---------- lib/CodeGen/MachineFunction.cpp | 18 +---- lib/CodeGen/SelectionDAG/FastISel.cpp | 38 +++------- .../SelectionDAG/SelectionDAGBuild.cpp | 53 ++++---------- lib/CodeGen/SelectionDAG/SelectionDAGBuild.h | 2 - 9 files changed, 34 insertions(+), 201 deletions(-) delete mode 100644 lib/CodeGen/DebugLoc.cpp diff --git a/include/llvm/CodeGen/DebugLoc.h b/include/llvm/CodeGen/DebugLoc.h index 495baf44dee..77e6733f696 100644 --- a/include/llvm/CodeGen/DebugLoc.h +++ b/include/llvm/CodeGen/DebugLoc.h @@ -20,77 +20,18 @@ namespace llvm { class GlobalVariable; - class MachineFunction; - /// DebugScope - Debug scope id. This is carried into DebugLocTuple to index - /// into a vector of DebugScopeInfos. Provides the ability to associate a - /// SDNode/MachineInstr with the debug scope that it belongs to. - /// - class DebugScope { - unsigned Idx; - - public: - DebugScope() : Idx(~0U) {} // Defaults to null. - - static DebugScope getInvalid() { DebugScope S; S.Idx = ~0U; return S; } - static DebugScope get(unsigned idx) { DebugScope S; S.Idx = idx; return S; } - - unsigned getIndex() const { return Idx; } - - /// isInvalid - Return true if it doesn't refer to any scope. - bool isInvalid() const { return Idx == ~0U; } - - bool operator==(const DebugScope &DS) const { return Idx == DS.Idx; } - bool operator!=(const DebugScope &DS) const { return !(*this == DS); } - }; - - /// DebugScopeInfo - Contains info about the scope global variable and the - /// parent debug scope. DebugScope is only a "cookie" that can point to a - /// specific DebugScopeInfo. - /// - struct DebugScopeInfo { - GlobalVariable *GV; - DebugScope Parent; - - DebugScopeInfo(GlobalVariable *gv, DebugScope parent) - : GV(gv), Parent(parent) {} - DebugScopeInfo() - : GV(0), Parent(DebugScope::getInvalid()) {} - }; - - /// DebugScopeTracker - Create and keep track of the debug scope while - /// entering/exiting subprograms and blocks. Used by the instruction - /// selectors. - /// - class DebugScopeTracker { - DebugScope CurScope; - - public: - /// getCurScope - The current debug scope that we "entered" through - /// EnterDebugScope. - DebugScope getCurScope() const { return CurScope; } - - /// EnterDebugScope - Start a new debug scope. ScopeGV can be a DISubprogram - /// or a DIBlock. - void EnterDebugScope(GlobalVariable *ScopeGV, MachineFunction &MF); - - /// ExitDebugScope - "Pop" a DISubprogram or a DIBlock. - void ExitDebugScope(GlobalVariable *ScopeGV, MachineFunction &MF); - }; - - /// DebugLocTuple - Debug location tuple of a DICompileUnit global variable, - /// debug scope, line and column. + /// DebugLocTuple - Debug location tuple of filename id, line and column. /// struct DebugLocTuple { GlobalVariable *CompileUnit; - DebugScope Scope; unsigned Line, Col; - DebugLocTuple(GlobalVariable *v, DebugScope s, unsigned l, unsigned c) - : CompileUnit(v), Scope(s), Line(l), Col(c) {}; + DebugLocTuple(GlobalVariable *v, unsigned l, unsigned c) + : CompileUnit(v), Line(l), Col(c) {}; bool operator==(const DebugLocTuple &DLT) const { - return CompileUnit == DLT.CompileUnit && Scope == DLT.Scope && + return CompileUnit == DLT.CompileUnit && Line == DLT.Line && Col == DLT.Col; } bool operator!=(const DebugLocTuple &DLT) const { @@ -122,20 +63,18 @@ namespace llvm { // Partially specialize DenseMapInfo for DebugLocTyple. template<> struct DenseMapInfo { static inline DebugLocTuple getEmptyKey() { - return DebugLocTuple(0, DebugScope::getInvalid(), ~0U, ~0U); + return DebugLocTuple(0, ~0U, ~0U); } static inline DebugLocTuple getTombstoneKey() { - return DebugLocTuple((GlobalVariable*)~1U,DebugScope::get(~1U), ~1U, ~1U); + return DebugLocTuple((GlobalVariable*)~1U, ~1U, ~1U); } static unsigned getHashValue(const DebugLocTuple &Val) { return DenseMapInfo::getHashValue(Val.CompileUnit) ^ - DenseMapInfo::getHashValue(Val.Scope.getIndex()) ^ DenseMapInfo::getHashValue(Val.Line) ^ DenseMapInfo::getHashValue(Val.Col); } static bool isEqual(const DebugLocTuple &LHS, const DebugLocTuple &RHS) { return LHS.CompileUnit == RHS.CompileUnit && - LHS.Scope == RHS.Scope && LHS.Line == RHS.Line && LHS.Col == RHS.Col; } diff --git a/include/llvm/CodeGen/FastISel.h b/include/llvm/CodeGen/FastISel.h index df5c5bb2085..38c1710d710 100644 --- a/include/llvm/CodeGen/FastISel.h +++ b/include/llvm/CodeGen/FastISel.h @@ -57,7 +57,6 @@ protected: MachineFrameInfo &MFI; MachineConstantPool &MCP; DebugLoc DL; - DebugScopeTracker DbgScopeTrack; const TargetMachine &TM; const TargetData &TD; const TargetInstrInfo &TII; diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h index d1744a0790e..a110e5846ac 100644 --- a/include/llvm/CodeGen/MachineFunction.h +++ b/include/llvm/CodeGen/MachineFunction.h @@ -111,8 +111,6 @@ class MachineFunction : private Annotation { // Tracks debug locations. DebugLocTracker DebugLocInfo; - std::vector DbgScopeInfos; - public: MachineFunction(const Function *Fn, const TargetMachine &TM); ~MachineFunction(); @@ -334,7 +332,7 @@ public: /// getOrCreateDebugLocID - Look up the DebugLocTuple index with the given /// source file, line, and column. If none currently exists, create a new /// DebugLocTuple, and insert it into the DebugIdMap. - unsigned getOrCreateDebugLocID(GlobalVariable *CompileUnit, DebugScope Scope, + unsigned getOrCreateDebugLocID(GlobalVariable *CompileUnit, unsigned Line, unsigned Col); /// getDebugLocTuple - Get the DebugLocTuple for a given DebugLoc object. @@ -347,12 +345,6 @@ public: /// setDefaultDebugLoc - Get the default debug location for the machine /// function. void setDefaultDebugLoc(DebugLoc DL) { DefaultDebugLoc = DL; } - - /// CreateDebugScope - Create a new debug scope. - DebugScope CreateDebugScope(GlobalVariable *ScopeGV, DebugScope Parent); - - /// getDebugScopeInfo - Get the DebugScopeInfo for a given DebugScope object. - const DebugScopeInfo &getDebugScopeInfo(DebugScope DS) const; }; //===--------------------------------------------------------------------===// diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 438ba035ba0..45462da0d26 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 bc1a5b13401..00000000000 --- 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 d1d782c8256..cacfed1d9f7 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::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 1c05b0a6ce1..367cf4cd5cc 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(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(I); - if (!DIDescriptor::ValidDebugInfo(RSI->getContext(), CodeGenOpt::None)) - return true; - - GlobalVariable *Rgn = cast(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(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(I); - if (!DIDescriptor::ValidDebugInfo(REI->getContext(), CodeGenOpt::None)) - return true; - - GlobalVariable *Rgn = cast(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(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(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(FSI->getSubprogram())); diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index f0b1ec8a273..430dcfd2867 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(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(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(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(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(I); - if (!DIDescriptor::ValidDebugInfo(RSI.getContext(), OptLevel)) - return 0; - MachineFunction &MF = DAG.getMachineFunction(); - GlobalVariable *Rgn = cast(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(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(I); - if (!DIDescriptor::ValidDebugInfo(REI.getContext(), OptLevel)) - return 0; - MachineFunction &MF = DAG.getMachineFunction(); - GlobalVariable *Rgn = cast(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(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(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(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 0c9b317b5d0..578aa591ce6 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 NodeMap; /// PendingLoads - Loads are not emitted to the program immediately. We bunch