Added -print-emitted-asm to print out JIT generated asm to cerr.
authorEvan Cheng <evan.cheng@apple.com>
Fri, 20 Jul 2007 21:56:13 +0000 (21:56 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 20 Jul 2007 21:56:13 +0000 (21:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40123 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetMachine.h
lib/CodeGen/LLVMTargetMachine.cpp
lib/Target/ARM/ARMTargetMachine.cpp
lib/Target/ARM/ARMTargetMachine.h
lib/Target/Alpha/AlphaTargetMachine.cpp
lib/Target/Alpha/AlphaTargetMachine.h
lib/Target/PowerPC/PPCTargetMachine.cpp
lib/Target/PowerPC/PPCTargetMachine.h
lib/Target/X86/X86TargetMachine.cpp
lib/Target/X86/X86TargetMachine.h

index e7f211bf15136208a285106dda0f9ec678ffb8d9..d193ed4c54cba74e0dc15ca73d56640f6da5e95f 100644 (file)
@@ -306,17 +306,18 @@ public:
   
   /// addCodeEmitter - This pass should be overridden by the target to add a
   /// code emitter, if supported.  If this is not supported, 'true' should be
-  /// returned.
-  virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast, 
+  /// returned. If DumpAsm is true, the generated assembly is printed to cerr.
+  virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast, bool DumpAsm,
                               MachineCodeEmitter &MCE) {
     return true;
   }
 
   /// addSimpleCodeEmitter - This pass should be overridden by the target to add
   /// a code emitter (without setting flags), if supported.  If this is not
-  /// supported, 'true' should be returned.
+  /// supported, 'true' should be returned.  If DumpAsm is true, the generated
+  /// assembly is printed to cerr.
   virtual bool addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast, 
-                                    MachineCodeEmitter &MCE) {
+                                    bool DumpAsm, MachineCodeEmitter &MCE) {
     return true;
   }
 
index b72704bd8051d33811e5d9f86c039aa90a05ef5a..218e79ac7253867f4412f88ef10f07ae5256f34a 100644 (file)
@@ -26,6 +26,8 @@ static cl::opt<bool> PrintLSR("print-lsr-output", cl::Hidden,
     cl::desc("Print LLVM IR produced by the loop-reduce pass"));
 static cl::opt<bool> PrintISelInput("print-isel-input", cl::Hidden,
     cl::desc("Print LLVM IR input to isel pass"));
+static cl::opt<bool> PrintEmittedAsm("print-emitted-asm", cl::Hidden,
+    cl::desc("Dump emitter generated instructions as assembly"));
 
 FileModel::Model
 LLVMTargetMachine::addPassesToEmitFile(FunctionPassManager &PM,
@@ -119,7 +121,7 @@ bool LLVMTargetMachine::addPassesToEmitFileFinish(FunctionPassManager &PM,
                                                   MachineCodeEmitter *MCE,
                                                   bool Fast) {
   if (MCE)
-    addSimpleCodeEmitter(PM, Fast, *MCE);
+    addSimpleCodeEmitter(PM, Fast, PrintEmittedAsm, *MCE);
 
   // Delete machine code for this function
   PM.add(createMachineCodeDeleter());
@@ -196,7 +198,7 @@ bool LLVMTargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM,
   if (addPreEmitPass(PM, Fast) && PrintMachineCode)
     PM.add(createMachineFunctionPrinterPass(cerr));
 
-  addCodeEmitter(PM, Fast, MCE);
+  addCodeEmitter(PM, Fast, PrintEmittedAsm, MCE);
   
   // Delete machine code for this function
   PM.add(createMachineCodeDeleter());
index 58b3ab98adf3d5c6287ea438611ead3ebc2e6f6a..b29f84d6dd354e6493af7c0a61df175a8d1cf273 100644 (file)
@@ -143,18 +143,22 @@ bool ARMTargetMachine::addAssemblyEmitter(FunctionPassManager &PM, bool Fast,
 
 
 bool ARMTargetMachine::addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                      MachineCodeEmitter &MCE) {
+                                      bool DumpAsm, MachineCodeEmitter &MCE) {
   // FIXME: Move this to TargetJITInfo!
   setRelocationModel(Reloc::Static);
 
   // Machine code emitter pass for ARM.
   PM.add(createARMCodeEmitterPass(*this, MCE));
+  if (DumpAsm)
+    PM.add(createARMCodePrinterPass(*cerr.stream(), *this));
   return false;
 }
 
 bool ARMTargetMachine::addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                            MachineCodeEmitter &MCE) {
+                                        bool DumpAsm, MachineCodeEmitter &MCE) {
   // Machine code emitter pass for ARM.
   PM.add(createARMCodeEmitterPass(*this, MCE));
+  if (DumpAsm)
+    PM.add(createARMCodePrinterPass(*cerr.stream(), *this));
   return false;
 }
index 183a58276715aca4aa807a0770e96a790b2fb137..5d65285f7772350b26bd780ab447c1e652a61b95 100644 (file)
@@ -61,9 +61,9 @@ public:
   virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast, 
                                   std::ostream &Out);
   virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                              MachineCodeEmitter &MCE);
+                              bool DumpAsm, MachineCodeEmitter &MCE);
   virtual bool addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                    MachineCodeEmitter &MCE);
+                                    bool DumpAsm, MachineCodeEmitter &MCE);
 };
 
 /// ThumbTargetMachine - Thumb target machine.
