diff options
Diffstat (limited to 'llvm/lib/Target/X86')
-rw-r--r-- | llvm/lib/Target/X86/X86TargetAsmInfo.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86TargetAsmInfo.h | 10 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86TargetMachine.cpp | 35 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86TargetMachine.h | 3 |
4 files changed, 34 insertions, 30 deletions
diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp index 859ced7728f..d978eb179de 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp @@ -13,6 +13,7 @@ #include "X86TargetAsmInfo.h" #include "X86TargetMachine.h" +#include "llvm/ADT/Triple.h" #include "llvm/Support/CommandLine.h" using namespace llvm; @@ -42,12 +43,11 @@ static const char *const x86_asm_table[] = { "{cc}", "cc", 0,0}; -X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM) { +X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const Triple &Triple) { AsmTransCBE = x86_asm_table; AssemblerDialect = AsmWriterFlavor; - const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>(); - bool is64Bit = Subtarget->is64Bit(); + bool is64Bit = Triple.getArch() == Triple::x86_64; TextAlignFillValue = 0x90; @@ -55,7 +55,7 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM) { Data64bitsDirective = 0; // we can't emit a 64-bit unit // Leopard and above support aligned common symbols. - COMMDirectiveTakesAlignment = (Subtarget->getDarwinVers() >= 9); + COMMDirectiveTakesAlignment = Triple.getDarwinMajorNumber() >= 9; if (is64Bit) { PersonalityPrefix = ""; @@ -76,7 +76,7 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM) { AbsoluteEHSectionOffsets = false; } -X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM) { +X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const Triple &Triple) { AsmTransCBE = x86_asm_table; AssemblerDialect = AsmWriterFlavor; @@ -97,17 +97,17 @@ X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM) { AbsoluteEHSectionOffsets = false; // On Linux we must declare when we can use a non-executable stack. - if (TM.getSubtarget<X86Subtarget>().isLinux()) + if (Triple.getOS() == Triple::Linux) NonexecutableStackDirective = "\t.section\t.note.GNU-stack,\"\",@progbits"; } -X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine &TM) { +X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const Triple &Triple) { AsmTransCBE = x86_asm_table; AssemblerDialect = AsmWriterFlavor; } -X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM) { +X86WinTargetAsmInfo::X86WinTargetAsmInfo(const Triple &Triple) { AsmTransCBE = x86_asm_table; AssemblerDialect = AsmWriterFlavor; diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.h b/llvm/lib/Target/X86/X86TargetAsmInfo.h index 8879b4ba10e..91de3682591 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.h +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.h @@ -14,27 +14,27 @@ #ifndef X86TARGETASMINFO_H #define X86TARGETASMINFO_H -#include "X86TargetMachine.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/COFFTargetAsmInfo.h" #include "llvm/Target/DarwinTargetAsmInfo.h" namespace llvm { + class Triple; struct X86DarwinTargetAsmInfo : public DarwinTargetAsmInfo { - explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM); + explicit X86DarwinTargetAsmInfo(const Triple &Triple); }; struct X86ELFTargetAsmInfo : public TargetAsmInfo { - explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM); + explicit X86ELFTargetAsmInfo(const Triple &Triple); }; struct X86COFFTargetAsmInfo : public COFFTargetAsmInfo { - explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM); + explicit X86COFFTargetAsmInfo(const Triple &Triple); }; struct X86WinTargetAsmInfo : public TargetAsmInfo { - explicit X86WinTargetAsmInfo(const X86TargetMachine &TM); + explicit X86WinTargetAsmInfo(const Triple &Triple); }; } // namespace llvm diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp index 76d0165c86e..8c4e5d02bec 100644 --- a/llvm/lib/Target/X86/X86TargetMachine.cpp +++ b/llvm/lib/Target/X86/X86TargetMachine.cpp @@ -22,27 +22,34 @@ #include "llvm/Target/TargetRegistry.h" using namespace llvm; +static const TargetAsmInfo *createTargetAsmInfo(const Target &T, + const StringRef &TT) { + Triple TheTriple(TT); + switch (TheTriple.getOS()) { + case Triple::Darwin: + return new X86DarwinTargetAsmInfo(TheTriple); + case Triple::MinGW32: + case Triple::MinGW64: + case Triple::Cygwin: + return new X86COFFTargetAsmInfo(TheTriple); + case Triple::Win32: + return new X86WinTargetAsmInfo(TheTriple); + default: + return new X86ELFTargetAsmInfo(TheTriple); + } +} + extern "C" void LLVMInitializeX86Target() { // Register the target. RegisterTargetMachine<X86_32TargetMachine> X(TheX86_32Target); RegisterTargetMachine<X86_64TargetMachine> Y(TheX86_64Target); -} -const TargetAsmInfo *X86TargetMachine::createTargetAsmInfo() const { - switch (Subtarget.TargetType) { - default: llvm_unreachable("unknown subtarget type"); - case X86Subtarget::isDarwin: - return new X86DarwinTargetAsmInfo(*this); - case X86Subtarget::isELF: - return new X86ELFTargetAsmInfo(*this); - case X86Subtarget::isMingw: - case X86Subtarget::isCygwin: - return new X86COFFTargetAsmInfo(*this); - case X86Subtarget::isWindows: - return new X86WinTargetAsmInfo(*this); - } + // Register the target asm info. + RegisterAsmInfoFn A(TheX86_32Target, createTargetAsmInfo); + RegisterAsmInfoFn B(TheX86_64Target, createTargetAsmInfo); } + X86_32TargetMachine::X86_32TargetMachine(const Target &T, const std::string &TT, const std::string &FS) : X86TargetMachine(T, TT, FS, false) { diff --git a/llvm/lib/Target/X86/X86TargetMachine.h b/llvm/lib/Target/X86/X86TargetMachine.h index d6187c773c5..b538408e8a4 100644 --- a/llvm/lib/Target/X86/X86TargetMachine.h +++ b/llvm/lib/Target/X86/X86TargetMachine.h @@ -38,9 +38,6 @@ class X86TargetMachine : public LLVMTargetMachine { X86ELFWriterInfo ELFWriterInfo; Reloc::Model DefRelocModel; // Reloc model before it's overridden. -protected: - virtual const TargetAsmInfo *createTargetAsmInfo() const; - public: X86TargetMachine(const Target &T, const std::string &TT, const std::string &FS, bool is64Bit); |