Changes in directory llvm/include/llvm/CodeGen:
AsmPrinter.h updated: 1.24 -> 1.25 DwarfWriter.h updated: 1.4 -> 1.5 MachineDebugInfo.h updated: 1.3 -> 1.4 SelectionDAG.h updated: 1.82 -> 1.83 --- Log message: Applied some recommend changes from sabre. The dominate one beginning "let the pass manager do it's thing." Fixes crash when compiling -g files and suppresses dwarf statements if no debug info is present. --- Diffs of the changes: (+88 -112) AsmPrinter.h | 45 ++------------------ DwarfWriter.h | 119 ++++++++++++++++++++++++++++------------------------- MachineDebugInfo.h | 30 +++++-------- SelectionDAG.h | 6 ++ 4 files changed, 88 insertions(+), 112 deletions(-) Index: llvm/include/llvm/CodeGen/AsmPrinter.h diff -u llvm/include/llvm/CodeGen/AsmPrinter.h:1.24 llvm/include/llvm/CodeGen/AsmPrinter.h:1.25 --- llvm/include/llvm/CodeGen/AsmPrinter.h:1.24 Wed Jan 4 07:52:30 2006 +++ llvm/include/llvm/CodeGen/AsmPrinter.h Wed Jan 4 16:28:25 2006 @@ -36,7 +36,7 @@ /// unsigned FunctionNumber; - protected: + public: /// Output stream on which we're printing assembly code. /// std::ostream &O; @@ -162,7 +162,8 @@ /// HasDotTypeDotSizeDirective - True if the target has .type and .size /// directives, this is true for most ELF targets. bool HasDotTypeDotSizeDirective; // Defaults to true. - + + protected: AsmPrinter(std::ostream &o, TargetMachine &TM); public: @@ -194,7 +195,7 @@ /// doFinalization - Shut down the asmprinter. If you override this in your /// pass, you must make sure to call it explicitly. bool doFinalization(Module &M); - + /// SetupMachineFunction - This should be called when a new MachineFunction /// is being processed from runOnMachineFunction. void SetupMachineFunction(MachineFunction &MF); @@ -231,43 +232,7 @@ private: void EmitXXStructorList(Constant *List); - - public: - /// getCommentString - get the comment string. - /// - const char *getCommentString() { - return CommentString; - } - - /// getData8bitsDirective - get the 8-bit data directive string. - /// - const char *getData8bitsDirective() { - return Data8bitsDirective; - } - - /// getData16bitsDirective - get the 16-bit data directive string. - /// - const char *getData16bitsDirective() { - return Data16bitsDirective; - } - - /// getData32bitsDirective - get the 32-bit data directive string. - /// - const char *getData32bitsDirective() { - return Data32bitsDirective; - } - - /// getData64bitsDirective - get the 64-bit data directive string. - /// - const char *getData64bitsDirective() { - return Data64bitsDirective; - } - - /// getPrivateGlobalPrefix - get private label prefix. - /// - const char *getPrivateGlobalPrefix() { - return PrivateGlobalPrefix; - } + }; } Index: llvm/include/llvm/CodeGen/DwarfWriter.h diff -u llvm/include/llvm/CodeGen/DwarfWriter.h:1.4 llvm/include/llvm/CodeGen/DwarfWriter.h:1.5 --- llvm/include/llvm/CodeGen/DwarfWriter.h:1.4 Wed Jan 4 07:52:30 2006 +++ llvm/include/llvm/CodeGen/DwarfWriter.h Wed Jan 4 16:28:25 2006 @@ -14,8 +14,7 @@ #ifndef LLVM_CODEGEN_DWARFPRINTER_H #define LLVM_CODEGEN_DWARFPRINTER_H -#include <iostream> -#include "llvm/CodeGen/MachineDebugInfo.h" +#include <iosfwd> namespace llvm { @@ -429,6 +428,7 @@ // Forward declarations. // class AsmPrinter; + class MachineDebugInfo; //===--------------------------------------------------------------------===// // DwarfWriter - emits dwarf debug and exception handling directives. @@ -447,12 +447,28 @@ /// DebugInfo - Collected debug information. /// - MachineDebugInfo &DebugInfo; + MachineDebugInfo *DebugInfo; + /// didInitial - Flag to indicate if initial emission has been done. + /// + bool didInitial; + + //===------------------------------------------------------------------===// + // Properties to be set by the derived class ctor, used to configure the + // dwarf writer. + /// hasLEB128 - True if target asm supports leb128 directives. /// bool hasLEB128; /// Defaults to false. + /// hasDotLoc - True if target asm supports .loc directives. + /// + bool hasDotLoc; /// Defaults to false. + + /// hasDotFile - True if target asm supports .file directives. + /// + bool hasDotFile; /// Defaults to false. + /// needsSet - True if target asm can't compute addresses on data /// directives. bool needsSet; /// Defaults to false. @@ -469,94 +485,89 @@ /// const char *DwarfLineSection; /// Defaults to ".debug_line". + //===------------------------------------------------------------------===// + public: // Ctor. - DwarfWriter(std::ostream &o, AsmPrinter *ap, MachineDebugInfo &di) + DwarfWriter(std::ostream &o, AsmPrinter *ap) : O(o) , Asm(ap) - , DebugInfo(di) + , DebugInfo(NULL) + , didInitial(false) , hasLEB128(false) + , hasDotLoc(false) + , hasDotFile(false) , needsSet(false) , DwarfAbbrevSection(".debug_abbrev") , DwarfInfoSection(".debug_info") , DwarfLineSection(".debug_line") {} + /// SetDebugInfo - Set DebugInfo at when it's know that pass manager + /// has created it. + void SetDebugInfo(MachineDebugInfo *di) { DebugInfo = di; } + /// EmitHex - Emit a hexidecimal string to the output stream. /// - void EmitHex(unsigned Value) { - O << "0x" - << std::hex - << Value - << std::dec; - } + void EmitHex(unsigned Value) const; /// EmitComment - Emit a simple string comment. /// - void EmitComment(const char *Comment) { - O << "\t" - << Asm->getCommentString() - << " " - << Comment - << "\n"; - } + void EmitComment(const char *Comment) const; /// EmitULEB128 - Emit a series of hexidecimal values (separated by commas) /// representing an unsigned leb128 value. /// - void EmitULEB128(unsigned Value) { - do { - unsigned Byte = Value & 0x7f; - Value >>= 7; - if (Value) Byte |= 0x80; - EmitHex(Byte); - if (Value) O << ", "; - } while (Value); - } + void EmitULEB128(unsigned Value) const; /// EmitSLEB128 - Emit a series of hexidecimal values (separated by commas) /// representing a signed leb128 value. /// - void EmitSLEB128(int Value) { - int Sign = Value >> (8 * sizeof(Value) - 1); - bool IsMore; - - do { - unsigned Byte = Value & 0x7f; - Value >>= 7; - IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0; - if (IsMore) Byte |= 0x80; - EmitHex(Byte); - if (IsMore) O << ", "; - } while (IsMore); - } + void EmitSLEB128(int Value) const; /// EmitLabelName - Emit label name for internal use by dwarf. /// - void EmitLabelName(const char *Tag, int Num) { - O << Asm->getPrivateGlobalPrefix() - << "debug_" - << Tag - << Num; - } + void EmitLabelName(const char *Tag, int Num) const; /// EmitLabel - Emit location label for internal use by dwarf. /// - void EmitLabel(const char *Tag, int Num) { - EmitLabelName(Tag, Num); - O << ":\n"; - } + void EmitLabel(const char *Tag, int Num) const; - // Defined elsewhere - - void EmitULEB128Bytes(unsigned Value, std::string Comment); - void EmitSLEB128Bytes(int Value, std::string Comment); + /// EmitULEB128Bytes - Emit an assembler byte data directive to compose an + /// unsigned leb128 value. Comment is added to the end of the directive if + /// DwarfVerbose is true (should not contain any newlines.) + /// + void EmitULEB128Bytes(unsigned Value, const char *Comment) const; + + /// EmitSLEB128Bytes - Emit an assembler byte data directive to compose a + /// signed leb128 value. Comment is added to the end of the directive if + /// DwarfVerbose is true (should not contain any newlines.) + /// + void EmitSLEB128Bytes(int Value, const char *Comment) const; + + /// EmitInitial - Emit initial dwarf declarations. + /// + void EmitInitial() const; + + /// ShouldEmitDwarf - Determine if dwarf declarations should be made. + /// + bool ShouldEmitDwarf(); + /// BeginModule - Emit all dwarf sections that should come prior to the + /// content. void BeginModule(); + + /// EndModule - Emit all dwarf sections that should come after the content. + /// void EndModule(); + /// BeginFunction - Emit pre-function debug information. + /// void BeginFunction(); + + /// EndFunction - Emit post-function debug information. + /// void EndFunction(); }; Index: llvm/include/llvm/CodeGen/MachineDebugInfo.h diff -u llvm/include/llvm/CodeGen/MachineDebugInfo.h:1.3 llvm/include/llvm/CodeGen/MachineDebugInfo.h:1.4 --- llvm/include/llvm/CodeGen/MachineDebugInfo.h:1.3 Wed Jan 4 08:29:26 2006 +++ llvm/include/llvm/CodeGen/MachineDebugInfo.h Wed Jan 4 16:28:25 2006 @@ -28,11 +28,7 @@ /// class MachineDebugInfo : public ImmutablePass { private: - // convenience types - typedef std::map<std::string, unsigned> StrIntMap; - typedef StrIntMap::iterator StrIntMapIter; - - StrIntMap SourceMap; // Map of source file path to id + std::map<std::string, unsigned> SourceMap; // Map of source file path to id unsigned SourceCount; // Number of source files (used to // generate id) unsigned UniqueID; // Number used to unique labels used @@ -50,25 +46,25 @@ /// hasInfo - Returns true if debug info is present. /// // FIXME - need scheme to suppress debug output. - bool hasInfo() { return true; } + bool hasInfo() const { return SourceCount != 0; } - /// NextUniqueID - Returns a unique number for labels used by debugger. + /// getNextUniqueID - Returns a unique number for labels used by debugger. /// - unsigned NextUniqueID() { return UniqueID++; } + unsigned getNextUniqueID() { return UniqueID++; } bool doInitialization(); bool doFinalization(); - unsigned RecordSource(std::string fname, std::string dirname); - std::vector<std::string> getSourceFiles(); + + /// getUniqueSourceID - Register a source file with debug info. Returns an id. + /// + unsigned getUniqueSourceID(const std::string &fname, + const std::string &dirname); + + /// getSourceFiles - Return a vector of files. Vector index + 1 equals id. + /// + std::vector<std::string> getSourceFiles() const; }; // End class MachineDebugInfo -//===----------------------------------------------------------------------===// - -// FIXME - temporary hack until we can find a place to hang debug info from. -MachineDebugInfo &getMachineDebugInfo(); - -// FIXME - temporary hack until we can find a place to hand debug info from. -ModulePass *createDebugInfoPass(); } // End llvm namespace Index: llvm/include/llvm/CodeGen/SelectionDAG.h diff -u llvm/include/llvm/CodeGen/SelectionDAG.h:1.82 llvm/include/llvm/CodeGen/SelectionDAG.h:1.83 --- llvm/include/llvm/CodeGen/SelectionDAG.h:1.82 Thu Dec 22 15:16:35 2005 +++ llvm/include/llvm/CodeGen/SelectionDAG.h Wed Jan 4 16:28:25 2006 @@ -25,6 +25,7 @@ namespace llvm { class TargetLowering; class TargetMachine; + class MachineDebugInfo; class MachineFunction; /// SelectionDAG class - This is used to represent a portion of an LLVM function @@ -41,6 +42,7 @@ class SelectionDAG { TargetLowering &TLI; MachineFunction &MF; + MachineDebugInfo *DI; // Root - The root of the entire DAG. EntryNode - The starting token. SDOperand Root, EntryNode; @@ -52,7 +54,8 @@ std::map<std::pair<const Value*, int>, SDNode*> ValueNodes; public: - SelectionDAG(TargetLowering &tli, MachineFunction &mf) : TLI(tli), MF(mf) { + SelectionDAG(TargetLowering &tli, MachineFunction &mf, MachineDebugInfo *di) + : TLI(tli), MF(mf), DI(di) { EntryNode = Root = getNode(ISD::EntryToken, MVT::Other); } ~SelectionDAG(); @@ -60,6 +63,7 @@ MachineFunction &getMachineFunction() const { return MF; } const TargetMachine &getTarget() const; TargetLowering &getTargetLoweringInfo() const { return TLI; } + MachineDebugInfo *getMachineDebugInfo() const { return DI; } /// viewGraph - Pop up a ghostview window with the DAG rendered using 'dot'. /// _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits