[llvm-commits] [llvm] r61928 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp

Evan Cheng echeng at apple.com
Thu Jan 8 13:36:36 PST 2009


On Jan 8, 2009, at 9:19 AM, Devang Patel wrote:

> Author: dpatel
> Date: Thu Jan  8 11:19:22 2009
> New Revision: 61928
>
> URL: http://llvm.org/viewvc/llvm-project?rev=61928&view=rev
> Log:
> Add DebugInfo based APIs to record source line info.
>
> Modified:
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61928&r1=61927&r2=61928&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Thu Jan  8  
> 11:19:22 2009
> @@ -1166,6 +1166,26 @@
> };
>
> // 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> +/// SourceLineInfo - This class is used to record source line  
> correspondence.
> +///
> +class SrcLineInfo {
> +  unsigned Line;                        // Source line number.
> +  unsigned Column;                      // Source column.
> +  unsigned SourceID;                    // Source ID number.
> +  unsigned LabelID;                     // Label in code ID number.

Do we have to use unsigned for each of these fields? Can we shrink the  
data structure (if that matters)?

>
> +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; }
> +  unsigned getSourceID() const { return SourceID; }
> +  unsigned getLabelID()  const { return LabelID; }
> +};
> +
> +
> +// 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> /// SrcFileInfo - This class is used to track source information.
> ///
> class SrcFileInfo {
> @@ -1259,7 +1279,7 @@
>   /// CompileUnits - All the compile units involved in this build.   
> The index
>   /// of each entry in this vector corresponds to the sources in MMI.
>   std::vector<CompileUnit *> CompileUnits;
> -  DenseMap<GlobalVariable *, CompileUnit *> DW_CUs;
> +  DenseMap<Value *, CompileUnit *> DW_CUs;
>
>   /// AbbreviationsSet - Used to uniquely define abbreviations.
>   ///
> @@ -1277,6 +1297,9 @@
>   // SourceFiles - Uniquing vector for source files.
>   UniqueVector<SrcFileInfo> SrcFiles;
>
> +  // Lines - List of of source line correspondence.
> +  std::vector<SrcLineInfo> Lines;
> +
>   FoldingSet<DIEValue> ValuesSet;
>
>   /// Values - A list of all the unique values in use.
> @@ -2539,6 +2562,23 @@
>     return VariableDie;
>   }
>
> +  unsigned RecordSourceLine(Value *V, unsigned Line, unsigned Col) {
> +    CompileUnit *Unit = DW_CUs[V];
> +    assert (Unit && "Unable to find CompileUnit");
> +    unsigned ID = NextLabelID();
> +    Lines.push_back(SrcLineInfo(Line, Col, Unit->getID(), ID));
> +    return ID;
> +  }

Comments plz. :-)

>
> +
> +  unsigned getRecordSourceLineCount() {
> +    return Lines.size();
> +  }

Does this gets called a lot? If so, we want to keep the count  
separately.


Evan

>
> +
> +  unsigned RecordSource(const std::string &Directory,
> +                        const std::string &File) {
> +    unsigned DID = Directories.insert(Directory);
> +    return SrcFiles.insert(SrcFileInfo(DID,File));
> +  }
>
>   /// RecordRegionStart - Indicate the start of a region.
>   ///
> @@ -3447,9 +3487,8 @@
>     for (std::vector<GlobalVariable *>::iterator RI = Result.begin(),
>            RE = Result.end(); RI != RE; ++RI) {
>       DICompileUnit *DIUnit = new DICompileUnit(*RI);
> -      unsigned DID = Directories.insert(DIUnit->getDirectory());
> -      unsigned ID = SrcFiles.insert(SrcFileInfo(DID,
> -                                                DIUnit- 
> >getFilename()));
> +      unsigned ID = RecordSource(DIUnit->getDirectory(),
> +                                 DIUnit->getFilename());
>
>       DIE *Die = new DIE(DW_TAG_compile_unit);
>       AddSectionOffset(Die, DW_AT_stmt_list, DW_FORM_data4,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list