From 211edae4843f5c2ee9c376e88e4cf0ecc8745f03 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 2 Feb 2010 21:06:45 +0000 Subject: [PATCH] eliminate FileModel::Model, just use CodeGenFileType. The client of the code generator shouldn't care what object format a target uses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95124 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/TargetMachine.h | 46 ++++++++++++---------------- lib/CodeGen/LLVMTargetMachine.cpp | 17 +++++----- lib/Target/CBackend/CBackend.cpp | 2 +- lib/Target/CppBackend/CPPBackend.cpp | 2 +- lib/Target/MSIL/MSILWriter.cpp | 2 +- tools/llc/llc.cpp | 19 ++++++------ tools/lto/LTOCodeGenerator.cpp | 4 +-- 7 files changed, 42 insertions(+), 50 deletions(-) diff --git a/include/llvm/Target/TargetMachine.h b/include/llvm/Target/TargetMachine.h index 2471067599b..7ba7ec2e483 100644 --- a/include/llvm/Target/TargetMachine.h +++ b/include/llvm/Target/TargetMachine.h @@ -60,16 +60,6 @@ namespace CodeModel { }; } -namespace FileModel { - enum Model { - Error, - None, - AsmFile, - MachOFile, - ElfFile - }; -} - // Code generation optimization level. namespace CodeGenOpt { enum Level { @@ -206,9 +196,13 @@ public: } /// CodeGenFileType - These enums are meant to be passed into - /// addPassesToEmitFile to indicate what type of file to emit. + /// addPassesToEmitFile to indicate what type of file to emit, and returned by + /// it to indicate what type of file could actually be made. enum CodeGenFileType { - AssemblyFile, ObjectFile, DynamicLibrary + CGFT_AssemblyFile, + CGFT_ObjectFile, + CGFT_DynamicLibrary, + CGFT_ErrorOccurred }; /// getEnableTailMergeDefault - the default setting for -enable-tail-merge @@ -218,14 +212,14 @@ public: /// addPassesToEmitFile - Add passes to the specified pass manager to get the /// specified file emitted. Typically this will involve several steps of code /// generation. - /// This method should return FileModel::Error if emission of this file type + /// This method should return InvalidFile if emission of this file type /// is not supported. /// - virtual FileModel::Model addPassesToEmitFile(PassManagerBase &, - formatted_raw_ostream &, - CodeGenFileType, - CodeGenOpt::Level) { - return FileModel::None; + virtual CodeGenFileType addPassesToEmitFile(PassManagerBase &, + formatted_raw_ostream &, + CodeGenFileType Filetype, + CodeGenOpt::Level) { + return CGFT_ErrorOccurred; } /// addPassesToEmitMachineCode - Add passes to the specified pass manager to @@ -271,19 +265,19 @@ public: /// addPassesToEmitFile - Add passes to the specified pass manager to get the /// specified file emitted. Typically this will involve several steps of code - /// generation. If OptLevel is None, the code generator should emit code as fast - /// as possible, though the generated code may be less efficient. This method - /// should return FileModel::Error if emission of this file type is not - /// supported. + /// generation. If OptLevel is None, the code generator should emit code as + /// fast as possible, though the generated code may be less efficient. This + /// method should return CGFT_ErrorOccurred if emission of this file type is + /// not supported. /// /// The default implementation of this method adds components from the /// LLVM retargetable code generator, invoking the methods below to get /// target-specific passes in standard locations. /// - virtual FileModel::Model addPassesToEmitFile(PassManagerBase &PM, - formatted_raw_ostream &Out, - CodeGenFileType FileType, - CodeGenOpt::Level); + virtual CodeGenFileType addPassesToEmitFile(PassManagerBase &PM, + formatted_raw_ostream &Out, + CodeGenFileType FileType, + CodeGenOpt::Level); /// addPassesToEmitMachineCode - Add passes to the specified pass manager to /// get machine code emitted. This uses a MachineCodeEmitter object to handle diff --git a/lib/CodeGen/LLVMTargetMachine.cpp b/lib/CodeGen/LLVMTargetMachine.cpp index 4bb8af5ac6f..81b73aeec49 100644 --- a/lib/CodeGen/LLVMTargetMachine.cpp +++ b/lib/CodeGen/LLVMTargetMachine.cpp @@ -96,28 +96,25 @@ LLVMTargetMachine::setCodeModelForStatic() { setCodeModel(CodeModel::Small); } -FileModel::Model +TargetMachine::CodeGenFileType LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM, formatted_raw_ostream &Out, CodeGenFileType FileType, CodeGenOpt::Level OptLevel) { // Add common CodeGen passes. if (addCommonCodeGenPasses(PM, OptLevel)) - return FileModel::Error; + return CGFT_ErrorOccurred; - FileModel::Model ResultTy; switch (FileType) { default: - return FileModel::Error; - case TargetMachine::ObjectFile: - return FileModel::Error; - case TargetMachine::AssemblyFile: { + case CGFT_ObjectFile: + return CGFT_ErrorOccurred; + case CGFT_AssemblyFile: { FunctionPass *Printer = getTarget().createAsmPrinter(Out, *this, getMCAsmInfo(), getAsmVerbosityDefault()); - if (Printer == 0) return FileModel::Error; + if (Printer == 0) return CGFT_ErrorOccurred; PM.add(Printer); - ResultTy = FileModel::AsmFile; break; } } @@ -125,7 +122,7 @@ LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM, // Make sure the code model is set. setCodeModelForStatic(); PM.add(createGCInfoDeleter()); - return ResultTy; + return FileType; } /// addPassesToEmitMachineCode - Add passes to the specified pass manager to diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index e76565517ad..f63398ec859 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -3706,7 +3706,7 @@ bool CTargetMachine::addPassesToEmitWholeFile(PassManager &PM, formatted_raw_ostream &o, CodeGenFileType FileType, CodeGenOpt::Level OptLevel) { - if (FileType != TargetMachine::AssemblyFile) return true; + if (FileType != TargetMachine::CGFT_AssemblyFile) return true; PM.add(createGCLoweringPass()); PM.add(createLowerInvokePass()); diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp index 1f087758949..4f3f0047b36 100644 --- a/lib/Target/CppBackend/CPPBackend.cpp +++ b/lib/Target/CppBackend/CPPBackend.cpp @@ -2009,7 +2009,7 @@ bool CPPTargetMachine::addPassesToEmitWholeFile(PassManager &PM, formatted_raw_ostream &o, CodeGenFileType FileType, CodeGenOpt::Level OptLevel) { - if (FileType != TargetMachine::AssemblyFile) return true; + if (FileType != TargetMachine::CGFT_AssemblyFile) return true; PM.add(new CppWriter(o)); return false; } diff --git a/lib/Target/MSIL/MSILWriter.cpp b/lib/Target/MSIL/MSILWriter.cpp index 1bc708eb79a..a96ee49a8d9 100644 --- a/lib/Target/MSIL/MSILWriter.cpp +++ b/lib/Target/MSIL/MSILWriter.cpp @@ -1690,7 +1690,7 @@ bool MSILTarget::addPassesToEmitWholeFile(PassManager &PM, CodeGenFileType FileType, CodeGenOpt::Level OptLevel) { - if (FileType != TargetMachine::AssemblyFile) return true; + if (FileType != TargetMachine::CGFT_AssemblyFile) return true; MSILWriter* Writer = new MSILWriter(o); PM.add(createGCLoweringPass()); // FIXME: Handle switch through native IL instruction "switch" diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index 395eaa29e24..0927e1c8b6f 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -85,14 +85,14 @@ MAttrs("mattr", cl::value_desc("a1,+a2,-a3,...")); cl::opt -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", + clEnumValN(TargetMachine::CGFT_DynamicLibrary, "dynlib", "Emit a native dynamic library ('.so') file" " [experimental]"), clEnumValEnd)); @@ -162,7 +162,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"; @@ -173,11 +174,11 @@ 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: + case TargetMachine::CGFT_DynamicLibrary: OutputFilename += LTDL_SHLIB_EXT; Binary = true; break; @@ -352,14 +353,14 @@ int main(int argc, char **argv) { default: assert(0 && "Invalid file model!"); return 1; - case FileModel::Error: + case TargetMachine::CGFT_ErrorOccurred: 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 TargetMachine::CGFT_AssemblyFile: break; } diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp index 5275cc36737..bb31b0bb6bd 100644 --- a/tools/lto/LTOCodeGenerator.cpp +++ b/tools/lto/LTOCodeGenerator.cpp @@ -396,9 +396,9 @@ bool LTOCodeGenerator::generateAssemblyCode(formatted_raw_ostream& out, codeGenPasses->add(new TargetData(*_target->getTargetData())); switch (_target->addPassesToEmitFile(*codeGenPasses, out, - TargetMachine::AssemblyFile, + TargetMachine::CGFT_AssemblyFile, CodeGenOpt::Aggressive)) { - case FileModel::AsmFile: + case TargetMachine::CGFT_AssemblyFile: break; default: errMsg = "target file type not supported"; -- 2.34.1