From 8ed0f741ae3c35bc95c724d867c769934df8373f Mon Sep 17 00:00:00 2001 From: Francis Visoiu Mistrih Date: Tue, 24 Apr 2018 11:00:46 +0000 Subject: [PATCH] [CodeGen] Print user-friendly debug locations as MI comments If available, print the file, line and column of the DebugLoc attached to the MachineInstr: MOV16mr $rbp, 1, $noreg, -112, $noreg, killed renamable $ax, debug-location !56 :: (store 2 into %ir.._value12); stepping.swift:10:17 renamable $edx = MOVZX32rm16 $rbp, 1, $noreg, -112, $noreg, debug-location !62 :: (dereferenceable load 2 from %ir.._value13); stepping.swift:10:17 Differential Revision: https://reviews.llvm.org/D45992 llvm-svn: 330709 --- llvm/lib/CodeGen/MachineInstr.cpp | 15 ++++++++++++++- llvm/unittests/CodeGen/MachineInstrTest.cpp | 8 +++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index d3a09f06ebd4..6ca8ead1c775 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -1469,10 +1469,23 @@ void MachineInstr::print(raw_ostream &OS, ModuleSlotTracker &MST, return; bool HaveSemi = false; + // Print debug location information. + if (const DebugLoc &DL = getDebugLoc()) { + if (!HaveSemi) { + OS << ';'; + HaveSemi = true; + } + OS << ' '; + DL.print(OS); + } + + // Print extra comments for DEBUG_VALUE. if (isDebugValue() && getOperand(e - 2).isMetadata()) { - if (!HaveSemi) + if (!HaveSemi) { OS << ";"; + HaveSemi = true; + } auto *DV = cast(getOperand(e - 2).getMetadata()); OS << " line no:" << DV->getLine(); if (auto *InlinedAt = debugLoc->getInlinedAt()) { diff --git a/llvm/unittests/CodeGen/MachineInstrTest.cpp b/llvm/unittests/CodeGen/MachineInstrTest.cpp index c0da2c3f3968..6883d3ed63e9 100644 --- a/llvm/unittests/CodeGen/MachineInstrTest.cpp +++ b/llvm/unittests/CodeGen/MachineInstrTest.cpp @@ -255,7 +255,11 @@ TEST(MachineInstrPrintingTest, DebugLocPrinting) { 0, nullptr, nullptr, &OpInfo, 0, nullptr}; LLVMContext Ctx; - DILocation *DIL = DILocation::get(Ctx, 1, 5, (Metadata *)nullptr, nullptr); + DIFile *DIF = DIFile::getDistinct(Ctx, "filename", ""); + DISubprogram *DIS = DISubprogram::getDistinct( + Ctx, nullptr, "", "", DIF, 0, nullptr, false, false, 0, nullptr, 0, 0, 0, + DINode::FlagZero, false, nullptr); + DILocation *DIL = DILocation::get(Ctx, 1, 5, DIS); DebugLoc DL(DIL); MachineInstr *MI = MF->CreateMachineInstr(MCID, DL); MI->addOperand(*MF, MachineOperand::CreateReg(0, /*isDef*/ true)); @@ -265,6 +269,8 @@ TEST(MachineInstrPrintingTest, DebugLocPrinting) { MI->print(OS); ASSERT_TRUE( StringRef(OS.str()).startswith("$noreg = UNKNOWN debug-location ")); + ASSERT_TRUE( + StringRef(OS.str()).endswith("filename:1:5")); } } // end namespace