diff options
Diffstat (limited to 'tools/llc/llc.cpp')
-rw-r--r-- | tools/llc/llc.cpp | 50 |
1 files changed, 12 insertions, 38 deletions
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index 4f93a43..fe34bd1 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -15,16 +15,13 @@ #include "llvm/LLVMContext.h" #include "llvm/Module.h" -#include "llvm/ModuleProvider.h" #include "llvm/PassManager.h" #include "llvm/Pass.h" #include "llvm/ADT/Triple.h" #include "llvm/Analysis/Verifier.h" #include "llvm/Support/IRReader.h" -#include "llvm/CodeGen/FileWriters.h" #include "llvm/CodeGen/LinkAllAsmWriterComponents.h" #include "llvm/CodeGen/LinkAllCodegenComponents.h" -#include "llvm/CodeGen/ObjectCodeEmitter.h" #include "llvm/Config/config.h" #include "llvm/LinkAllVMCore.h" #include "llvm/Support/CommandLine.h" @@ -87,16 +84,15 @@ MAttrs("mattr", cl::value_desc("a1,+a2,-a3,...")); cl::opt<TargetMachine::CodeGenFileType> -FileType("filetype", cl::init(TargetMachine::AssemblyFile), +FileType("filetype", cl::init(TargetMachine::CGFT_AssemblyFile), cl::desc("Choose a file type (not all types are supported by all targets):"), cl::values( - clEnumValN(TargetMachine::AssemblyFile, "asm", + clEnumValN(TargetMachine::CGFT_AssemblyFile, "asm", "Emit an assembly ('.s') file"), - clEnumValN(TargetMachine::ObjectFile, "obj", + clEnumValN(TargetMachine::CGFT_ObjectFile, "obj", "Emit a native object ('.o') file [experimental]"), - clEnumValN(TargetMachine::DynamicLibrary, "dynlib", - "Emit a native dynamic library ('.so') file" - " [experimental]"), + clEnumValN(TargetMachine::CGFT_Null, "null", + "Emit nothing, for performance testing"), clEnumValEnd)); cl::opt<bool> NoVerify("disable-verify", cl::Hidden, @@ -164,7 +160,8 @@ static formatted_raw_ostream *GetOutputStream(const char *TargetName, bool Binary = false; switch (FileType) { - case TargetMachine::AssemblyFile: + default: assert(0 && "Unknown file type"); + case TargetMachine::CGFT_AssemblyFile: if (TargetName[0] == 'c') { if (TargetName[1] == 0) OutputFilename += ".cbe.c"; @@ -175,12 +172,12 @@ static formatted_raw_ostream *GetOutputStream(const char *TargetName, } else OutputFilename += ".s"; break; - case TargetMachine::ObjectFile: + case TargetMachine::CGFT_ObjectFile: OutputFilename += ".o"; Binary = true; break; - case TargetMachine::DynamicLibrary: - OutputFilename += LTDL_SHLIB_EXT; + case TargetMachine::CGFT_Null: + OutputFilename += ".null"; Binary = true; break; } @@ -334,8 +331,7 @@ int main(int argc, char **argv) { PM.run(mod); } else { // Build up all of the passes that we want to do to the module. - ExistingModuleProvider Provider(M.release()); - FunctionPassManager Passes(&Provider); + FunctionPassManager Passes(M.get()); // Add the target data from the target machine, if it exists, or the module. if (const TargetData *TD = Target.getTargetData()) @@ -348,32 +344,10 @@ int main(int argc, char **argv) { Passes.add(createVerifierPass()); #endif - // Ask the target to add backend passes as necessary. - ObjectCodeEmitter *OCE = 0; - // Override default to generate verbose assembly. Target.setAsmVerbosityDefault(true); - switch (Target.addPassesToEmitFile(Passes, *Out, FileType, OLvl)) { - default: - assert(0 && "Invalid file model!"); - return 1; - case FileModel::Error: - errs() << argv[0] << ": target does not support generation of this" - << " file type!\n"; - if (Out != &fouts()) delete Out; - // And the Out file is empty and useless, so remove it now. - sys::Path(OutputFilename).eraseFromDisk(); - return 1; - case FileModel::AsmFile: - case FileModel::MachOFile: - break; - case FileModel::ElfFile: - OCE = AddELFWriter(Passes, *Out, Target); - break; - } - - if (Target.addPassesToEmitFileFinish(Passes, OCE, OLvl)) { + if (Target.addPassesToEmitFile(Passes, *Out, FileType, OLvl)) { errs() << argv[0] << ": target does not support generation of this" << " file type!\n"; if (Out != &fouts()) delete Out; |