revert r288283 as it causes debug info (line numbers) to be lost in instrumented code. also revert r288299 which was a workaround for the problem.

llvm-svn: 288300
diff --git a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
index 5607242..d30f106 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
@@ -201,10 +201,8 @@
   assert(CurMI != nullptr);
   // Don't create a new label after DBG_VALUE instructions.
   // They don't generate code.
-  if (!CurMI->isDebugValue()) {
+  if (!CurMI->isDebugValue())
     PrevLabel = nullptr;
-    PrevInstBB = CurMI->getParent();
-  }
 
   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
       LabelsAfterInsn.find(CurMI);
diff --git a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h
index cd02c44..b8bbcec 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h
+++ b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h
@@ -38,12 +38,10 @@
   MachineModuleInfo *MMI;
 
   /// Previous instruction's location information. This is used to
-  /// determine label location to indicate scope boundaries in debug info.
-  /// We track the previous instruction's source location (if not line 0),
-  /// whether it was a label, and its parent BB.
+  /// determine label location to indicate scope boundries in dwarf
+  /// debug info.
   DebugLoc PrevInstLoc;
   MCSymbol *PrevLabel = nullptr;
-  const MachineBasicBlock *PrevInstBB = nullptr;
 
   /// This location indicates end of function prologue and beginning of
   /// function body.
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index ab585ae..1f662e5 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1010,70 +1010,31 @@
   if (MI->isDebugValue())
     return;
   const DebugLoc &DL = MI->getDebugLoc();
-  // When we emit a line-0 record, we don't update PrevInstLoc; so look at
-  // the last line number actually emitted, to see if it was line 0.
-  unsigned LastAsmLine =
-    Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
-
-  if (DL == PrevInstLoc) {
-    // If we have an ongoing unspecified location, nothing to do here.
-    if (!DL)
-      return;
-    // We have an explicit location, same as the previous location.
-    // But we might be coming back to it after a line 0 record.
-    if (LastAsmLine == 0 && DL.getLine() != 0) {
-      // Reinstate the source location but not marked as a statement.
-      const MDNode *Scope = DL.getScope();
-      recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0);
-    }
+  if (DL == PrevInstLoc)
     return;
-  }
 
   if (!DL) {
     // We have an unspecified location, which might want to be line 0.
-    // If we have already emitted a line-0 record, don't repeat it.
-    if (LastAsmLine == 0)
-      return;
-    // See if we have a reason to emit a line-0 record now.
-    // Reasons to emit a line-0 record include:
-    // - User asked for it (UnknownLocations).
-    // - Instruction has a label, so it's referenced from somewhere else,
-    //   possibly debug information; we want it to have a source location.
-    // - Instruction is at the top of a block; we don't want to inherit the
-    //   location from the physically previous (maybe unrelated) block.
-    if (UnknownLocations || PrevLabel ||
-        (PrevInstBB && PrevInstBB != MI->getParent())) {
-      // Preserve the file number, if we can, to save space in the line table.
-      // Do not update PrevInstLoc, it remembers the last non-0 line.
-      // FIXME: Also preserve the column number, to save more space?
-      const MDNode *Scope = PrevInstLoc ? PrevInstLoc.getScope() : nullptr;
-      recordSourceLine(0, 0, Scope, 0);
+    if (UnknownLocations) {
+      PrevInstLoc = DL;
+      recordSourceLine(0, 0, nullptr, 0);
     }
     return;
   }
 
-  // We have an explicit location, different from the previous location.
-  // Don't repeat a line-0 record, but otherwise emit the new location.
-  // (The new location might be an explicit line 0, which we do emit.)
-  if (DL.getLine() == 0 && LastAsmLine == 0)
-    return;
+  // We have a new, explicit location.
   unsigned Flags = 0;
+  PrevInstLoc = DL;
   if (DL == PrologEndLoc) {
     Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;
     PrologEndLoc = DebugLoc();
   }
-  // If the line changed, we call that a new statement; unless we went to
-  // line 0 and came back, in which case it is not a new statement.
-  unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine;
-  if (DL.getLine() && DL.getLine() != OldLine)
+  if (DL.getLine() !=
+      Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine())
     Flags |= DWARF2_FLAG_IS_STMT;
 
   const MDNode *Scope = DL.getScope();
   recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
-
-  // If we're not at line 0, remember this location.
-  if (DL.getLine())
-    PrevInstLoc = DL;
 }
 
 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {