Make DebugLoc independent of DwarfWriter.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 30 Apr 2009 23:22:31 +0000 (23:22 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 30 Apr 2009 23:22:31 +0000 (23:22 +0000)
-Replace DebugLocTuple's Source ID with CompileUnit's GlobalVariable*
-Remove DwarfWriter::getOrCreateSourceID
-Make necessary changes for the above (fix callsites, etc.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70520 91177308-0d34-0410-b5e6-96231b3b80d8

12 files changed:
include/llvm/CodeGen/DebugLoc.h
include/llvm/CodeGen/DwarfWriter.h
include/llvm/CodeGen/MachineFunction.h
lib/CodeGen/AsmPrinter/DwarfWriter.cpp
lib/CodeGen/MachineFunction.cpp
lib/CodeGen/MachineInstr.cpp
lib/CodeGen/SelectionDAG/FastISel.cpp
lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp
utils/TableGen/AsmWriterEmitter.cpp

index d5ad9dcafd92400d223b3c973386041da16e0496..77e6733f696afbed1548cdb33a290aad4351514d 100644 (file)
 #include <vector>
 
 namespace llvm {
+  class GlobalVariable;
 
   /// DebugLocTuple - Debug location tuple of filename id, line and column.
   ///
   struct DebugLocTuple {
-    unsigned Src, Line, Col;
+    GlobalVariable *CompileUnit;
+    unsigned Line, Col;
 
-    DebugLocTuple(unsigned s, unsigned l, unsigned c)
-      : Src(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 Src == DLT.Src && Line == DLT.Line && Col == DLT.Col;
+      return CompileUnit == DLT.CompileUnit &&
+             Line == DLT.Line && Col == DLT.Col;
     }
     bool operator!=(const DebugLocTuple &DLT) const {
       return !(*this == DLT);
@@ -60,20 +63,20 @@ namespace llvm {
   // Partially specialize DenseMapInfo for DebugLocTyple.
   template<>  struct DenseMapInfo<DebugLocTuple> {
     static inline DebugLocTuple getEmptyKey() {
-      return DebugLocTuple(~0U, ~0U, ~0U);
+      return DebugLocTuple(0, ~0U, ~0U);
     }
     static inline DebugLocTuple getTombstoneKey() {
-      return DebugLocTuple(~1U, ~1U, ~1U);
+      return DebugLocTuple((GlobalVariable*)~1U, ~1U, ~1U);
     }
     static unsigned getHashValue(const DebugLocTuple &Val) {
-      return DenseMapInfo<unsigned>::getHashValue(Val.Src) ^
+      return DenseMapInfo<GlobalVariable*>::getHashValue(Val.CompileUnit) ^
              DenseMapInfo<unsigned>::getHashValue(Val.Line) ^
              DenseMapInfo<unsigned>::getHashValue(Val.Col);
     }
     static bool isEqual(const DebugLocTuple &LHS, const DebugLocTuple &RHS) {
-      return LHS.Src  == RHS.Src &&
-             LHS.Line == RHS.Line &&
-             LHS.Col  == RHS.Col;
+      return LHS.CompileUnit == RHS.CompileUnit &&
+             LHS.Line        == RHS.Line &&
+             LHS.Col         == RHS.Col;
     }
 
     static bool isPod() { return true; }
index e4e485039ef66ae5795d55c1a854413979906d4a..9ca7d7e4f2b504e2b1d9353d2affaaddde12774b 100644 (file)
@@ -37,6 +37,7 @@ class GlobalVariable;
 class TargetAsmInfo;
 class raw_ostream;
 class Instruction;
+class DICompileUnit;
 class DISubprogram;
 class DIVariable;
 
@@ -87,14 +88,7 @@ public:
   /// RecordSourceLine - Register a source line with debug info. Returns a
   /// unique label ID used to generate a label and provide correspondence to
   /// the source line list.
-  unsigned RecordSourceLine(unsigned Line, unsigned Col, unsigned Src);
-
-  /// getOrCreateSourceID - Look up the source id with the given directory and
-  /// source file names. If none currently exists, create a new id and insert it
-  /// in the SourceIds map. This can update DirectoryIds and SourceFileIds maps
-  /// as well.
-  unsigned getOrCreateSourceID(const std::string &DirName,
-                               const std::string &FileName);
+  unsigned RecordSourceLine(unsigned Line, unsigned Col, DICompileUnit CU);
 
   /// RecordRegionStart - Indicate the start of a region.
   unsigned RecordRegionStart(GlobalVariable *V);
@@ -116,7 +110,7 @@ public:
 
   //// RecordInlinedFnStart - Indicate the start of a inlined function.
   void RecordInlinedFnStart(Instruction *I, DISubprogram &SP, unsigned LabelID,
-                            unsigned Src, unsigned Line, unsigned Col);
+                            DICompileUnit CU, unsigned Line, unsigned Col);
 
   /// RecordInlinedFnEnd - Indicate the end of inlined subroutine.
   unsigned RecordInlinedFnEnd(DISubprogram &SP);
index f427c72e33382eedb773d1283171abffa74ecca8..1c9bc61521f68db05e01eec3c2438c9bdf569d96 100644 (file)
@@ -332,7 +332,8 @@ 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(unsigned Src, unsigned Line, unsigned Col);
+  unsigned getOrCreateDebugLocID(GlobalVariable *CompileUnit,
+                                 unsigned Line, unsigned Col);
 
   /// getDebugLocTuple - Get the DebugLocTuple for a given DebugLoc object.
   DebugLocTuple getDebugLocTuple(DebugLoc DL) const;
index 499f800d7e1a0dc8c6ae34531bd40af20a9ecd98..bfac3b68ae1a771404fa04b51c47bc35add8450a 100644 (file)
@@ -1103,7 +1103,7 @@ class SrcLineInfo {
 public:
   SrcLineInfo(unsigned L, unsigned C, unsigned S, unsigned I)
     : Line(L), Column(C), SourceID(S), LabelID(I) {}
-  
+
   // Accessors
   unsigned getLine()     const { return Line; }
   unsigned getColumn()   const { return Column; }
@@ -3426,10 +3426,13 @@ public:
   /// RecordSourceLine - Records location information and associates it with a 
   /// label. Returns a unique label ID used to generate a label and provide
   /// correspondence to the source line list.
-  unsigned RecordSourceLine(unsigned Line, unsigned Col, unsigned Src) {
+  unsigned RecordSourceLine(unsigned Line, unsigned Col, DICompileUnit CU) {
     if (TimePassesIsEnabled)
       DebugTimer->startTimer();
 
+    std::string Dir, Fn;
+    unsigned Src = GetOrCreateSourceID(CU.getDirectory(Dir),
+                                       CU.getFilename(Fn));
     unsigned ID = MMI->NextLabelID();
     Lines.push_back(SrcLineInfo(Line, Col, Src, ID));
 
@@ -3529,10 +3532,13 @@ public:
 
   //// RecordInlinedFnStart - Indicate the start of inlined subroutine.
   void RecordInlinedFnStart(Instruction *FSI, DISubprogram &SP, unsigned LabelID,
-                            unsigned Src, unsigned Line, unsigned Col) {
+                            DICompileUnit CU, unsigned Line, unsigned Col) {
     if (!TAI->doesDwarfUsesInlineInfoSection())
       return;
 
+    std::string Dir, Fn;
+    unsigned Src = GetOrCreateSourceID(CU.getDirectory(Dir),
+                                       CU.getFilename(Fn));
     DbgScope *Scope = createInlinedSubroutineScope(SP, Src, Line, Col);
     Scope->setStartLabelID(LabelID);
     MMI->RecordUsedDbgLabel(LabelID);
@@ -4739,17 +4745,8 @@ bool DwarfWriter::ValidDebugInfo(Value *V, CodeGenOpt::Level OptLevel) {
 /// label. Returns a unique label ID used to generate a label and provide
 /// correspondence to the source line list.
 unsigned DwarfWriter::RecordSourceLine(unsigned Line, unsigned Col, 
-                                       unsigned Src) {
-  return DD->RecordSourceLine(Line, Col, Src);
-}
-
-/// getOrCreateSourceID - Look up the source id with the given directory and
-/// source file names. If none currently exists, create a new id and insert it
-/// in the SourceIds map. This can update DirectoryNames and SourceFileNames maps
-/// as well.
-unsigned DwarfWriter::getOrCreateSourceID(const std::string &DirName,
-                                          const std::string &FileName) {
-  return DD->getOrCreateSourceID(DirName, FileName);
+                                       DICompileUnit CU) {
+  return DD->RecordSourceLine(Line, Col, CU);
 }
 
 /// RecordRegionStart - Indicate the start of a region.
@@ -4783,9 +4780,9 @@ bool DwarfWriter::ShouldEmitDwarfDebug() const {
 //// RecordInlinedFnStart - Global variable GV is inlined at the location marked
 //// by LabelID label.
 void DwarfWriter::RecordInlinedFnStart(Instruction *I, DISubprogram &SP, 
-                                       unsigned LabelID, unsigned Src, 
+                                       unsigned LabelID, DICompileUnit CU,
                                        unsigned Line, unsigned Col) {
-  DD->RecordInlinedFnStart(I, SP, LabelID, Src, Line, Col);
+  DD->RecordInlinedFnStart(I, SP, LabelID, CU, Line, Col);
 }
 
 /// RecordInlinedFnEnd - Indicate the end of inlined subroutine.
index e0cdad7783b530f97cc3922c839459beac38a817..5135308e980f8e92959359d7a6d390b5150f2a47 100644 (file)
@@ -398,9 +398,9 @@ unsigned MachineFunction::addLiveIn(unsigned PReg,
 /// 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 MachineFunction::getOrCreateDebugLocID(unsigned Src, unsigned Line,
-                                                unsigned Col) {
-  DebugLocTuple Tuple(Src, Line, Col);
+unsigned MachineFunction::getOrCreateDebugLocID(GlobalVariable *CompileUnit,
+                                                unsigned Line, unsigned Col) {
+  DebugLocTuple Tuple(CompileUnit, Line, Col);
   DenseMap<DebugLocTuple, unsigned>::iterator II
     = DebugLocInfo.DebugIdMap.find(Tuple);
   if (II != DebugLocInfo.DebugIdMap.end())
index 9cfff82233d3b7f4dea352055e7b6f5e1f6c15e6..b8c8563eab45d2f5330cbeb01c08f4618c46fafb 100644 (file)
@@ -22,6 +22,7 @@
 #include "llvm/Target/TargetInstrInfo.h"
 #include "llvm/Target/TargetInstrDesc.h"
 #include "llvm/Target/TargetRegisterInfo.h"
+#include "llvm/Analysis/DebugInfo.h"
 #include "llvm/Support/LeakDetector.h"
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Support/Streams.h"
@@ -979,8 +980,10 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
   if (!debugLoc.isUnknown()) {
     const MachineFunction *MF = getParent()->getParent();
     DebugLocTuple DLT = MF->getDebugLocTuple(debugLoc);
+    DICompileUnit CU(DLT.CompileUnit);
+    std::string Dir, Fn;
     OS << " [dbg: "
-       << DLT.Src  << ","
+       << CU.getDirectory(Dir) << '/' << CU.getFilename(Fn) << ","
        << DLT.Line << ","
        << DLT.Col  << "]";
   }
index 09ac586dd5e896d2168adda088baaefc5a5ea9e9..58e84908820ba713e71482f5e31807fbeb0c92cf 100644 (file)
@@ -329,13 +329,10 @@ bool FastISel::SelectCall(User *I) {
     DbgStopPointInst *SPI = cast<DbgStopPointInst>(I);
     if (DW && DW->ValidDebugInfo(SPI->getContext(), CodeGenOpt::None)) {
       DICompileUnit CU(cast<GlobalVariable>(SPI->getContext()));
-      std::string Dir, FN;
-      unsigned SrcFile = DW->getOrCreateSourceID(CU.getDirectory(Dir),
-                                                 CU.getFilename(FN));
       unsigned Line = SPI->getLine();
       unsigned Col = SPI->getColumn();
-      unsigned ID = DW->RecordSourceLine(Line, Col, SrcFile);
-      unsigned Idx = MF.getOrCreateDebugLocID(SrcFile, Line, Col);
+      unsigned ID = DW->RecordSourceLine(Line, Col, CU);
+      unsigned Idx = MF.getOrCreateDebugLocID(CU.getGV(), Line, Col);
       setCurDebugLoc(DebugLoc::get(Idx));
       const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL);
       BuildMI(MBB, DL, II).addImm(ID);
@@ -386,9 +383,6 @@ bool FastISel::SelectCall(User *I) {
       DebugLoc PrevLoc = DL;
       DISubprogram Subprogram(cast<GlobalVariable>(SP));
       DICompileUnit CompileUnit = Subprogram.getCompileUnit();
-      std::string Dir, FN;
-      unsigned SrcFile = DW->getOrCreateSourceID(CompileUnit.getDirectory(Dir),
-                                                 CompileUnit.getFilename(FN));
 
       if (!Subprogram.describes(MF.getFunction())) {
         // This is a beginning of an inlined function.
@@ -400,21 +394,23 @@ bool FastISel::SelectCall(User *I) {
           return true;
         // Record the source line.
         unsigned Line = Subprogram.getLineNumber();
-        unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile);
-        setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0)));
+        unsigned LabelID = DW->RecordSourceLine(Line, 0, CompileUnit);
+        setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(
+                                                CompileUnit.getGV(), Line, 0)));
 
         const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL);
         BuildMI(MBB, DL, II).addImm(LabelID);
         DebugLocTuple PrevLocTpl = MF.getDebugLocTuple(PrevLoc);
         DW->RecordInlinedFnStart(FSI, Subprogram, LabelID, 
-                                 PrevLocTpl.Src,
+                                 DICompileUnit(PrevLocTpl.CompileUnit),
                                  PrevLocTpl.Line,
                                  PrevLocTpl.Col);
       } else {
         // Record the source line.
         unsigned Line = Subprogram.getLineNumber();
-        setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0)));
-        DW->RecordSourceLine(Line, 0, SrcFile);
+        setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(
+                                                CompileUnit.getGV(), Line, 0)));
+        DW->RecordSourceLine(Line, 0, CompileUnit);
         // llvm.dbg.func_start also defines beginning of function scope.
         DW->RecordRegionStart(cast<GlobalVariable>(FSI->getSubprogram()));
       }
index 9c43065040cb99a0876a4547d4fe41de01f30af2..9d666092ae04894ca5d352bc5412d1dcf2281a07 100644 (file)
@@ -1269,9 +1269,6 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
       GlobalVariable *CU_GV = cast<GlobalVariable>(DSP->getCompileUnit());
       if (DW && (useDEBUG_LOC || useLABEL) && !CU_GV->isDeclaration()) {
         DICompileUnit CU(cast<GlobalVariable>(DSP->getCompileUnit()));
-        std::string Dir, FN;
-        unsigned SrcFile = DW->getOrCreateSourceID(CU.getDirectory(Dir),
-                                                   CU.getFilename(FN));
 
         unsigned Line = DSP->getLine();
         unsigned Col = DSP->getColumn();
@@ -1282,10 +1279,10 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
           if (useDEBUG_LOC) {
             SDValue Ops[] = { Tmp1, DAG.getConstant(Line, MVT::i32),
                               DAG.getConstant(Col, MVT::i32),
-                              DAG.getConstant(SrcFile, MVT::i32) };
+                              DAG.getSrcValue(CU.getGV()) };
             Result = DAG.getNode(ISD::DEBUG_LOC, dl, MVT::Other, Ops, 4);
           } else {
-            unsigned ID = DW->RecordSourceLine(Line, Col, SrcFile);
+            unsigned ID = DW->RecordSourceLine(Line, Col, CU);
             Result = DAG.getLabel(ISD::DBG_LABEL, dl, Tmp1, ID);
           }
         } else {
index 71f5d813144cfd2ffd70669a62568523e29529bb..aecfbb4c34166e596e27bc62c09684334042acc8 100644 (file)
@@ -337,10 +337,7 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf,
             if (DW && DW->ValidDebugInfo(SPI->getContext(),
                                          CodeGenOpt::Default)) {
               DICompileUnit CU(cast<GlobalVariable>(SPI->getContext()));
-              std::string Dir, FN;
-              unsigned SrcFile = DW->getOrCreateSourceID(CU.getDirectory(Dir),
-                                                         CU.getFilename(FN));
-              unsigned idx = MF->getOrCreateDebugLocID(SrcFile,
+              unsigned idx = MF->getOrCreateDebugLocID(CU.getGV(),
                                                        SPI->getLine(),
                                                        SPI->getColumn());
               DL = DebugLoc::get(idx);
@@ -357,11 +354,9 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf,
               if (DW->ValidDebugInfo(SP, CodeGenOpt::Default)) {
                 DISubprogram Subprogram(cast<GlobalVariable>(SP));
                 DICompileUnit CU(Subprogram.getCompileUnit());
-                std::string Dir, FN;
-                unsigned SrcFile = DW->getOrCreateSourceID(CU.getDirectory(Dir),
-                                                           CU.getFilename(FN));
                 unsigned Line = Subprogram.getLineNumber();
-                DL = DebugLoc::get(MF->getOrCreateDebugLocID(SrcFile, Line, 0));
+                DL = DebugLoc::get(MF->getOrCreateDebugLocID(CU.getGV(),
+                                                             Line, 0));
               }
             }
 
@@ -3905,10 +3900,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
                                         SPI.getColumn(),
                                         SPI.getContext()));
       DICompileUnit CU(cast<GlobalVariable>(SPI.getContext()));
-      std::string Dir, FN;
-      unsigned SrcFile = DW->getOrCreateSourceID(CU.getDirectory(Dir),
-                                                 CU.getFilename(FN));
-      unsigned idx = MF.getOrCreateDebugLocID(SrcFile,
+      unsigned idx = MF.getOrCreateDebugLocID(CU.getGV(),
                                               SPI.getLine(), SPI.getColumn());
       setCurDebugLoc(DebugLoc::get(idx));
     }
@@ -3974,9 +3966,6 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
         DebugLoc PrevLoc = CurDebugLoc;
         DISubprogram Subprogram(cast<GlobalVariable>(SP));
         DICompileUnit CompileUnit = Subprogram.getCompileUnit();
-        std::string Dir, FN;
-        unsigned SrcFile = DW->getOrCreateSourceID(CompileUnit.getDirectory(Dir),
-                                                   CompileUnit.getFilename(FN));
         
         if (!Subprogram.describes(MF.getFunction())) {
           // This is a beginning of an inlined function.
@@ -3989,21 +3978,23 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
 
           // Record the source line.
           unsigned Line = Subprogram.getLineNumber();
-          unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile);
-          setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0)));
+          unsigned LabelID = DW->RecordSourceLine(Line, 0, CompileUnit);
+          setCurDebugLoc(DebugLoc::get(
+                       MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0)));
 
           DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(),
                                    getRoot(), LabelID));
           DebugLocTuple PrevLocTpl = MF.getDebugLocTuple(PrevLoc);
           DW->RecordInlinedFnStart(&FSI, Subprogram, LabelID, 
-                                   PrevLocTpl.Src,
+                                   DICompileUnit(PrevLocTpl.CompileUnit),
                                    PrevLocTpl.Line,
                                    PrevLocTpl.Col);
         } else {
           // Record the source line.
           unsigned Line = Subprogram.getLineNumber();
-          setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0)));
-          DW->RecordSourceLine(Line, 0, SrcFile);
+          setCurDebugLoc(DebugLoc::get(
+                       MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0)));
+          DW->RecordSourceLine(Line, 0, CompileUnit);
           // llvm.dbg.func_start also defines beginning of function scope.
           DW->RecordRegionStart(cast<GlobalVariable>(FSI.getSubprogram()));
         }