index d4137a5a71b3d50afbc2c41f5c43b3229764bbf4..f051da45d82d943d2dae43c4c8b01bf8bc84708b 100644 (file)
@@ -86,12 +86,14 @@ bool AlphaTargetMachine::addAssemblyEmitter(FunctionPassManager &PM, bool Fast,
   return false;
 }
 bool AlphaTargetMachine::addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                        MachineCodeEmitter &MCE) {
+                                        bool DumpAsm, MachineCodeEmitter &MCE) {
   PM.add(createAlphaCodeEmitterPass(*this, MCE));
+  if (DumpAsm)
+    PM.add(createAlphaCodePrinterPass(*cerr.stream(), *this));
   return false;
 }
 bool AlphaTargetMachine::addSimpleCodeEmitter(FunctionPassManager &PM,
-                                              bool Fast,
+                                              bool Fast, bool DumpAsm,
                                               MachineCodeEmitter &MCE) {
-  return addCodeEmitter(PM, Fast, MCE);
+  return addCodeEmitter(PM, Fast, DumpAsm, MCE);
 }
index 5a57f63a69fdd82d241481e6279c0f36d62821a7..8eb6f54cafd15b1ca6d76676e5f158b921cb79a8 100644 (file)
@@ -63,9 +63,9 @@ public:
   virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast, 
                                   std::ostream &Out);
   virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                              MachineCodeEmitter &MCE);
+                              bool DumpAsm, MachineCodeEmitter &MCE);
   virtual bool addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                    MachineCodeEmitter &MCE);
+                                    bool DumpAsm, MachineCodeEmitter &MCE);
 };
 
 } // end namespace llvm
index 57c84370f3c6002cb1916923994679382d12fa5e..86da3d7825914ee5a3b4e796d5436c625bd28c9e 100644 (file)
@@ -137,7 +137,7 @@ bool PPCTargetMachine::addAssemblyEmitter(FunctionPassManager &PM, bool Fast,
 }
 
 bool PPCTargetMachine::addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                      MachineCodeEmitter &MCE) {
+                                      bool DumpAsm, MachineCodeEmitter &MCE) {
   // The JIT should use the static relocation model in ppc32 mode, PIC in ppc64.
   // FIXME: This should be moved to TargetJITInfo!!
   if (Subtarget.isPPC64()) {
@@ -155,12 +155,16 @@ bool PPCTargetMachine::addCodeEmitter(FunctionPassManager &PM, bool Fast,
   
   // Machine code emitter pass for PowerPC.
   PM.add(createPPCCodeEmitterPass(*this, MCE));
+  if (DumpAsm) 
+    PM.add(createPPCAsmPrinterPass(*cerr.stream(), *this));
   return false;
 }
 
 bool PPCTargetMachine::addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                            MachineCodeEmitter &MCE) {
+                                            bool DumpAsm, MachineCodeEmitter &MCE) {
   // Machine code emitter pass for PowerPC.
   PM.add(createPPCCodeEmitterPass(*this, MCE));
+  if (DumpAsm) 
+    PM.add(createPPCAsmPrinterPass(*cerr.stream(), *this));
   return false;
 }
index 10c5b7b091193626333b49e3dce3dd58acdde1c8..a00f858374945d61d4374c348768719f004d6992 100644 (file)
@@ -70,9 +70,9 @@ public:
   virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast, 
                                   std::ostream &Out);
   virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                              MachineCodeEmitter &MCE);
+                              bool DumpAsm, MachineCodeEmitter &MCE);
   virtual bool addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                    MachineCodeEmitter &MCE);
+                                    bool DumpAsm, MachineCodeEmitter &MCE);
   virtual const bool getEnableTailMergeDefault() const;
 };
 
index 4d4bd3feb43843fdb986da2500c918fe23f0d23e..02fbf9596ae2a6729cc437036842816e474b47aa 100644 (file)
@@ -170,7 +170,7 @@ bool X86TargetMachine::addAssemblyEmitter(FunctionPassManager &PM, bool Fast,
 }
 
 bool X86TargetMachine::addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                      MachineCodeEmitter &MCE) {
+                                      bool DumpAsm, MachineCodeEmitter &MCE) {
   // FIXME: Move this to TargetJITInfo!
   setRelocationModel(Reloc::Static);
   Subtarget.setPICStyle(PICStyle::None);
@@ -180,11 +180,16 @@ bool X86TargetMachine::addCodeEmitter(FunctionPassManager &PM, bool Fast,
     setCodeModel(CodeModel::Large);
 
   PM.add(createX86CodeEmitterPass(*this, MCE));
+  if (DumpAsm)
+    PM.add(createX86CodePrinterPass(*cerr.stream(), *this));
+
   return false;
 }
 
 bool X86TargetMachine::addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                            MachineCodeEmitter &MCE) {
+                                        bool DumpAsm, MachineCodeEmitter &MCE) {
   PM.add(createX86CodeEmitterPass(*this, MCE));
+  if (DumpAsm)
+    PM.add(createX86CodePrinterPass(*cerr.stream(), *this));
   return false;
 }
index 0a4f1b54c44361a098a98fa0414c2559361fabe6..56f822520469a42842075c4e3d870096ce361fa5 100644 (file)
@@ -65,9 +65,9 @@ public:
   virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast, 
                                   std::ostream &Out);
   virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast,
-                              MachineCodeEmitter &MCE);
+                              bool DumpAsm, MachineCodeEmitter &MCE);
   virtual bool addSimpleCodeEmitter(FunctionPassManager &PM, bool Fast,
-                                    MachineCodeEmitter &MCE);
+                                    bool DumpAsm, MachineCodeEmitter &MCE);
 };
 
 /// X86_32TargetMachine - X86 32-bit target machine.