summaryrefslogtreecommitdiff
path: root/tools/lto
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2007-02-08 01:41:07 +0000
committerBill Wendling <isanbard@gmail.com>2007-02-08 01:41:07 +0000
commit546d0fbd9718ea5ad422faaeffea939fe7312408 (patch)
tree180ff06f13f6c2b7bd71cce182457a6b0212b62f /tools/lto
parenteb1ac3385096dd6f45a1548f3492f21648f55b4c (diff)
downloadllvm-546d0fbd9718ea5ad422faaeffea939fe7312408.tar.gz
llvm-546d0fbd9718ea5ad422faaeffea939fe7312408.tar.bz2
llvm-546d0fbd9718ea5ad422faaeffea939fe7312408.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34035 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/lto')
-rw-r--r--tools/lto/lto.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp
index d7dec3f7fa..816b1d8ebb 100644
--- a/tools/lto/lto.cpp
+++ b/tools/lto/lto.cpp
@@ -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 @@ LTO::optimize(Module *M, std::ostream &Out,
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);