[llvm-commits] CVS: llvm/tools/lto/lto.cpp

Bill Wendling isanbard at gmail.com
Wed Feb 7 17:41:27 PST 2007



Changes in directory llvm/tools/lto:

lto.cpp updated: 1.34 -> 1.35
---
Log message:

The new version of how to add passes to emit files. We explicitly call a
function to add the file writers between calls to add the passes.


---
Diffs of the changes:  (+26 -2)

 lto.cpp |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)


Index: llvm/tools/lto/lto.cpp
diff -u llvm/tools/lto/lto.cpp:1.34 llvm/tools/lto/lto.cpp:1.35
--- llvm/tools/lto/lto.cpp:1.34	Mon Feb  5 14:47:21 2007
+++ llvm/tools/lto/lto.cpp	Wed Feb  7 19:41:07 2007
@@ -27,6 +27,7 @@
 #include "llvm/System/Signals.h"
 #include "llvm/Analysis/Passes.h"
 #include "llvm/Analysis/Verifier.h"
+#include "llvm/CodeGen/FileWriters.h"
 #include "llvm/Target/SubtargetFeature.h"
 #include "llvm/Target/TargetData.h"
 #include "llvm/Target/TargetMachine.h"
@@ -308,8 +309,31 @@
     new FunctionPassManager(new ExistingModuleProvider(M));
 
   CodeGenPasses->add(new TargetData(*Target->getTargetData()));
-  Target->addPassesToEmitFile(*CodeGenPasses, Out, TargetMachine::AssemblyFile, 
-                              true);
+
+  MachineCodeEmitter *MCE = 0;
+
+  switch (Target->addPassesToEmitFile(*CodeGenPasses, Out,
+                                     TargetMachine::AssemblyFile, true)) {
+  default:
+    assert(0 && "Invalid file model!");
+    return LTO_UNKNOWN;
+  case FileModel::Error:
+    // FIXME: Error...
+    return LTO_UNKNOWN;
+  case FileModel::AsmFile:
+    break;
+  case FileModel::MachOFile:
+    MCE = AddMachOWriter(*CodeGenPasses, Out, *Target);
+    break;
+  case FileModel::ElfFile:
+    MCE = AddELFWriter(*CodeGenPasses, Out, *Target);
+    break;
+  }
+
+  if (Target->addPassesToEmitFileFinish(*CodeGenPasses, MCE, true)) {
+    // FIXME: Error...
+    return LTO_UNKNOWN;
+  }
 
   // Run our queue of passes all at once now, efficiently.
   Passes.run(*M);






More information about the llvm-commits mailing list