From 1dfede3122eec83b885d788553e3620806d54650 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 13 Nov 2019 15:17:46 -0800 Subject: [PATCH] Move CodeGenFileType enum to Support/CodeGen.h Avoids the need to include TargetMachine.h from various places just for an enum. Various other enums live here, such as the optimization level, TLS model, etc. Data suggests that this change probably doesn't matter, but it seems nice to have anyway. --- clang/lib/CodeGen/BackendUtil.cpp | 10 +++++----- .../MyFirstLanguageFrontend/LangImpl08.rst | 2 +- llvm/examples/Kaleidoscope/Chapter8/toy.cpp | 2 +- llvm/include/llvm/CodeGen/CommandFlags.inc | 10 +++++----- llvm/include/llvm/CodeGen/ParallelCG.h | 2 +- llvm/include/llvm/LTO/Config.h | 4 ++-- llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h | 6 +++--- llvm/include/llvm/Support/CodeGen.h | 9 +++++++++ llvm/include/llvm/Target/TargetMachine.h | 9 --------- llvm/lib/CodeGen/ParallelCG.cpp | 4 ++-- llvm/lib/LTO/LTOCodeGenerator.cpp | 2 +- llvm/lib/LTO/ThinLTOCodeGenerator.cpp | 2 +- llvm/lib/Target/TargetMachineC.cpp | 6 +++--- llvm/tools/gold/gold-plugin.cpp | 2 +- llvm/tools/llc/llc.cpp | 16 ++++++++-------- llvm/tools/llvm-exegesis/lib/Assembler.cpp | 2 +- llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp | 2 +- polly/lib/CodeGen/PPCGCodeGeneration.cpp | 3 +-- 18 files changed, 46 insertions(+), 47 deletions(-) diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index c15dc0be0b15cf..a2261660eab87b 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -407,14 +407,14 @@ getCodeModel(const CodeGenOptions &CodeGenOpts) { return static_cast(CodeModel); } -static TargetMachine::CodeGenFileType getCodeGenFileType(BackendAction Action) { +static CodeGenFileType getCodeGenFileType(BackendAction Action) { if (Action == Backend_EmitObj) - return TargetMachine::CGFT_ObjectFile; + return CGFT_ObjectFile; else if (Action == Backend_EmitMCNull) - return TargetMachine::CGFT_Null; + return CGFT_Null; else { assert(Action == Backend_EmitAssembly && "Invalid action!"); - return TargetMachine::CGFT_AssemblyFile; + return CGFT_AssemblyFile; } } @@ -788,7 +788,7 @@ bool EmitAssemblyHelper::AddEmitPasses(legacy::PassManager &CodeGenPasses, // Normal mode, emit a .s or .o file by running the code generator. Note, // this also adds codegenerator level optimization passes. - TargetMachine::CodeGenFileType CGFT = getCodeGenFileType(Action); + CodeGenFileType CGFT = getCodeGenFileType(Action); // Add ObjC ARC final-cleanup optimizations. This is done as part of the // "codegen" passes so that it isn't run multiple times when there is diff --git a/llvm/docs/tutorial/MyFirstLanguageFrontend/LangImpl08.rst b/llvm/docs/tutorial/MyFirstLanguageFrontend/LangImpl08.rst index a794b46c71ac97..bd730fea693523 100644 --- a/llvm/docs/tutorial/MyFirstLanguageFrontend/LangImpl08.rst +++ b/llvm/docs/tutorial/MyFirstLanguageFrontend/LangImpl08.rst @@ -157,7 +157,7 @@ pass: .. code-block:: c++ legacy::PassManager pass; - auto FileType = TargetMachine::CGFT_ObjectFile; + auto FileType = CGFT_ObjectFile; if (TargetMachine->addPassesToEmitFile(pass, dest, nullptr, FileType)) { errs() << "TargetMachine can't emit a file of this type"; diff --git a/llvm/examples/Kaleidoscope/Chapter8/toy.cpp b/llvm/examples/Kaleidoscope/Chapter8/toy.cpp index 8c46e4466588a4..2da3b602b62f33 100644 --- a/llvm/examples/Kaleidoscope/Chapter8/toy.cpp +++ b/llvm/examples/Kaleidoscope/Chapter8/toy.cpp @@ -1253,7 +1253,7 @@ int main() { } legacy::PassManager pass; - auto FileType = TargetMachine::CGFT_ObjectFile; + auto FileType = CGFT_ObjectFile; if (TheTargetMachine->addPassesToEmitFile(pass, dest, nullptr, FileType)) { errs() << "TheTargetMachine can't emit a file of this type"; diff --git a/llvm/include/llvm/CodeGen/CommandFlags.inc b/llvm/include/llvm/CodeGen/CommandFlags.inc index 16b7028ce53296..f1b3afbb44ae2b 100644 --- a/llvm/include/llvm/CodeGen/CommandFlags.inc +++ b/llvm/include/llvm/CodeGen/CommandFlags.inc @@ -102,15 +102,15 @@ static cl::opt ExceptionModel( clEnumValN(ExceptionHandling::Wasm, "wasm", "WebAssembly exception handling"))); -static cl::opt FileType( - "filetype", cl::init(TargetMachine::CGFT_AssemblyFile), +static cl::opt FileType( + "filetype", cl::init(CGFT_AssemblyFile), cl::desc( "Choose a file type (not all types are supported by all targets):"), - cl::values(clEnumValN(TargetMachine::CGFT_AssemblyFile, "asm", + cl::values(clEnumValN(CGFT_AssemblyFile, "asm", "Emit an assembly ('.s') file"), - clEnumValN(TargetMachine::CGFT_ObjectFile, "obj", + clEnumValN(CGFT_ObjectFile, "obj", "Emit a native object ('.o') file"), - clEnumValN(TargetMachine::CGFT_Null, "null", + clEnumValN(CGFT_Null, "null", "Emit nothing, for performance testing"))); static cl::opt FramePointerUsage( diff --git a/llvm/include/llvm/CodeGen/ParallelCG.h b/llvm/include/llvm/CodeGen/ParallelCG.h index a44715d4fc4fa3..b4c761c2269eb3 100644 --- a/llvm/include/llvm/CodeGen/ParallelCG.h +++ b/llvm/include/llvm/CodeGen/ParallelCG.h @@ -39,7 +39,7 @@ std::unique_ptr splitCodeGen(std::unique_ptr M, ArrayRef OSs, ArrayRef BCOSs, const std::function()> &TMFactory, - TargetMachine::CodeGenFileType FileType = TargetMachine::CGFT_ObjectFile, + CodeGenFileType FileType = CGFT_ObjectFile, bool PreserveLocals = false); } // namespace llvm diff --git a/llvm/include/llvm/LTO/Config.h b/llvm/include/llvm/LTO/Config.h index daa6585b111305..754e3126f8a9fe 100644 --- a/llvm/include/llvm/LTO/Config.h +++ b/llvm/include/llvm/LTO/Config.h @@ -15,8 +15,8 @@ #define LLVM_LTO_CONFIG_H #include "llvm/IR/DiagnosticInfo.h" +#include "llvm/IR/LLVMContext.h" #include "llvm/Support/CodeGen.h" -#include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" #include @@ -41,7 +41,7 @@ struct Config { Optional RelocModel = Reloc::PIC_; Optional CodeModel = None; CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default; - TargetMachine::CodeGenFileType CGFileType = TargetMachine::CGFT_ObjectFile; + CodeGenFileType CGFileType = CGFT_ObjectFile; unsigned OptLevel = 2; bool DisableVerify = false; diff --git a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h index 8718df4b88e68e..fd77b18fb88bde 100644 --- a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h +++ b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h @@ -87,8 +87,8 @@ struct LTOCodeGenerator { void setCodePICModel(Optional Model) { RelocModel = Model; } /// Set the file type to be emitted (assembly or object code). - /// The default is TargetMachine::CGFT_ObjectFile. - void setFileType(TargetMachine::CodeGenFileType FT) { FileType = FT; } + /// The default is CGFT_ObjectFile. + void setFileType(CodeGenFileType FT) { FileType = FT; } void setCpu(StringRef MCpu) { this->MCpu = MCpu; } void setAttr(StringRef MAttr) { this->MAttr = MAttr; } @@ -238,7 +238,7 @@ struct LTOCodeGenerator { bool ShouldInternalize = EnableLTOInternalization; bool ShouldEmbedUselists = false; bool ShouldRestoreGlobalsLinkage = false; - TargetMachine::CodeGenFileType FileType = TargetMachine::CGFT_ObjectFile; + CodeGenFileType FileType = CGFT_ObjectFile; std::unique_ptr DiagnosticOutputFile; bool Freestanding = false; std::unique_ptr StatsFile = nullptr; diff --git a/llvm/include/llvm/Support/CodeGen.h b/llvm/include/llvm/Support/CodeGen.h index a3f423e558cf2b..e2aa2b68b9d248 100644 --- a/llvm/include/llvm/Support/CodeGen.h +++ b/llvm/include/llvm/Support/CodeGen.h @@ -57,6 +57,15 @@ namespace llvm { }; } + /// These enums are meant to be passed into 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 { + CGFT_AssemblyFile, + CGFT_ObjectFile, + CGFT_Null // Do not emit any output. + }; + // Specify effect of frame pointer elimination optimization. namespace FramePointer { enum FP {All, NonLeaf, None}; diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h index 285c0ec0fb9050..176ae39b17a7cd 100644 --- a/llvm/include/llvm/Target/TargetMachine.h +++ b/llvm/include/llvm/Target/TargetMachine.h @@ -271,15 +271,6 @@ class TargetMachine { /// PassManagerBuilder::addExtension. virtual void adjustPassManager(PassManagerBuilder &) {} - /// These enums are meant to be passed into 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 { - CGFT_AssemblyFile, - CGFT_ObjectFile, - CGFT_Null // Do not emit any output. - }; - /// 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 true if emission of this file type is not diff --git a/llvm/lib/CodeGen/ParallelCG.cpp b/llvm/lib/CodeGen/ParallelCG.cpp index e4c73658cb4f7e..7dbd830666fb8f 100644 --- a/llvm/lib/CodeGen/ParallelCG.cpp +++ b/llvm/lib/CodeGen/ParallelCG.cpp @@ -26,7 +26,7 @@ using namespace llvm; static void codegen(Module *M, llvm::raw_pwrite_stream &OS, function_ref()> TMFactory, - TargetMachine::CodeGenFileType FileType) { + CodeGenFileType FileType) { std::unique_ptr TM = TMFactory(); legacy::PassManager CodeGenPasses; if (TM->addPassesToEmitFile(CodeGenPasses, OS, nullptr, FileType)) @@ -38,7 +38,7 @@ std::unique_ptr llvm::splitCodeGen( std::unique_ptr M, ArrayRef OSs, ArrayRef BCOSs, const std::function()> &TMFactory, - TargetMachine::CodeGenFileType FileType, bool PreserveLocals) { + CodeGenFileType FileType, bool PreserveLocals) { assert(BCOSs.empty() || BCOSs.size() == OSs.size()); if (OSs.size() == 1) { diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index 8821928928672b..f87f232c63ebcd 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -259,7 +259,7 @@ bool LTOCodeGenerator::compileOptimizedToFile(const char **Name) { int FD; StringRef Extension - (FileType == TargetMachine::CGFT_AssemblyFile ? "s" : "o"); + (FileType == CGFT_AssemblyFile ? "s" : "o"); std::error_code EC = sys::fs::createTemporaryFile("lto-llvm", Extension, FD, Filename); diff --git a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp index 5a50a4830f15b3..300203bcc1c2f8 100644 --- a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp +++ b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp @@ -292,7 +292,7 @@ std::unique_ptr codegenModule(Module &TheModule, PM.add(createObjCARCContractPass()); // Setup the codegen now. - if (TM.addPassesToEmitFile(PM, OS, nullptr, TargetMachine::CGFT_ObjectFile, + if (TM.addPassesToEmitFile(PM, OS, nullptr, CGFT_ObjectFile, /* DisableVerify */ true)) report_fatal_error("Failed to setup codegen"); diff --git a/llvm/lib/Target/TargetMachineC.cpp b/llvm/lib/Target/TargetMachineC.cpp index 3ac9c38dfc0b00..a38633e1f27eb4 100644 --- a/llvm/lib/Target/TargetMachineC.cpp +++ b/llvm/lib/Target/TargetMachineC.cpp @@ -195,13 +195,13 @@ static LLVMBool LLVMTargetMachineEmit(LLVMTargetMachineRef T, LLVMModuleRef M, Mod->setDataLayout(TM->createDataLayout()); - TargetMachine::CodeGenFileType ft; + CodeGenFileType ft; switch (codegen) { case LLVMAssemblyFile: - ft = TargetMachine::CGFT_AssemblyFile; + ft = CGFT_AssemblyFile; break; default: - ft = TargetMachine::CGFT_ObjectFile; + ft = CGFT_ObjectFile; break; } if (TM->addPassesToEmitFile(pass, OS, nullptr, ft)) { diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp index 0f720b6be23a4f..d355184f866cd6 100644 --- a/llvm/tools/gold/gold-plugin.cpp +++ b/llvm/tools/gold/gold-plugin.cpp @@ -899,7 +899,7 @@ static std::unique_ptr createLTO(IndexWriteCallback OnIndexWrite, /* UseInputModulePath */ true)); break; case options::OT_ASM_ONLY: - Conf.CGFileType = TargetMachine::CGFT_AssemblyFile; + Conf.CGFileType = CGFT_AssemblyFile; break; } diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index c4cb7489cde204..b5503a4157b116 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -203,7 +203,7 @@ static std::unique_ptr GetOutputStream(const char *TargetName, OutputFilename = IFN; switch (FileType) { - case TargetMachine::CGFT_AssemblyFile: + case CGFT_AssemblyFile: if (TargetName[0] == 'c') { if (TargetName[1] == 0) OutputFilename += ".cbe.c"; @@ -214,13 +214,13 @@ static std::unique_ptr GetOutputStream(const char *TargetName, } else OutputFilename += ".s"; break; - case TargetMachine::CGFT_ObjectFile: + case CGFT_ObjectFile: if (OS == Triple::Win32) OutputFilename += ".obj"; else OutputFilename += ".o"; break; - case TargetMachine::CGFT_Null: + case CGFT_Null: OutputFilename += ".null"; break; } @@ -230,10 +230,10 @@ static std::unique_ptr GetOutputStream(const char *TargetName, // Decide if we need "binary" output. bool Binary = false; switch (FileType) { - case TargetMachine::CGFT_AssemblyFile: + case CGFT_AssemblyFile: break; - case TargetMachine::CGFT_ObjectFile: - case TargetMachine::CGFT_Null: + case CGFT_ObjectFile: + case CGFT_Null: Binary = true; break; } @@ -520,7 +520,7 @@ static int compileModule(char **argv, LLVMContext &Context) { setFunctionAttributes(CPUStr, FeaturesStr, *M); if (RelaxAll.getNumOccurrences() > 0 && - FileType != TargetMachine::CGFT_ObjectFile) + FileType != CGFT_ObjectFile) WithColor::warning(errs(), argv[0]) << ": warning: ignoring -mc-relax-all because filetype != obj"; @@ -531,7 +531,7 @@ static int compileModule(char **argv, LLVMContext &Context) { // so we can memcmp the contents in CompileTwice mode SmallVector Buffer; std::unique_ptr BOS; - if ((FileType != TargetMachine::CGFT_AssemblyFile && + if ((FileType != CGFT_AssemblyFile && !Out->os().supportsSeeking()) || CompileTwice) { BOS = std::make_unique(Buffer); diff --git a/llvm/tools/llvm-exegesis/lib/Assembler.cpp b/llvm/tools/llvm-exegesis/lib/Assembler.cpp index 631aed0758f58c..bb89655435a8a1 100644 --- a/llvm/tools/llvm-exegesis/lib/Assembler.cpp +++ b/llvm/tools/llvm-exegesis/lib/Assembler.cpp @@ -238,7 +238,7 @@ void assembleToStream(const ExegesisTarget &ET, TPC->setInitialized(); // AsmPrinter is responsible for generating the assembly into AsmBuffer. - if (TM->addAsmPrinter(PM, AsmStream, nullptr, TargetMachine::CGFT_ObjectFile, + if (TM->addAsmPrinter(PM, AsmStream, nullptr, CGFT_ObjectFile, MCContext)) report_fatal_error("Cannot add AsmPrinter passes"); diff --git a/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp b/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp index a27f1147a4a2e9..b71ed4a705667b 100644 --- a/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp +++ b/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp @@ -98,7 +98,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { TargetLibraryInfoImpl TLII(TM->getTargetTriple()); PM.add(new TargetLibraryInfoWrapperPass(TLII)); raw_null_ostream OS; - TM->addPassesToEmitFile(PM, OS, nullptr, TargetMachine::CGFT_Null); + TM->addPassesToEmitFile(PM, OS, nullptr, CGFT_Null); PM.run(*M); return 0; diff --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp index 2516b33a0ca8d1..1b29fc4fd86c3f 100644 --- a/polly/lib/CodeGen/PPCGCodeGeneration.cpp +++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp @@ -2367,8 +2367,7 @@ std::string GPUNodeBuilder::createKernelASM() { PM.add(createTargetTransformInfoWrapperPass(TargetM->getTargetIRAnalysis())); - if (TargetM->addPassesToEmitFile(PM, ASMStream, nullptr, - TargetMachine::CGFT_AssemblyFile, + if (TargetM->addPassesToEmitFile(PM, ASMStream, nullptr, CGFT_AssemblyFile, true /* verify */)) { errs() << "The target does not support generation of this file type!\n"; return "";