mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-23 00:20:25 +00:00
Remove the nasty LABEL hack with a much less evil one. Now llvm.dbg.func.start implies a stoppoint is set. SelectionDAGISel records a new source line but does not create a ISD::LABEL node for this special stoppoint. Asm printer will magically print this label. This ensures nothing is emitted before.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46635 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2641,13 +2641,21 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
|
||||
}
|
||||
case Intrinsic::dbg_func_start: {
|
||||
MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
|
||||
if (!MMI) return 0;
|
||||
DbgFuncStartInst &FSI = cast<DbgFuncStartInst>(I);
|
||||
if (MMI && FSI.getSubprogram() &&
|
||||
MMI->Verify(FSI.getSubprogram())) {
|
||||
unsigned LabelID = MMI->RecordRegionStart(FSI.getSubprogram());
|
||||
DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(),
|
||||
DAG.getConstant(LabelID, MVT::i32),
|
||||
DAG.getConstant(0, MVT::i32)));
|
||||
Value *SP = FSI.getSubprogram();
|
||||
if (SP && MMI->Verify(SP)) {
|
||||
// llvm.dbg.func.start implicitly defines a dbg_stoppoint which is
|
||||
// what (most?) gdb expects.
|
||||
DebugInfoDesc *DD = MMI->getDescFor(SP);
|
||||
assert(DD && "Not a debug information descriptor");
|
||||
SubprogramDesc *Subprogram = cast<SubprogramDesc>(DD);
|
||||
const CompileUnitDesc *CompileUnit = Subprogram->getFile();
|
||||
unsigned SrcFile = MMI->RecordSource(CompileUnit->getDirectory(),
|
||||
CompileUnit->getFileName());
|
||||
// Record the source line but does create a label. It will be emitted
|
||||
// at asm emission time.
|
||||
MMI->RecordSourceLine(Subprogram->getLine(), 0, SrcFile);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user