summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86TargetMachine.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-08-12 07:22:17 +0000
committerChris Lattner <sabre@nondot.org>2009-08-12 07:22:17 +0000
commit9a6cf91261bb1420fedbd738d298b1e13f9ae71a (patch)
tree857e5f098cdcadb899e091ecf17bf807d9551070 /llvm/lib/Target/X86/X86TargetMachine.cpp
parent1235f2074416cd5dc6220a89d63122426960aa56 (diff)
downloadbcm5719-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.cpp35
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) {
OpenPOWER on IntegriCloud