stub out a new X86 encoder, which can be tried with
authorChris Lattner <sabre@nondot.org>
Wed, 3 Feb 2010 21:24:49 +0000 (21:24 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 3 Feb 2010 21:24:49 +0000 (21:24 +0000)
-enable-new-x86-encoder until its stable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95256 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/CMakeLists.txt
lib/Target/X86/X86.h
lib/Target/X86/X86CodeEmitter.cpp
lib/Target/X86/X86MCCodeEmitter.cpp [new file with mode: 0644]
lib/Target/X86/X86TargetMachine.cpp

index 4186fecf4e3a2b002c571053653ea6442da82832..8f4ff1701ed51267c242ae9b68e2540c11b2f7f8 100644 (file)
@@ -25,6 +25,7 @@ set(sources
   X86InstrInfo.cpp
   X86JITInfo.cpp
   X86MCAsmInfo.cpp
+  X86MCCodeEmitter.cpp 
   X86RegisterInfo.cpp
   X86Subtarget.cpp
   X86TargetMachine.cpp
index 001a1893319fd1c2f5b43102e3f405d22ee54b10..e39551b9943b4f30f295f97ca7436001817ae0c4 100644 (file)
@@ -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
index 567f180ced0fe06c9859929484013b721804853c..304613a2df55c6cfb37b541bd662092976e6e69e 100644 (file)
@@ -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/lib/Target/X86/X86MCCodeEmitter.cpp b/lib/Target/X86/X86MCCodeEmitter.cpp
new file mode 100644 (file)
index 0000000..0578c6d
--- /dev/null
@@ -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));
+}
index d6ad48ec3d1982c7ef3fe9b687f057587b38b6e6..2e7febcdbb3e2189200c2442125eb1744ed53c06 100644 (file)
@@ -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,