diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-05-20 22:57:17 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-05-20 22:57:17 +0000 |
commit | a3437647dc6996499db4823c31242184c93e6e2e (patch) | |
tree | b11e9216b210aa292c44b188250195ef8292d4b3 /lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | |
parent | b60182f1b0218e0196c78f1cfeda2cf223a47146 (diff) |
Introduce DebugScope which gets embedded into the machine instructions' DebugLoc.
DebugScope refers to a debug region, function or block.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72191 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index 430dcfd286..f0b1ec8a27 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -312,6 +312,17 @@ 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. @@ -337,6 +348,7 @@ 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); @@ -352,7 +364,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(), + DL = DebugLoc::get(MF->getOrCreateDebugLocID(CU.getGV(), DbgScope, Line, 0)); } @@ -3909,7 +3921,9 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { MachineFunction &MF = DAG.getMachineFunction(); DICompileUnit CU(cast<GlobalVariable>(SPI.getContext())); DebugLoc Loc = DebugLoc::get(MF.getOrCreateDebugLocID(CU.getGV(), - SPI.getLine(), SPI.getColumn())); + DbgScopeTrack.getCurScope(), + SPI.getLine(), + SPI.getColumn())); setCurDebugLoc(Loc); if (OptLevel == CodeGenOpt::None) @@ -3923,11 +3937,14 @@ 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; - if (DIDescriptor::ValidDebugInfo(RSI.getContext(), OptLevel) && - DW && DW->ShouldEmitDwarfDebug()) { - unsigned LabelID = - DW->RecordRegionStart(cast<GlobalVariable>(RSI.getContext())); + MachineFunction &MF = DAG.getMachineFunction(); + GlobalVariable *Rgn = cast<GlobalVariable>(RSI.getContext()); + DbgScopeTrack.EnterDebugScope(Rgn, MF); + if (DW && DW->ShouldEmitDwarfDebug()) { + unsigned LabelID = DW->RecordRegionStart(Rgn); DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), getRoot(), LabelID)); } @@ -3937,11 +3954,14 @@ 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; - if (DIDescriptor::ValidDebugInfo(REI.getContext(), OptLevel) && - DW && DW->ShouldEmitDwarfDebug()) { - MachineFunction &MF = DAG.getMachineFunction(); - DISubprogram Subprogram(cast<GlobalVariable>(REI.getContext())); + MachineFunction &MF = DAG.getMachineFunction(); + GlobalVariable *Rgn = cast<GlobalVariable>(REI.getContext()); + DbgScopeTrack.ExitDebugScope(Rgn, MF); + if (DW && DW->ShouldEmitDwarfDebug()) { + DISubprogram Subprogram(Rgn); if (Subprogram.isNull() || Subprogram.describes(MF.getFunction())) { unsigned LabelID = @@ -3974,6 +3994,7 @@ 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. @@ -3993,7 +4014,9 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { // Record the source line. unsigned Line = Subprogram.getLineNumber(); setCurDebugLoc(DebugLoc::get( - MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0))); + MF.getOrCreateDebugLocID(CompileUnit.getGV(), + DbgScopeTrack.getCurScope(), + Line, 0))); if (DW && DW->ShouldEmitDwarfDebug()) { DebugLocTuple PrevLocTpl = MF.getDebugLocTuple(PrevLoc); @@ -4008,7 +4031,9 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { // Record the source line. unsigned Line = Subprogram.getLineNumber(); MF.setDefaultDebugLoc(DebugLoc::get( - MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0))); + MF.getOrCreateDebugLocID(CompileUnit.getGV(), + DbgScopeTrack.getCurScope(), + Line, 0))); if (DW && DW->ShouldEmitDwarfDebug()) { // llvm.dbg.func_start also defines beginning of function scope. DW->RecordRegionStart(cast<GlobalVariable>(FSI.getSubprogram())); @@ -4035,7 +4060,9 @@ 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(), Line, 0))); + MF.getOrCreateDebugLocID(CompileUnit.getGV(), + DbgScopeTrack.getCurScope(), + Line, 0))); // FIXME - Start new region because llvm.dbg.func_start also defines // beginning of function scope. } |