give MCCodeEmitters access to the current MCContext.
authorChris Lattner <sabre@nondot.org>
Fri, 12 Feb 2010 23:12:47 +0000 (23:12 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 12 Feb 2010 23:12:47 +0000 (23:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96038 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetRegistry.h
lib/CodeGen/LLVMTargetMachine.cpp
lib/Target/X86/X86.h
lib/Target/X86/X86CodeEmitter.cpp
lib/Target/X86/X86MCCodeEmitter.cpp
tools/llvm-mc/llvm-mc.cpp

index 173899794bb96a20f321eb85e81b8f83165ddfc5..37380ab047c48e01acbd820186ee0b85fec5d203 100644 (file)
@@ -72,7 +72,8 @@ namespace llvm {
                                                   const MCAsmInfo &MAI,
                                                   raw_ostream &O);
     typedef MCCodeEmitter *(*CodeEmitterCtorTy)(const Target &T,
-                                                TargetMachine &TM);
+                                                TargetMachine &TM,
+                                                MCContext &Ctx);
 
   private:
     /// Next - The next registered target in the linked list, maintained by the
@@ -236,10 +237,10 @@ namespace llvm {
     
     
     /// createCodeEmitter - Create a target specific code emitter.
-    MCCodeEmitter *createCodeEmitter(TargetMachine &TM) const {
+    MCCodeEmitter *createCodeEmitter(TargetMachine &TM, MCContext &Ctx) const {
       if (!CodeEmitterCtorFn)
         return 0;
-      return CodeEmitterCtorFn(*this, TM);
+      return CodeEmitterCtorFn(*this, TM, Ctx);
     }
 
     /// @}
@@ -613,8 +614,9 @@ namespace llvm {
     }
 
   private:
-    static MCCodeEmitter *Allocator(const Target &T, TargetMachine &TM) {
-      return new CodeEmitterImpl(T, TM);
+    static MCCodeEmitter *Allocator(const Target &T, TargetMachine &TM,
+                                    MCContext &Ctx) {
+      return new CodeEmitterImpl(T, TM, Ctx);
     }
   };
 
index 17e579da56605206dc173a04a754d6a77cd987ae..0223febe967a21fd9136fdb48fcea3e032d7dd1a 100644 (file)
@@ -141,7 +141,7 @@ bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
   case CGFT_ObjectFile: {
     // Create the code emitter for the target if it exists.  If not, .o file
     // emission fails.
-    MCCodeEmitter *MCE = getTarget().createCodeEmitter(*this);
+    MCCodeEmitter *MCE = getTarget().createCodeEmitter(*this, *Context);
     if (MCE == 0)
       return true;
     
index 1d17a05d5b35320c54d74d98a3099025c3a7fe44..411d45047cfb2e88a532d5999bca6f7b186eec3a 100644 (file)
@@ -23,6 +23,7 @@ class X86TargetMachine;
 class FunctionPass;
 class MachineCodeEmitter;
 class MCCodeEmitter;
+class MCContext;
 class JITCodeEmitter;
 class Target;
 class formatted_raw_ostream;
@@ -49,9 +50,12 @@ FunctionPass *createX87FPRegKillInserterPass();
 FunctionPass *createX86JITCodeEmitterPass(X86TargetMachine &TM,
                                           JITCodeEmitter &JCE);
 
-MCCodeEmitter *createHeinousX86MCCodeEmitter(const Target &, TargetMachine &TM);
-MCCodeEmitter *createX86_32MCCodeEmitter(const Target &, TargetMachine &TM);
-MCCodeEmitter *createX86_64MCCodeEmitter(const Target &, TargetMachine &TM);
+MCCodeEmitter *createHeinousX86MCCodeEmitter(const Target &, TargetMachine &TM,
+                                             MCContext &Ctx);
+MCCodeEmitter *createX86_32MCCodeEmitter(const Target &, TargetMachine &TM,
+                                         MCContext &Ctx);
+MCCodeEmitter *createX86_64MCCodeEmitter(const Target &, TargetMachine &TM,
+                                         MCContext &Ctx);
 
 /// createX86EmitCodeToMemory - Returns a pass that converts a register
 /// allocated function into raw machine code in a dynamically
index 02fa8ac7168b77e573f6cd6aee876fee1d2af141..6a42240736e012556e99e5386e8c3892e6422c5b 100644 (file)
@@ -1211,13 +1211,14 @@ static cl::opt<bool> EnableNewEncoder("enable-new-x86-encoder",
 
 // Ok, now you can look.
 MCCodeEmitter *llvm::createHeinousX86MCCodeEmitter(const Target &T,
-                                                   TargetMachine &TM) {
+                                                   TargetMachine &TM,
+                                                   MCContext &Ctx) {
   
   // FIXME: Remove the heinous one when the new one works.
   if (EnableNewEncoder) {
     if (TM.getTargetData()->getPointerSize() == 4)
-      return createX86_32MCCodeEmitter(T, TM);
-    return createX86_64MCCodeEmitter(T, TM);
+      return createX86_32MCCodeEmitter(T, TM, Ctx);
+    return createX86_64MCCodeEmitter(T, TM, Ctx);
   }
 
   return new X86MCCodeEmitter(static_cast<X86TargetMachine&>(TM));
index 8df8693115d2115b336d39580b625876fa884130..0e3d01470db59de62a7d44c1f60f49110a294f17 100644 (file)
@@ -120,12 +120,14 @@ public:
 
 
 MCCodeEmitter *llvm::createX86_32MCCodeEmitter(const Target &,
-                                               TargetMachine &TM) {
+                                               TargetMachine &TM,
+                                               MCContext &Ctx) {
   return new X86MCCodeEmitter(TM, false);
 }
 
 MCCodeEmitter *llvm::createX86_64MCCodeEmitter(const Target &,
-                                               TargetMachine &TM) {
+                                               TargetMachine &TM,
+                                               MCContext &Ctx) {
   return new X86MCCodeEmitter(TM, true);
 }
 
index c05bd522c521f640aa81c01f0eb549cc8b10a7d5..76ce080caea53657452092748fa50b7963f7bddc 100644 (file)
@@ -266,14 +266,14 @@ static int AssembleInput(const char *ProgName) {
   if (FileType == OFT_AssemblyFile) {
     IP.reset(TheTarget->createMCInstPrinter(OutputAsmVariant, *MAI, *Out));
     if (ShowEncoding)
-      CE.reset(TheTarget->createCodeEmitter(*TM));
+      CE.reset(TheTarget->createCodeEmitter(*TM, Ctx));
     Str.reset(createAsmStreamer(Ctx, *Out, *MAI,
                                 TM->getTargetData()->isLittleEndian(),
                                 /*asmverbose*/true, IP.get(), CE.get(),
                                 ShowInst));
   } else {
     assert(FileType == OFT_ObjectFile && "Invalid file type!");
-    CE.reset(TheTarget->createCodeEmitter(*TM));
+    CE.reset(TheTarget->createCodeEmitter(*TM, Ctx));
     Str.reset(createMachOStreamer(Ctx, *Out, CE.get()));
   }