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 | a7ac47cee1a0b3f4c798ecaa22ecf9d1be9c07e6 (patch) | |
tree | ac43fb9b39f3a7abe8aa7cb217860e4d29329963 /lib/Target/X86/X86TargetMachine.cpp | |
parent | 54d26fa799e2a43793b94afdf077fab2412e46ea (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78802 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r-- | lib/Target/X86/X86TargetMachine.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp index 76d0165c86..8c4e5d02be 100644 --- a/lib/Target/X86/X86TargetMachine.cpp +++ b/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) { |