[llvm-commits] [llvm] r95162 - in /llvm/trunk: include/llvm/MC/MCStreamer.h lib/CodeGen/LLVMTargetMachine.cpp tools/llc/llc.cpp

Chris Lattner sabre at nondot.org
Tue Feb 2 15:57:42 PST 2010


Author: lattner
Date: Tue Feb  2 17:57:42 2010
New Revision: 95162

URL: http://llvm.org/viewvc/llvm-project?rev=95162&view=rev
Log:
Hook up -filetype=obj through the MachO streamer.  Here's a demo:

$ cat t.ll 
@g = global i32 42
$ llc t.ll -o t.o -filetype=obj
$ nm t.o
00000000 D _g

There is still a ton of work left.  Instructions are not being encoded
yet apparently.


Modified:
    llvm/trunk/include/llvm/MC/MCStreamer.h
    llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
    llvm/trunk/tools/llc/llc.cpp

Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=95162&r1=95161&r2=95162&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
+++ llvm/trunk/include/llvm/MC/MCStreamer.h Tue Feb  2 17:57:42 2010
@@ -282,7 +282,7 @@
   /// createMachOStream - Create a machine code streamer which will generative
   /// Mach-O format object files.
   MCStreamer *createMachOStreamer(MCContext &Ctx, raw_ostream &OS,
-                                  MCCodeEmitter *CE = 0);
+                                  MCCodeEmitter *CE);
 
   /// createELFStreamer - Create a machine code streamer which will generative
   /// ELF format object files.

Modified: llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=95162&r1=95161&r2=95162&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp (original)
+++ llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp Tue Feb  2 17:57:42 2010
@@ -124,23 +124,30 @@
   OwningPtr<MCStreamer> AsmStreamer;
 
   switch (FileType) {
-  default:
-  case CGFT_ObjectFile:
-    return CGFT_ErrorOccurred;
-  case CGFT_AssemblyFile: {
+  default: return CGFT_ErrorOccurred;
+  case CGFT_AssemblyFile:
     AsmStreamer.reset(createAsmStreamer(*Context, Out, *getMCAsmInfo(),
                                         getTargetData()->isLittleEndian(),
                                         getVerboseAsm(), /*instprinter*/0,
                                         /*codeemitter*/0));
     break;
+  case CGFT_ObjectFile: {
+    // Create the code emitter for the target if it exists.  If not, .o file
+    // emission fails.
+    MCCodeEmitter *MCE = getTarget().createCodeEmitter(*this);
+    if (MCE == 0)
+      return CGFT_ErrorOccurred;
+    
+    AsmStreamer.reset(createMachOStreamer(*Context, Out, MCE));
+    break;
   }
   }
   
   // Create the AsmPrinter, which takes ownership of Context and AsmStreamer
   // if successful.
   FunctionPass *Printer =
-  getTarget().createAsmPrinter(Out, *this, *Context, *AsmStreamer,
-                               getMCAsmInfo());
+    getTarget().createAsmPrinter(Out, *this, *Context, *AsmStreamer,
+                                 getMCAsmInfo());
   if (Printer == 0)
     return CGFT_ErrorOccurred;
   

Modified: llvm/trunk/tools/llc/llc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=95162&r1=95161&r2=95162&view=diff

==============================================================================
--- llvm/trunk/tools/llc/llc.cpp (original)
+++ llvm/trunk/tools/llc/llc.cpp Tue Feb  2 17:57:42 2010
@@ -360,6 +360,7 @@
       sys::Path(OutputFilename).eraseFromDisk();
       return 1;
     case TargetMachine::CGFT_AssemblyFile:
+    case TargetMachine::CGFT_ObjectFile:
       break;
     }
 





More information about the llvm-commits mailing list