diff options
author | Chris Lattner <sabre@nondot.org> | 2009-08-12 07:22:17 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-08-12 07:22:17 +0000 |
commit | 9a6cf91261bb1420fedbd738d298b1e13f9ae71a (patch) | |
tree | 857e5f098cdcadb899e091ecf17bf807d9551070 /llvm/lib/Target/X86/X86TargetMachine.cpp | |
parent | 1235f2074416cd5dc6220a89d63122426960aa56 (diff) | |
download | bcm5719-llvm-9a6cf91261bb1420fedbd738d298b1e13f9ae71a.tar.gz bcm5719-llvm-9a6cf91261bb1420fedbd738d298b1e13f9ae71a.zip |
Change TargetAsmInfo to be constructed via TargetRegistry from a Target+Triple
pair instead of from a virtual method on TargetMachine. This cuts the final
ties of TargetAsmInfo to TargetMachine, meaning that MC can now use
TargetAsmInfo.
llvm-svn: 78802
Diffstat (limited to 'llvm/lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86TargetMachine.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
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) { |