@@ -4022,15 +4013,13 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
         // llvm.dbg.func.start implicitly defines a dbg_stoppoint which is
         // what (most?) gdb expects.
         DICompileUnit CompileUnit = Subprogram.getCompileUnit();
-        std::string Dir, FN;
-        unsigned SrcFile = DW->getOrCreateSourceID(CompileUnit.getDirectory(Dir),
-                                                   CompileUnit.getFilename(FN));
         
         // Record the source line but does not create a label for the normal
         // function start. It will be emitted at asm emission time. However,
         // create a label if this is a beginning of inlined function.
         unsigned Line = Subprogram.getLineNumber();
-        setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0)));
+        setCurDebugLoc(DebugLoc::get(
+                       MF.getOrCreateDebugLocID(CompileUnit.getGV(), Line, 0)));
         // FIXME -  Start new region because llvm.dbg.func_start also defines 
         // beginning of function scope.
       }
index b3f4e15f022ef877dee6b6854d955124d42496a9..babad2511c7b8436f0eac139312b130c99a39439 100644 (file)
@@ -28,6 +28,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/CodeGen/DwarfWriter.h"
 #include "llvm/CodeGen/MachineJumpTableInfo.h"
+#include "llvm/Analysis/DebugInfo.h"
 #include "llvm/Support/Mangler.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/Target/TargetAsmInfo.h"
