[llvm-commits] CVS: llvm/include/llvm/CodeGen/AsmPrinter.h DwarfWriter.h
Jim Laskey
jlaskey at apple.com
Wed Sep 6 11:35:04 PDT 2006
Changes in directory llvm/include/llvm/CodeGen:
AsmPrinter.h updated: 1.45 -> 1.46
DwarfWriter.h updated: 1.38 -> 1.39
---
Log message:
Separate target specific asm properties from the asm printers.
---
Diffs of the changes: (+25 -237)
AsmPrinter.h | 168 ++++------------------------------------------------------
DwarfWriter.h | 94 ++++----------------------------
2 files changed, 25 insertions(+), 237 deletions(-)
Index: llvm/include/llvm/CodeGen/AsmPrinter.h
diff -u llvm/include/llvm/CodeGen/AsmPrinter.h:1.45 llvm/include/llvm/CodeGen/AsmPrinter.h:1.46
--- llvm/include/llvm/CodeGen/AsmPrinter.h:1.45 Sat Aug 12 16:29:52 2006
+++ llvm/include/llvm/CodeGen/AsmPrinter.h Wed Sep 6 13:34:40 2006
@@ -7,9 +7,9 @@
//
//===----------------------------------------------------------------------===//
//
-// This class is intended to be used as a base class for target-specific
-// asmwriters. This class primarily takes care of printing global constants,
-// which are printed in a very similar way across all targets.
+// This file contains a class to be used as the base class for target specific
+// asm writers. This class primarily handles common functionality used by
+// all asm writers.
//
//===----------------------------------------------------------------------===//
@@ -22,10 +22,14 @@
namespace llvm {
class Constant;
class ConstantArray;
- class Mangler;
class GlobalVariable;
class MachineConstantPoolEntry;
+ class Mangler;
+ class TargetAsmInfo;
+
+ /// AsmPrinter - This class is intended to be used as a driving class for all
+ /// asm writers.
class AsmPrinter : public MachineFunctionPass {
/// FunctionNumber - This provides a unique ID for each function emitted in
/// this translation unit. It is autoincremented by SetupMachineFunction,
@@ -42,6 +46,10 @@
/// Target machine description.
///
TargetMachine &TM;
+
+ /// Target Asm Printer information.
+ ///
+ TargetAsmInfo *TAI;
/// Name-mangler for global names.
///
@@ -51,163 +59,13 @@
/// beginning of each call to runOnMachineFunction().
///
std::string CurrentFnName;
-
- //===------------------------------------------------------------------===//
- // Properties to be set by the derived class ctor, used to configure the
- // asmwriter.
-
- /// CommentString - This indicates the comment character used by the
- /// assembler.
- const char *CommentString; // Defaults to "#"
-
- /// GlobalPrefix - If this is set to a non-empty string, it is prepended
- /// onto all global symbols. This is often used for "_" or ".".
- const char *GlobalPrefix; // Defaults to ""
-
- /// PrivateGlobalPrefix - This prefix is used for globals like constant
- /// pool entries that are completely private to the .o file and should not
- /// have names in the .o file. This is often "." or "L".
- const char *PrivateGlobalPrefix; // Defaults to "."
-
- /// GlobalVarAddrPrefix/Suffix - If these are nonempty, these strings
- /// will enclose any GlobalVariable (that isn't a function)
- ///
- const char *GlobalVarAddrPrefix; // Defaults to ""
- const char *GlobalVarAddrSuffix; // Defaults to ""
-
- /// FunctionAddrPrefix/Suffix - If these are nonempty, these strings
- /// will enclose any GlobalVariable that points to a function.
- /// For example, this is used by the IA64 backend to materialize
- /// function descriptors, by decorating the ".data8" object with the
- /// \literal @fptr( ) \endliteral
- /// link-relocation operator.
- ///
- const char *FunctionAddrPrefix; // Defaults to ""
- const char *FunctionAddrSuffix; // Defaults to ""
-
- /// InlineAsmStart/End - If these are nonempty, they contain a directive to
- /// emit before and after an inline assmebly statement.
- const char *InlineAsmStart; // Defaults to "#APP\n"
- const char *InlineAsmEnd; // Defaults to "#NO_APP\n"
-
- //===--- Data Emission Directives -------------------------------------===//
-
- /// ZeroDirective - this should be set to the directive used to get some
- /// number of zero bytes emitted to the current section. Common cases are
- /// "\t.zero\t" and "\t.space\t". If this is set to null, the
- /// Data*bitsDirective's will be used to emit zero bytes.
- const char *ZeroDirective; // Defaults to "\t.zero\t"
- const char *ZeroDirectiveSuffix; // Defaults to ""
-
- /// AsciiDirective - This directive allows emission of an ascii string with
- /// the standard C escape characters embedded into it.
- const char *AsciiDirective; // Defaults to "\t.ascii\t"
-
- /// AscizDirective - If not null, this allows for special handling of
- /// zero terminated strings on this target. This is commonly supported as
- /// ".asciz". If a target doesn't support this, it can be set to null.
- const char *AscizDirective; // Defaults to "\t.asciz\t"
-
- /// DataDirectives - These directives are used to output some unit of
- /// integer data to the current section. If a data directive is set to
- /// null, smaller data directives will be used to emit the large sizes.
- const char *Data8bitsDirective; // Defaults to "\t.byte\t"
- const char *Data16bitsDirective; // Defaults to "\t.short\t"
- const char *Data32bitsDirective; // Defaults to "\t.long\t"
- const char *Data64bitsDirective; // Defaults to "\t.quad\t"
-
- //===--- Alignment Information ----------------------------------------===//
-
- /// AlignDirective - The directive used to emit round up to an alignment
- /// boundary.
- ///
- const char *AlignDirective; // Defaults to "\t.align\t"
-
- /// AlignmentIsInBytes - If this is true (the default) then the asmprinter
- /// emits ".align N" directives, where N is the number of bytes to align to.
- /// Otherwise, it emits ".align log2(N)", e.g. 3 to align to an 8 byte
- /// boundary.
- bool AlignmentIsInBytes; // Defaults to true
-
- //===--- Section Switching Directives ---------------------------------===//
/// CurrentSection - The current section we are emitting to. This is
/// controlled and used by the SwitchSection method.
std::string CurrentSection;
-
- /// SwitchToSectionDirective - This is the directive used when we want to
- /// emit a global to an arbitrary section. The section name is emited after
- /// this.
- const char *SwitchToSectionDirective; // Defaults to "\t.section\t"
-
- /// TextSectionStartSuffix - This is printed after each start of section
- /// directive for text sections.
- const char *TextSectionStartSuffix; // Defaults to "".
-
- /// DataSectionStartSuffix - This is printed after each start of section
- /// directive for data sections.
- const char *DataSectionStartSuffix; // Defaults to "".
-
- /// SectionEndDirectiveSuffix - If non-null, the asm printer will close each
- /// section with the section name and this suffix printed.
- const char *SectionEndDirectiveSuffix; // Defaults to null.
-
- /// ConstantPoolSection - This is the section that we SwitchToSection right
- /// before emitting the constant pool for a function.
- const char *ConstantPoolSection; // Defaults to "\t.section .rodata\n"
-
- /// JumpTableDataSection - This is the section that we SwitchToSection right
- /// before emitting the jump tables for a function when the relocation model
- /// is not PIC.
- const char *JumpTableDataSection; // Defaults to "\t.section .rodata\n"
-
- /// JumpTableTextSection - This is the section that we SwitchToSection right
- /// before emitting the jump tables for a function when the relocation model
- /// is PIC.
- const char *JumpTableTextSection; // Defaults to "\t.text\n"
-
- /// StaticCtorsSection - This is the directive that is emitted to switch to
- /// a section to emit the static constructor list.
- /// Defaults to "\t.section .ctors,\"aw\", at progbits".
- const char *StaticCtorsSection;
-
- /// StaticDtorsSection - This is the directive that is emitted to switch to
- /// a section to emit the static destructor list.
- /// Defaults to "\t.section .dtors,\"aw\", at progbits".
- const char *StaticDtorsSection;
-
- /// FourByteConstantSection, EightByteConstantSection,
- /// SixteenByteConstantSection - These are special sections where we place
- /// 4-, 8-, and 16- byte constant literals.
- const char *FourByteConstantSection;
- const char *EightByteConstantSection;
- const char *SixteenByteConstantSection;
-
- //===--- Global Variable Emission Directives --------------------------===//
-
- /// SetDirective - This is the name of a directive that can be used to tell
- /// the assembler to set the value of a variable to some expression.
- const char *SetDirective; // Defaults to null.
-
- /// LCOMMDirective - This is the name of a directive (if supported) that can
- /// be used to efficiently declare a local (internal) block of zero
- /// initialized data in the .bss/.data section. The syntax expected is:
- /// \literal <LCOMMDirective> SYMBOLNAME LENGTHINBYTES, ALIGNMENT
- /// \endliteral
- const char *LCOMMDirective; // Defaults to null.
-
- const char *COMMDirective; // Defaults to "\t.comm\t".
-
- /// COMMDirectiveTakesAlignment - True if COMMDirective take a third
- /// argument that specifies the alignment of the declaration.
- bool COMMDirectiveTakesAlignment; // Defaults to true.
-
- /// 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);
+ AsmPrinter(std::ostream &o, TargetMachine &TM, TargetAsmInfo *T);
public:
/// SwitchToTextSection - Switch to the specified section of the executable
Index: llvm/include/llvm/CodeGen/DwarfWriter.h
diff -u llvm/include/llvm/CodeGen/DwarfWriter.h:1.38 llvm/include/llvm/CodeGen/DwarfWriter.h:1.39
--- llvm/include/llvm/CodeGen/DwarfWriter.h:1.38 Fri Jun 23 07:51:53 2006
+++ llvm/include/llvm/CodeGen/DwarfWriter.h Wed Sep 6 13:34:40 2006
@@ -48,6 +48,7 @@
class MRegisterInfo;
class SubprogramDesc;
class SourceLineInfo;
+class TargetAsmInfo;
class TargetData;
class Type;
class TypeDesc;
@@ -70,7 +71,8 @@
// DwarfWriter - Emits Dwarf debug and exception handling directives.
//
class DwarfWriter {
-protected:
+
+private:
//===--------------------------------------------------------------------===//
// Core attributes used by the Dwarf writer.
@@ -85,6 +87,9 @@
///
AsmPrinter *Asm;
+ /// TAI - Target Asm Printer.
+ TargetAsmInfo *TAI;
+
/// TD - Target data.
const TargetData *TD;
@@ -147,93 +152,14 @@
/// SectionSourceLines - Tracks line numbers per text section.
///
std::vector<std::vector<SourceLineInfo *> > SectionSourceLines;
-
- //===--------------------------------------------------------------------===//
- // Properties to be set by the derived class ctor, used to configure the
- // Dwarf writer.
- //
-
- /// AddressSize - Size of addresses used in file.
- ///
- unsigned AddressSize;
- /// 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.
-
- /// DwarfAbbrevSection - Section directive for Dwarf abbrev.
- ///
- const char *DwarfAbbrevSection; /// Defaults to ".debug_abbrev".
-
- /// DwarfInfoSection - Section directive for Dwarf info.
- ///
- const char *DwarfInfoSection; /// Defaults to ".debug_info".
- /// DwarfLineSection - Section directive for Dwarf info.
- ///
- const char *DwarfLineSection; /// Defaults to ".debug_line".
-
- /// DwarfFrameSection - Section directive for Dwarf info.
- ///
- const char *DwarfFrameSection; /// Defaults to ".debug_frame".
-
- /// DwarfPubNamesSection - Section directive for Dwarf info.
- ///
- const char *DwarfPubNamesSection; /// Defaults to ".debug_pubnames".
-
- /// DwarfPubTypesSection - Section directive for Dwarf info.
- ///
- const char *DwarfPubTypesSection; /// Defaults to ".debug_pubtypes".
-
- /// DwarfStrSection - Section directive for Dwarf info.
- ///
- const char *DwarfStrSection; /// Defaults to ".debug_str".
-
- /// DwarfLocSection - Section directive for Dwarf info.
- ///
- const char *DwarfLocSection; /// Defaults to ".debug_loc".
-
- /// DwarfARangesSection - Section directive for Dwarf info.
- ///
- const char *DwarfARangesSection; /// Defaults to ".debug_aranges".
-
- /// DwarfRangesSection - Section directive for Dwarf info.
- ///
- const char *DwarfRangesSection; /// Defaults to ".debug_ranges".
-
- /// DwarfMacInfoSection - Section directive for Dwarf info.
- ///
- const char *DwarfMacInfoSection; /// Defaults to ".debug_macinfo".
-
- /// TextSection - Section directive for standard text.
- ///
- const char *TextSection; /// Defaults to ".text".
-
- /// DataSection - Section directive for standard data.
- ///
- const char *DataSection; /// Defaults to ".data".
+public:
//===--------------------------------------------------------------------===//
// Emission and print routines
//
-public:
- /// getAddressSize - Return the size of a target address in bytes.
- ///
- unsigned getAddressSize() const { return AddressSize; }
-
/// PrintHex - Print a value as a hexidecimal value.
///
void PrintHex(int Value) const;
@@ -461,9 +387,13 @@
public:
- DwarfWriter(std::ostream &OS, AsmPrinter *A);
+ DwarfWriter(std::ostream &OS, AsmPrinter *A, TargetAsmInfo *T);
virtual ~DwarfWriter();
+ // Accessors.
+ //
+ TargetAsmInfo *getTargetAsmInfo() const { return TAI; }
+
/// SetDebugInfo - Set DebugInfo when it's known that pass manager has
/// created it. Set by the target AsmPrinter.
void SetDebugInfo(MachineDebugInfo *DI);
More information about the llvm-commits
mailing list