aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/AsmPrinter.h4
-rw-r--r--include/llvm/Target/COFFTargetAsmInfo.h8
-rw-r--r--include/llvm/Target/DarwinTargetAsmInfo.h18
-rw-r--r--include/llvm/Target/ELFTargetAsmInfo.h23
-rw-r--r--include/llvm/Target/TargetAsmInfo.h102
-rw-r--r--include/llvm/Target/TargetLowering.h8
-rw-r--r--include/llvm/Target/TargetLoweringObjectFile.h187
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp17
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.cpp13
-rw-r--r--lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp12
-rw-r--r--lib/CodeGen/ELFWriter.cpp12
-rw-r--r--lib/CodeGen/SelectionDAG/TargetLowering.cpp14
-rw-r--r--lib/Target/ARM/ARMISelLowering.cpp9
-rw-r--r--lib/Target/ARM/ARMTargetAsmInfo.cpp2
-rw-r--r--lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp7
-rw-r--r--lib/Target/Alpha/AlphaISelLowering.cpp15
-rw-r--r--lib/Target/Alpha/AlphaTargetAsmInfo.cpp3
-rw-r--r--lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp5
-rw-r--r--lib/Target/CMakeLists.txt1
-rw-r--r--lib/Target/COFFTargetAsmInfo.cpp57
-rw-r--r--lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp7
-rw-r--r--lib/Target/CellSPU/SPUISelLowering.cpp18
-rw-r--r--lib/Target/CellSPU/SPUTargetAsmInfo.cpp4
-rw-r--r--lib/Target/DarwinTargetAsmInfo.cpp103
-rw-r--r--lib/Target/ELFTargetAsmInfo.cpp213
-rw-r--r--lib/Target/MSP430/MSP430AsmPrinter.cpp3
-rw-r--r--lib/Target/MSP430/MSP430ISelLowering.cpp4
-rw-r--r--lib/Target/MSP430/MSP430TargetAsmInfo.cpp2
-rw-r--r--lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp9
-rw-r--r--lib/Target/Mips/MipsISelLowering.cpp12
-rw-r--r--lib/Target/Mips/MipsTargetAsmInfo.cpp2
-rw-r--r--lib/Target/PIC16/CMakeLists.txt1
-rw-r--r--lib/Target/PIC16/PIC16AsmPrinter.cpp42
-rw-r--r--lib/Target/PIC16/PIC16AsmPrinter.h11
-rw-r--r--lib/Target/PIC16/PIC16ISelLowering.cpp4
-rw-r--r--lib/Target/PIC16/PIC16TargetAsmInfo.cpp396
-rw-r--r--lib/Target/PIC16/PIC16TargetAsmInfo.h79
-rw-r--r--lib/Target/PIC16/PIC16TargetObjectFile.cpp401
-rw-r--r--lib/Target/PIC16/PIC16TargetObjectFile.h100
-rw-r--r--lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp15
-rw-r--r--lib/Target/PowerPC/PPCISelLowering.cpp10
-rw-r--r--lib/Target/PowerPC/PPCTargetAsmInfo.cpp3
-rw-r--r--lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp5
-rw-r--r--lib/Target/Sparc/SparcISelLowering.cpp25
-rw-r--r--lib/Target/Sparc/SparcTargetAsmInfo.cpp21
-rw-r--r--lib/Target/Sparc/SparcTargetAsmInfo.h4
-rw-r--r--lib/Target/SystemZ/AsmPrinter/SystemZAsmPrinter.cpp5
-rw-r--r--lib/Target/SystemZ/SystemZISelLowering.cpp6
-rw-r--r--lib/Target/SystemZ/SystemZTargetAsmInfo.cpp2
-rw-r--r--lib/Target/TargetAsmInfo.cpp218
-rw-r--r--lib/Target/TargetLoweringObjectFile.cpp647
-rw-r--r--lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp7
-rw-r--r--lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp3
-rw-r--r--lib/Target/X86/X86ISelLowering.cpp18
-rw-r--r--lib/Target/X86/X86TargetAsmInfo.cpp5
-rw-r--r--lib/Target/X86/X86TargetAsmInfo.h4
-rw-r--r--lib/Target/X86/X86TargetMachine.cpp26
-rw-r--r--lib/Target/XCore/CMakeLists.txt1
-rw-r--r--lib/Target/XCore/XCoreAsmPrinter.cpp5
-rw-r--r--lib/Target/XCore/XCoreISelLowering.cpp4
-rw-r--r--lib/Target/XCore/XCoreTargetAsmInfo.cpp32
-rw-r--r--lib/Target/XCore/XCoreTargetAsmInfo.h6
-rw-r--r--lib/Target/XCore/XCoreTargetObjectFile.cpp32
-rw-r--r--lib/Target/XCore/XCoreTargetObjectFile.h25
64 files changed, 1655 insertions, 1402 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h
index 78de33fa72..6cd2d8ea4f 100644
--- a/include/llvm/CodeGen/AsmPrinter.h
+++ b/include/llvm/CodeGen/AsmPrinter.h
@@ -39,6 +39,7 @@ namespace llvm {
class Mangler;
class Section;
class TargetAsmInfo;
+ class TargetLoweringObjectFile;
class Type;
class formatted_raw_ostream;
@@ -75,6 +76,9 @@ namespace llvm {
///
TargetMachine &TM;
+ /// getObjFileLowering - Return information about object file lowering.
+ const TargetLoweringObjectFile &getObjFileLowering() const;
+
/// Target Asm Printer information.
///
const TargetAsmInfo *TAI;
diff --git a/include/llvm/Target/COFFTargetAsmInfo.h b/include/llvm/Target/COFFTargetAsmInfo.h
index 4a60c0cce4..a035f2bb87 100644
--- a/include/llvm/Target/COFFTargetAsmInfo.h
+++ b/include/llvm/Target/COFFTargetAsmInfo.h
@@ -16,15 +16,9 @@ namespace llvm {
class COFFTargetAsmInfo : public TargetAsmInfo {
protected:
explicit COFFTargetAsmInfo(const TargetMachine &TM);
- public:
- virtual void getSectionFlagsAsString(SectionKind Kind,
- SmallVectorImpl<char> &Str) const;
-
- virtual const Section *
- SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind) const;
};
}
-#endif // LLVM_ELF_TARGET_ASM_INFO_H
+#endif // LLVM_COFF_TARGET_ASM_INFO_H
diff --git a/include/llvm/Target/DarwinTargetAsmInfo.h b/include/llvm/Target/DarwinTargetAsmInfo.h
index 69bc551970..c934c05742 100644
--- a/include/llvm/Target/DarwinTargetAsmInfo.h
+++ b/include/llvm/Target/DarwinTargetAsmInfo.h
@@ -24,27 +24,9 @@ namespace llvm {
class Mangler;
struct DarwinTargetAsmInfo : public TargetAsmInfo {
- const Section* TextCoalSection;
- const Section* ConstTextCoalSection;
- const Section* ConstDataCoalSection;
- const Section* ConstDataSection;
- const Section* DataCoalSection;
- const Section* FourByteConstantSection;
- const Section* EightByteConstantSection;
- const Section* SixteenByteConstantSection;
-
explicit DarwinTargetAsmInfo(const TargetMachine &TM);
- virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
- SectionKind Kind) const;
virtual bool emitUsedDirectiveFor(const GlobalValue *GV,
Mangler *Mang) const;
-
-
- virtual const Section *
- getSectionForMergeableConstant(SectionKind Kind) const;
-
- private:
- const Section* MergeableStringSection(const GlobalVariable *GV) const;
};
}
diff --git a/include/llvm/Target/ELFTargetAsmInfo.h b/include/llvm/Target/ELFTargetAsmInfo.h
index 1b5bc54db6..1b141d5181 100644
--- a/include/llvm/Target/ELFTargetAsmInfo.h
+++ b/include/llvm/Target/ELFTargetAsmInfo.h
@@ -21,29 +21,6 @@ namespace llvm {
struct ELFTargetAsmInfo : public TargetAsmInfo {
ELFTargetAsmInfo(const TargetMachine &TM);
-
- /// getSectionForMergeableConstant - Given a mergeable constant with the
- /// specified size and relocation information, return a section that it
- /// should be placed in.
- virtual const Section *
- getSectionForMergeableConstant(SectionKind Kind) const;
-
- virtual SectionKind::Kind getKindForNamedSection(const char *Section,
- SectionKind::Kind K) const;
- void getSectionFlagsAsString(SectionKind Kind,
- SmallVectorImpl<char> &Str) const;
-
- virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
- SectionKind Kind) const;
-
- const Section *DataRelSection;
- const Section *DataRelLocalSection;
- const Section *DataRelROSection;
- const Section *DataRelROLocalSection;
-
- const Section *MergeableConst4Section;
- const Section *MergeableConst8Section;
- const Section *MergeableConst16Section;
};
}
diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h
index 9031dd2138..95a6d539c8 100644
--- a/include/llvm/Target/TargetAsmInfo.h
+++ b/include/llvm/Target/TargetAsmInfo.h
@@ -214,15 +214,12 @@ namespace llvm {
};
class Section {
- friend class TargetAsmInfo;
- friend class StringMapEntry<Section>;
- friend class StringMap<Section>;
+ public:
std::string Name;
SectionKind Kind;
- explicit Section() { }
- public:
+ explicit Section() { }
const std::string &getName() const { return Name; }
SectionKind getKind() const { return Kind; }
};
@@ -230,8 +227,6 @@ namespace llvm {
/// TargetAsmInfo - This class is intended to be used as a base class for asm
/// properties and features specific to the target.
class TargetAsmInfo {
- private:
- mutable StringMap<Section> Sections;
protected:
/// TM - The current TargetMachine.
const TargetMachine &TM;
@@ -240,33 +235,11 @@ namespace llvm {
// Properties to be set by the target writer, used to configure asm printer.
//
- /// TextSection - Section directive for standard text.
- ///
- const Section *TextSection; // Defaults to ".text".
-
- /// DataSection - Section directive for standard data.
- ///
- const Section *DataSection; // Defaults to ".data".
-
/// BSSSection - Section directive for uninitialized data. Null if this
/// target doesn't support a BSS section.
///
+/// FIXME: REMOVE.
const char *BSSSection; // Default to ".bss".
- const Section *BSSSection_;
-
- /// ReadOnlySection - This is the directive that is emitted to switch to a
- /// read-only section for constant data (e.g. data declared const,
- /// jump tables).
- const Section *ReadOnlySection; // Defaults to NULL
-
- /// TLSDataSection - Section directive for Thread Local data.
- ///
- const Section *TLSDataSection; // Defaults to ".tdata".
-
- /// TLSBSSSection - Section directive for Thread Local uninitialized data.
- /// Null if this target doesn't support a BSS section.
- ///
- const Section *TLSBSSSection; // Defaults to ".tbss".
/// ZeroFillDirective - Directive for emitting a global to the ZeroFill
/// section on this target. Null if this target doesn't support zerofill.
@@ -456,8 +429,8 @@ namespace llvm {
/// cstring constants (null terminated string that does not contain any
/// other null bytes) on this target. This is commonly supported as
/// ".cstring".
+/// FIXME: REMOVE.
const char *CStringSection; // Defaults to NULL
- const Section *CStringSection_;
/// StaticCtorsSection - This is the directive that is emitted to switch to
/// a section to emit the static constructor list.
@@ -642,10 +615,6 @@ namespace llvm {
explicit TargetAsmInfo(const TargetMachine &TM);
virtual ~TargetAsmInfo();
- const Section *getOrCreateSection(const char *Name,
- bool isDirective,
- SectionKind::Kind K) const;
-
/// Measure the specified inline asm to determine an approximation of its
/// length.
virtual unsigned getInlineAsmLength(const char *Str) const;
@@ -665,48 +634,6 @@ namespace llvm {
virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
bool Global) const;
-
- /// getSectionForMergeableConstant - Given a Mergeable constant with the
- /// specified size and relocation information, return a section that it
- /// should be placed in.
- virtual const Section *getSectionForMergeableConstant(SectionKind Kind)const;
-
-
- /// getKindForNamedSection - If this target wants to be able to override
- /// section flags based on the name of the section specified for a global
- /// variable, it can implement this. This is used on ELF systems so that
- /// ".tbss" gets the TLS bit set etc.
- virtual SectionKind::Kind getKindForNamedSection(const char *Section,
- SectionKind::Kind K) const{
- return K;
- }
-
- /// SectionForGlobal - This method computes the appropriate section to emit
- /// the specified global variable or function definition. This should not
- /// be passed external (or available externally) globals.
- // FIXME: MOVE TO ASMPRINTER.
- const Section* SectionForGlobal(const GlobalValue *GV) const;
-
- /// getSpecialCasedSectionGlobals - Allow the target to completely override
- /// section assignment of a global.
- /// FIXME: ELIMINATE this by making PIC16 implement ADDRESS with
- /// getFlagsForNamedSection.
- virtual const Section *
- getSpecialCasedSectionGlobals(const GlobalValue *GV,
- SectionKind Kind) const {
- return 0;
- }
-
- /// getSectionFlagsAsString - Turn the flags in the specified SectionKind
- /// into a string that can be printed to the assembly file after the
- /// ".section foo" part of a section directive.
- virtual void getSectionFlagsAsString(SectionKind Kind,
- SmallVectorImpl<char> &Str) const {
- }
-
-// FIXME: Eliminate this.
- virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
- SectionKind Kind) const;
/// getSLEB128Size - Compute the number of bytes required for a signed
/// leb128 value.
@@ -734,27 +661,9 @@ namespace llvm {
// Accessors.
//
- const Section *getTextSection() const {
- return TextSection;
- }
- const Section *getDataSection() const {
- return DataSection;
- }
const char *getBSSSection() const {
return BSSSection;
}
- const Section *getBSSSection_() const {
- return BSSSection_;
- }
- const Section *getReadOnlySection() const {
- return ReadOnlySection;
- }
- const Section *getTLSDataSection() const {
- return TLSDataSection;
- }
- const Section *getTLSBSSSection() const {
- return TLSBSSSection;
- }
const char *getZeroFillDirective() const {
return ZeroFillDirective;
}
@@ -869,9 +778,6 @@ namespace llvm {
const char *getCStringSection() const {
return CStringSection;
}
- const Section *getCStringSection_() const {
- return CStringSection_;
- }
const char *getStaticCtorsSection() const {
return StaticCtorsSection;
}
diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h
index 6c216c932c..1dec92b9f9 100644
--- a/include/llvm/Target/TargetLowering.h
+++ b/include/llvm/Target/TargetLowering.h
@@ -54,6 +54,7 @@ namespace llvm {
class TargetMachine;
class TargetRegisterClass;
class TargetSubtarget;
+ class TargetLoweringObjectFile;
class Value;
// FIXME: should this be here?
@@ -77,6 +78,8 @@ namespace llvm {
/// target-specific constructs to SelectionDAG operators.
///
class TargetLowering {
+ TargetLowering(const TargetLowering&); // DO NOT IMPLEMENT
+ void operator=(const TargetLowering&); // DO NOT IMPLEMENT
public:
/// LegalizeAction - This enum indicates whether operations are valid for a
/// target, and if not, what action should be used to make them valid.
@@ -98,11 +101,13 @@ public:
SchedulingForRegPressure // Scheduling for lowest register pressure.
};
- explicit TargetLowering(TargetMachine &TM);
+ /// NOTE: The constructor takes ownership of TLOF.
+ explicit TargetLowering(TargetMachine &TM, TargetLoweringObjectFile *TLOF);
virtual ~TargetLowering();
TargetMachine &getTargetMachine() const { return TM; }
const TargetData *getTargetData() const { return TD; }
+ const TargetLoweringObjectFile &getObjFileLowering() const { return TLOF; }
bool isBigEndian() const { return !IsLittleEndian; }
bool isLittleEndian() const { return IsLittleEndian; }
@@ -1475,6 +1480,7 @@ public:
private:
TargetMachine &TM;
const TargetData *TD;
+ TargetLoweringObjectFile &TLOF;
/// PointerTy - The type to use for pointers, usually i32 or i64.
///
diff --git a/include/llvm/Target/TargetLoweringObjectFile.h b/include/llvm/Target/TargetLoweringObjectFile.h
new file mode 100644
index 0000000000..18ce1de01a
--- /dev/null
+++ b/include/llvm/Target/TargetLoweringObjectFile.h
@@ -0,0 +1,187 @@
+//===-- llvm/Target/TargetLoweringObjectFile.h - Object Info ----*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements classes used to handle lowerings specific to common
+// object file formats.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TARGET_TARGETLOWERINGOBJECTFILE_H
+#define LLVM_TARGET_TARGETLOWERINGOBJECTFILE_H
+
+// FIXME: Switch to MC.
+#include "llvm/Target/TargetAsmInfo.h"
+
+namespace llvm {
+
+class TargetLoweringObjectFile {
+private:
+ mutable StringMap<Section> Sections;
+protected:
+
+ TargetLoweringObjectFile();
+
+ /// TextSection - Section directive for standard text.
+ ///
+ const Section *TextSection; // Defaults to ".text".
+
+ /// DataSection - Section directive for standard data.
+ ///
+ const Section *DataSection; // Defaults to ".data".
+
+
+
+ // FIXME: SINK THESE.
+ const Section *BSSSection_;
+
+ /// ReadOnlySection - This is the directive that is emitted to switch to a
+ /// read-only section for constant data (e.g. data declared const,
+ /// jump tables).
+ const Section *ReadOnlySection; // Defaults to NULL
+
+ /// TLSDataSection - Section directive for Thread Local data.
+ ///
+ const Section *TLSDataSection; // Defaults to ".tdata".
+
+ /// TLSBSSSection - Section directive for Thread Local uninitialized data.
+ /// Null if this target doesn't support a BSS section.
+ ///
+ const Section *TLSBSSSection; // Defaults to ".tbss".
+
+ const Section *CStringSection_;
+
+public:
+ // FIXME: NONPUB.
+ const Section *getOrCreateSection(const char *Name,
+ bool isDirective,
+ SectionKind::Kind K) const;
+public:
+
+ virtual ~TargetLoweringObjectFile();
+
+ const Section *getTextSection() const { return TextSection; }
+ const Section *getDataSection() const { return DataSection; }
+
+
+ /// getSectionForMergeableConstant - Given a mergeable constant with the
+ /// specified size and relocation information, return a section that it
+ /// should be placed in.
+ virtual const Section *
+ getSectionForMergeableConstant(SectionKind Kind) const;
+
+ /// getKindForNamedSection - If this target wants to be able to override
+ /// section flags based on the name of the section specified for a global
+ /// variable, it can implement this. This is used on ELF systems so that
+ /// ".tbss" gets the TLS bit set etc.
+ virtual SectionKind::Kind getKindForNamedSection(const char *Section,
+ SectionKind::Kind K) const{
+ return K;
+ }
+
+ /// SectionForGlobal - This method computes the appropriate section to emit
+ /// the specified global variable or function definition. This should not
+ /// be passed external (or available externally) globals.
+ const Section *SectionForGlobal(const GlobalValue *GV,
+ const TargetMachine &TM) const;
+
+ /// getSpecialCasedSectionGlobals - Allow the target to completely override
+ /// section assignment of a global.
+ /// FIXME: ELIMINATE this by making PIC16 implement ADDRESS with
+ /// getFlagsForNamedSection.
+ virtual const Section *
+ getSpecialCasedSectionGlobals(const GlobalValue *GV,
+ SectionKind Kind) const {
+ return 0;
+ }
+
+ /// getSectionFlagsAsString - Turn the flags in the specified SectionKind
+ /// into a string that can be printed to the assembly file after the
+ /// ".section foo" part of a section directive.
+ virtual void getSectionFlagsAsString(SectionKind Kind,
+ SmallVectorImpl<char> &Str) const {
+ }
+
+protected:
+ virtual const Section *SelectSectionForGlobal(const GlobalValue *GV,
+ SectionKind Kind,
+ const TargetMachine &TM) const;
+};
+
+
+
+
+class TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
+ bool AtIsCommentChar; // True if @ is the comment character on this target.
+public:
+ /// ELF Constructor - AtIsCommentChar is true if the CommentCharacter from TAI
+ /// is "@".
+ TargetLoweringObjectFileELF(bool AtIsCommentChar = false,
+ // FIXME: REMOVE AFTER UNIQUING IS FIXED.
+ bool HasCrazyBSS = false);
+
+ /// getSectionForMergeableConstant - Given a mergeable constant with the
+ /// specified size and relocation information, return a section that it
+ /// should be placed in.
+ virtual const Section *
+ getSectionForMergeableConstant(SectionKind Kind) const;
+
+ virtual SectionKind::Kind getKindForNamedSection(const char *Section,
+ SectionKind::Kind K) const;
+ void getSectionFlagsAsString(SectionKind Kind,
+ SmallVectorImpl<char> &Str) const;
+
+ virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
+ SectionKind Kind,
+ const TargetMachine &TM) const;
+protected:
+ const Section *DataRelSection;
+ const Section *DataRelLocalSection;
+ const Section *DataRelROSection;
+ const Section *DataRelROLocalSection;
+
+ const Section *MergeableConst4Section;
+ const Section *MergeableConst8Section;
+ const Section *MergeableConst16Section;
+};
+
+class TargetLoweringObjectFileMachO : public TargetLoweringObjectFile {
+ const Section *TextCoalSection;
+ const Section *ConstTextCoalSection;
+ const Section *ConstDataCoalSection;
+ const Section *ConstDataSection;
+ const Section *DataCoalSection;
+ const Section *FourByteConstantSection;
+ const