diff --git a/lib/Target/X86/X86.h b/lib/Target/X86/X86.h
index c89bb09..69f887a 100644
--- a/lib/Target/X86/X86.h
+++ b/lib/Target/X86/X86.h
@@ -20,8 +20,10 @@
 namespace llvm {
 
 class TargetMachine;
+class PassManager;
 class FunctionPass;
 class IntrinsicLowering;
+class MachineCodeEmitter;
 
 enum X86VectorEnum {
   NoSSE, SSE, SSE2, SSE3
@@ -59,16 +61,19 @@
 
 /// createX86CodePrinterPass - Returns a pass that prints the X86
 /// assembly code for a MachineFunction to the given output stream,
-/// using the given target machine description.  This should work
-/// regardless of whether the function is in SSA form.
+/// using the given target machine description.
 ///
-FunctionPass *createX86CodePrinterPass(std::ostream &o,TargetMachine &tm);
+FunctionPass *createX86CodePrinterPass(std::ostream &o, TargetMachine &tm);
 
-/// createX86ELFObjectWriterPass - Returns a pass that outputs the generated
+/// createX86CodeEmitterPass - Return a pass that emits the collected X86 code
+/// to the specified MCE object.
+FunctionPass *createX86CodeEmitterPass(MachineCodeEmitter &MCE);
+
+/// addX86ELFObjectWriterPass - Add passes to the FPM that output the generated
 /// code as an ELF object file.
 ///
-FunctionPass *createX86ELFObjectWriterPass(std::ostream &o, TargetMachine &tm);
-
+void addX86ELFObjectWriterPass(PassManager &FPM,
+                               std::ostream &o, TargetMachine &tm);
 
 /// createX86EmitCodeToMemory - Returns a pass that converts a register
 /// allocated function into raw machine code in a dynamically
diff --git a/lib/Target/X86/X86CodeEmitter.cpp b/lib/Target/X86/X86CodeEmitter.cpp
index 789b8e2..cafb175 100644
--- a/lib/Target/X86/X86CodeEmitter.cpp
+++ b/lib/Target/X86/X86CodeEmitter.cpp
@@ -68,18 +68,10 @@
   };
 }
 
-/// addPassesToEmitMachineCode - Add passes to the specified pass manager to get
-/// machine code emitted.  This uses a MachineCodeEmitter object to handle
-/// actually outputting the machine code and resolving things like the address
-/// of functions.  This method should returns true if machine code emission is
-/// not supported.
-///
-bool X86TargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM,
-                                                  MachineCodeEmitter &MCE) {
-  PM.add(new Emitter(MCE));
-  // Delete machine code for this function
-  PM.add(createMachineCodeDeleter());
-  return false;
+/// createX86CodeEmitterPass - Return a pass that emits the collected X86 code
+/// to the specified MCE object.
+FunctionPass *llvm::createX86CodeEmitterPass(MachineCodeEmitter &MCE) {
+  return new Emitter(MCE);
 }
 
 bool Emitter::runOnMachineFunction(MachineFunction &MF) {
diff --git a/lib/Target/X86/X86ELFWriter.cpp b/lib/Target/X86/X86ELFWriter.cpp
index 1617fac..8a6f1fc 100644
--- a/lib/Target/X86/X86ELFWriter.cpp
+++ b/lib/Target/X86/X86ELFWriter.cpp
@@ -13,7 +13,9 @@
 //===----------------------------------------------------------------------===//
 
 #include "X86.h"
+#include "llvm/PassManager.h"
 #include "llvm/CodeGen/ELFWriter.h"
+#include "llvm/Target/TargetMachine.h"
 using namespace llvm;
 
 namespace {
@@ -25,10 +27,12 @@
   };
 }
 
-/// createX86ELFObjectWriterPass - Returns a pass that outputs the generated
-/// code as an ELF object file.
+/// addX86ELFObjectWriterPass - Returns a pass that outputs the generated code
+/// as an ELF object file.
 ///
-FunctionPass *llvm::createX86ELFObjectWriterPass(std::ostream &O,
-                                                 TargetMachine &TM) {
-  return new X86ELFWriter(O, TM);
+void llvm::addX86ELFObjectWriterPass(PassManager &FPM,
+                                     std::ostream &O, TargetMachine &TM) {
+  X86ELFWriter *EW = new X86ELFWriter(O, TM);
+  FPM.add(EW);
+  FPM.add(createX86CodeEmitterPass(EW->getMachineCodeEmitter()));
 }
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index def4f9c..a0537f5 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -162,7 +162,7 @@
       // FIXME: We only support emission of ELF files for now, this should check
       // the target triple and decide on the format to write (e.g. COFF on
       // win32).
-      PM.add(createX86ELFObjectWriterPass(Out, *this));
+      addX86ELFObjectWriterPass(PM, Out, *this);
       break;
     }
 
@@ -225,3 +225,10 @@
     PM.add(createX86CodePrinterPass(std::cerr, TM));
 }
 
+bool X86TargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM,
+                                                  MachineCodeEmitter &MCE) {
+  PM.add(createX86CodeEmitterPass(MCE));
+  // Delete machine code for this function
+  PM.add(createMachineCodeDeleter());
+  return false;
+}
