[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