summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-02-03 21:24:49 +0000
committerChris Lattner <sabre@nondot.org>2010-02-03 21:24:49 +0000
commitf914be06d28098f526267d82adc627e1a1d53771 (patch)
tree101c3b91b7c7b4f378efeea86b1dce0054da0c12 /llvm/lib
parent2b37272c110289d63492fddc63bb9816dc50dc9b (diff)
downloadbcm5719-llvm-f914be06d28098f526267d82adc627e1a1d53771.tar.gz
bcm5719-llvm-f914be06d28098f526267d82adc627e1a1d53771.zip
stub out a new X86 encoder, which can be tried with
-enable-new-x86-encoder until its stable. llvm-svn: 95256
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/CMakeLists.txt1
-rw-r--r--llvm/lib/Target/X86/X86.h1
-rw-r--r--llvm/lib/Target/X86/X86CodeEmitter.cpp13
-rw-r--r--llvm/lib/Target/X86/X86MCCodeEmitter.cpp41
-rw-r--r--llvm/lib/Target/X86/X86TargetMachine.cpp1
5 files changed, 56 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/CMakeLists.txt b/llvm/lib/Target/X86/CMakeLists.txt
index 4186fecf4e3..8f4ff1701ed 100644
--- a/llvm/lib/Target/X86/CMakeLists.txt
+++ b/llvm/lib/Target/X86/CMakeLists.txt
@@ -25,6 +25,7 @@ set(sources
X86InstrInfo.cpp
X86JITInfo.cpp
X86MCAsmInfo.cpp
+ X86MCCodeEmitter.cpp
X86RegisterInfo.cpp
X86Subtarget.cpp
X86TargetMachine.cpp
diff --git a/llvm/lib/Target/X86/X86.h b/llvm/lib/Target/X86/X86.h
index 001a1893319..e39551b9943 100644
--- a/llvm/lib/Target/X86/X86.h
+++ b/llvm/lib/Target/X86/X86.h
@@ -50,6 +50,7 @@ FunctionPass *createX86JITCodeEmitterPass(X86TargetMachine &TM,
JITCodeEmitter &JCE);
MCCodeEmitter *createHeinousX86MCCodeEmitter(const Target &, TargetMachine &TM);
+MCCodeEmitter *createX86MCCodeEmitter(const Target &, TargetMachine &TM);
/// createX86EmitCodeToMemory - Returns a pass that converts a register
/// allocated function into raw machine code in a dynamically
diff --git a/llvm/lib/Target/X86/X86CodeEmitter.cpp b/llvm/lib/Target/X86/X86CodeEmitter.cpp
index 567f180ced0..304613a2df5 100644
--- a/llvm/lib/Target/X86/X86CodeEmitter.cpp
+++ b/llvm/lib/Target/X86/X86CodeEmitter.cpp
@@ -1099,8 +1099,19 @@ public:
};
}
+#include "llvm/Support/CommandLine.h"
+
+static cl::opt<bool> EnableNewEncoder("enable-new-x86-encoder",
+ cl::ReallyHidden);
+
+
// Ok, now you can look.
-MCCodeEmitter *llvm::createHeinousX86MCCodeEmitter(const Target &,
+MCCodeEmitter *llvm::createHeinousX86MCCodeEmitter(const Target &T,
TargetMachine &TM) {
+
+ // FIXME: Remove the heinous one when the new one works.
+ if (EnableNewEncoder)
+ return createX86MCCodeEmitter(T, TM);
+
return new X86MCCodeEmitter(static_cast<X86TargetMachine&>(TM));
}
diff --git a/llvm/lib/Target/X86/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/X86MCCodeEmitter.cpp
new file mode 100644
index 00000000000..0578c6d8c88
--- /dev/null
+++ b/llvm/lib/Target/X86/X86MCCodeEmitter.cpp
@@ -0,0 +1,41 @@
+//===-- X86/X86MCCodeEmitter.cpp - Convert X86 code to machine code -------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the X86MCCodeEmitter class.
+//
+//===----------------------------------------------------------------------===//
+
+#define DEBUG_TYPE "x86-emitter"
+#include "X86.h"
+#include "X86TargetMachine.h"
+#include "llvm/MC/MCCodeEmitter.h"
+using namespace llvm;
+
+namespace {
+class X86MCCodeEmitter : public MCCodeEmitter {
+ X86MCCodeEmitter(const X86MCCodeEmitter &); // DO NOT IMPLEMENT
+ void operator=(const X86MCCodeEmitter &); // DO NOT IMPLEMENT
+ X86TargetMachine &TM;
+public:
+ X86MCCodeEmitter(X86TargetMachine &tm) : TM(tm) {
+ }
+
+ ~X86MCCodeEmitter() {}
+
+ void EncodeInstruction(const MCInst &MI, raw_ostream &OS) const {
+ }
+};
+
+} // end anonymous namespace
+
+
+MCCodeEmitter *llvm::createX86MCCodeEmitter(const Target &,
+ TargetMachine &TM) {
+ return new X86MCCodeEmitter(static_cast<X86TargetMachine&>(TM));
+}
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
index d6ad48ec3d1..2e7febcdbb3 100644
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -48,6 +48,7 @@ extern "C" void LLVMInitializeX86Target() {
RegisterAsmInfoFn B(TheX86_64Target, createMCAsmInfo);
// Register the code emitter.
+ // FIXME: Remove the heinous one when the new one works.
TargetRegistry::RegisterCodeEmitter(TheX86_32Target,
createHeinousX86MCCodeEmitter);
TargetRegistry::RegisterCodeEmitter(TheX86_64Target,
OpenPOWER on IntegriCloud