index b694a185100469d27f0c40372a1d20fdc928ea29..e3edaf81b1eb12d490150102de285772201edd75 100644 (file)
@@ -26,6 +26,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Assembly/Writer.h"
 #include "llvm/CodeGen/DwarfWriter.h"
+#include "llvm/Analysis/DebugInfo.h"
 #include "llvm/Support/Mangler.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/TargetOptions.h"
index cfe1e5d589cbfaf39104b4e55ef71f8ff1f47d9d..2c259e5ee0ce46a6bf7811c58bd5c4638583d676 100644 (file)
@@ -653,11 +653,11 @@ void AsmWriterEmitter::run(std::ostream &O) {
     << "      DW->ShouldEmitDwarfDebug() && OptLevel != CodeGenOpt::None) {\n"
     << "    DebugLoc CurDL = MI->getDebugLoc();\n\n"
     << "    if (!CurDL.isUnknown()) {\n"
-    << "      static DebugLocTuple PrevDLT(~0U, ~0U, ~0U);\n"
+    << "      static DebugLocTuple PrevDLT(0, ~0U, ~0U);\n"
     << "      DebugLocTuple CurDLT = MF->getDebugLocTuple(CurDL);\n\n"
-    << "      if (PrevDLT.Src != ~0U && PrevDLT != CurDLT)\n"
+    << "      if (PrevDLT.CompileUnit != 0 && PrevDLT != CurDLT)\n"
     << "        printLabel(DW->RecordSourceLine(CurDLT.Line, CurDLT.Col,\n"
-    << "                                        CurDLT.Src));\n\n"
+    << "                               DICompileUnit(CurDLT.CompileUnit)));\n\n"
     << "      PrevDLT = CurDLT;\n"
     << "    }\n"
     << "  }\n\n";