Skip to content

Commit 0a1aa6c

Browse files
authored
[NFC][CodeGen] Change CodeGenOpt::Level/CodeGenFileType into enum classes (#66295)
This will make it easy for callers to see issues with and fix up calls to createTargetMachine after a future change to the params of TargetMachine. This matches other nearby enums. For downstream users, this should be a fairly straightforward replacement, e.g. s/CodeGenOpt::Aggressive/CodeGenOptLevel::Aggressive or s/CGFT_/CodeGenFileType::
1 parent ae84b16 commit 0a1aa6c

File tree

237 files changed

+764
-752
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

237 files changed

+764
-752
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -314,12 +314,12 @@ getCodeModel(const CodeGenOptions &CodeGenOpts) {
314314

315315
static CodeGenFileType getCodeGenFileType(BackendAction Action) {
316316
if (Action == Backend_EmitObj)
317-
return CGFT_ObjectFile;
317+
return CodeGenFileType::ObjectFile;
318318
else if (Action == Backend_EmitMCNull)
319-
return CGFT_Null;
319+
return CodeGenFileType::Null;
320320
else {
321321
assert(Action == Backend_EmitAssembly && "Invalid action!");
322-
return CGFT_AssemblyFile;
322+
return CodeGenFileType::AssemblyFile;
323323
}
324324
}
325325

@@ -561,10 +561,10 @@ void EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
561561
std::string FeaturesStr =
562562
llvm::join(TargetOpts.Features.begin(), TargetOpts.Features.end(), ",");
563563
llvm::Reloc::Model RM = CodeGenOpts.RelocationModel;
564-
std::optional<CodeGenOpt::Level> OptLevelOrNone =
564+
std::optional<CodeGenOptLevel> OptLevelOrNone =
565565
CodeGenOpt::getLevel(CodeGenOpts.OptimizationLevel);
566566
assert(OptLevelOrNone && "Invalid optimization level!");
567-
CodeGenOpt::Level OptLevel = *OptLevelOrNone;
567+
CodeGenOptLevel OptLevel = *OptLevelOrNone;
568568

569569
llvm::TargetOptions Options;
570570
if (!initTargetOptions(Diags, Options, CodeGenOpts, TargetOpts, LangOpts,
@@ -1216,7 +1216,7 @@ static void runThinLTOBackend(
12161216
Conf.CodeModel = getCodeModel(CGOpts);
12171217
Conf.MAttrs = TOpts.Features;
12181218
Conf.RelocModel = CGOpts.RelocationModel;
1219-
std::optional<CodeGenOpt::Level> OptLevelOrNone =
1219+
std::optional<CodeGenOptLevel> OptLevelOrNone =
12201220
CodeGenOpt::getLevel(CGOpts.OptimizationLevel);
12211221
assert(OptLevelOrNone && "Invalid optimization level!");
12221222
Conf.CGOptLevel = *OptLevelOrNone;

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -661,27 +661,27 @@ static bool FixupInvocation(CompilerInvocation &Invocation,
661661

662662
static unsigned getOptimizationLevel(ArgList &Args, InputKind IK,
663663
DiagnosticsEngine &Diags) {
664-
unsigned DefaultOpt = llvm::CodeGenOpt::None;
664+
unsigned DefaultOpt = 0;
665665
if ((IK.getLanguage() == Language::OpenCL ||
666666
IK.getLanguage() == Language::OpenCLCXX) &&
667667
!Args.hasArg(OPT_cl_opt_disable))
668-
DefaultOpt = llvm::CodeGenOpt::Default;
668+
DefaultOpt = 2;
669669

670670
if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
671671
if (A->getOption().matches(options::OPT_O0))
672-
return llvm::CodeGenOpt::None;
672+
return 0;
673673

674674
if (A->getOption().matches(options::OPT_Ofast))
675-
return llvm::CodeGenOpt::Aggressive;
675+
return 3;
676676

677677
assert(A->getOption().matches(options::OPT_O));
678678

679679
StringRef S(A->getValue());
680680
if (S == "s" || S == "z")
681-
return llvm::CodeGenOpt::Default;
681+
return 2;
682682

683683
if (S == "g")
684-
return llvm::CodeGenOpt::Less;
684+
return 1;
685685

686686
return getLastArgIntValue(Args, OPT_O, DefaultOpt, Diags);
687687
}

clang/lib/Interpreter/DeviceOffload.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ llvm::Expected<llvm::StringRef> IncrementalCUDADeviceParser::GeneratePTX() {
8888

8989
llvm::legacy::PassManager PM;
9090
if (TargetMachine->addPassesToEmitFile(PM, dest, nullptr,
91-
llvm::CGFT_AssemblyFile)) {
91+
llvm::CodeGenFileType::AssemblyFile)) {
9292
return llvm::make_error<llvm::StringError>(
9393
"NVPTX backend cannot produce PTX code.",
9494
llvm::inconvertibleErrorCode());

clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,9 @@ using namespace llvm;
4848
typedef void (*LLVMFunc)(int*, int*, int*, int);
4949

5050
// Helper function to parse command line args and find the optimization level
51-
static CodeGenOpt::Level
52-
getOptLevel(const std::vector<const char *> &ExtraArgs) {
51+
static CodeGenOptLevel getOptLevel(const std::vector<const char *> &ExtraArgs) {
5352
// Find the optimization level from the command line args
54-
CodeGenOpt::Level OLvl = CodeGenOpt::Default;
53+
CodeGenOptLevel OLvl = CodeGenOptLevel::Default;
5554
for (auto &A : ExtraArgs) {
5655
if (A[0] == '-' && A[1] == 'O') {
5756
if (auto Level = CodeGenOpt::parseLevel(A[2])) {
@@ -73,19 +72,19 @@ static void ErrorAndExit(std::string message) {
7372
// Helper function to add optimization passes to the TargetMachine at the
7473
// specified optimization level, OptLevel
7574
static void RunOptimizationPasses(raw_ostream &OS, Module &M,
76-
CodeGenOpt::Level OptLevel) {
75+
CodeGenOptLevel OptLevel) {
7776
llvm::OptimizationLevel OL;
7877
switch (OptLevel) {
79-
case CodeGenOpt::None:
78+
case CodeGenOptLevel::None:
8079
OL = OptimizationLevel::O0;
8180
break;
82-
case CodeGenOpt::Less:
81+
case CodeGenOptLevel::Less:
8382
OL = OptimizationLevel::O1;
8483
break;
85-
case CodeGenOpt::Default:
84+
case CodeGenOptLevel::Default:
8685
OL = OptimizationLevel::O2;
8786
break;
88-
case CodeGenOpt::Aggressive:
87+
case CodeGenOptLevel::Aggressive:
8988
OL = OptimizationLevel::O3;
9089
break;
9190
}
@@ -110,7 +109,7 @@ static void RunOptimizationPasses(raw_ostream &OS, Module &M,
110109
}
111110

112111
// Mimics the opt tool to run an optimization pass over the provided IR
113-
static std::string OptLLVM(const std::string &IR, CodeGenOpt::Level OLvl) {
112+
static std::string OptLLVM(const std::string &IR, CodeGenOptLevel OLvl) {
114113
// Create a module that will run the optimization passes
115114
SMDiagnostic Err;
116115
LLVMContext Context;
@@ -154,7 +153,7 @@ static void RunFuncOnInputs(LLVMFunc f, int Arr[kNumArrays][kArraySize]) {
154153
}
155154

156155
// Takes a string of IR and compiles it using LLVM's JIT Engine
157-
static void CreateAndRunJITFunc(const std::string &IR, CodeGenOpt::Level OLvl) {
156+
static void CreateAndRunJITFunc(const std::string &IR, CodeGenOptLevel OLvl) {
158157
SMDiagnostic Err;
159158
LLVMContext Context;
160159
std::unique_ptr<Module> M = parseIR(MemoryBufferRef(IR, "IR"), Err, Context);
@@ -205,7 +204,7 @@ static void CreateAndRunJITFunc(const std::string &IR, CodeGenOpt::Level OLvl) {
205204
#endif
206205

207206
// Figure out if we are running the optimized func or the unoptimized func
208-
RunFuncOnInputs(f, (OLvl == CodeGenOpt::None) ? UnoptArrays : OptArrays);
207+
RunFuncOnInputs(f, (OLvl == CodeGenOptLevel::None) ? UnoptArrays : OptArrays);
209208

210209
EE->runStaticConstructorsDestructors(true);
211210
}
@@ -219,13 +218,13 @@ void clang_fuzzer::HandleLLVM(const std::string &IR,
219218
memcpy(UnoptArrays, InputArrays, kTotalSize);
220219

221220
// Parse ExtraArgs to set the optimization level
222-
CodeGenOpt::Level OLvl = getOptLevel(ExtraArgs);
221+
CodeGenOptLevel OLvl = getOptLevel(ExtraArgs);
223222

224223
// First we optimize the IR by running a loop vectorizer pass
225224
std::string OptIR = OptLLVM(IR, OLvl);
226225

227226
CreateAndRunJITFunc(OptIR, OLvl);
228-
CreateAndRunJITFunc(IR, CodeGenOpt::None);
227+
CreateAndRunJITFunc(IR, CodeGenOptLevel::None);
229228

230229
if (memcmp(OptArrays, UnoptArrays, kTotalSize))
231230
ErrorAndExit("!!!BUG!!!");

clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ std::unique_ptr<lto::LTO> createLTO(
528528

529529
StringRef OptLevel = Args.getLastArgValue(OPT_opt_level, "O2");
530530
Conf.MAttrs = Features;
531-
std::optional<CodeGenOpt::Level> CGOptLevelOrNone =
531+
std::optional<CodeGenOptLevel> CGOptLevelOrNone =
532532
CodeGenOpt::parseLevel(OptLevel[1]);
533533
assert(CGOptLevelOrNone && "Invalid optimization level");
534534
Conf.CGOptLevel = *CGOptLevelOrNone;
@@ -569,8 +569,9 @@ std::unique_ptr<lto::LTO> createLTO(
569569
};
570570
}
571571
Conf.PostOptModuleHook = Hook;
572-
Conf.CGFileType =
573-
(Triple.isNVPTX() || SaveTemps) ? CGFT_AssemblyFile : CGFT_ObjectFile;
572+
Conf.CGFileType = (Triple.isNVPTX() || SaveTemps)
573+
? CodeGenFileType::AssemblyFile
574+
: CodeGenFileType::ObjectFile;
574575

575576
// TODO: Handle remark files
576577
Conf.HasWholeProgramVisibility = Args.hasArg(OPT_whole_program);
@@ -840,7 +841,8 @@ Expected<StringRef> compileModule(Module &M) {
840841
legacy::PassManager CodeGenPasses;
841842
TargetLibraryInfoImpl TLII(Triple(M.getTargetTriple()));
842843
CodeGenPasses.add(new TargetLibraryInfoWrapperPass(TLII));
843-
if (TM->addPassesToEmitFile(CodeGenPasses, *OS, nullptr, CGFT_ObjectFile))
844+
if (TM->addPassesToEmitFile(CodeGenPasses, *OS, nullptr,
845+
CodeGenFileType::ObjectFile))
844846
return createStringError(inconvertibleErrorCode(),
845847
"Failed to execute host backend");
846848
CodeGenPasses.run(M);

flang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,12 @@ static bool parseShowColorsArgs(const llvm::opt::ArgList &args,
9898
/// Extracts the optimisation level from \a args.
9999
static unsigned getOptimizationLevel(llvm::opt::ArgList &args,
100100
clang::DiagnosticsEngine &diags) {
101-
unsigned defaultOpt = llvm::CodeGenOpt::None;
101+
unsigned defaultOpt = 0;
102102

103103
if (llvm::opt::Arg *a =
104104
args.getLastArg(clang::driver::options::OPT_O_Group)) {
105105
if (a->getOption().matches(clang::driver::options::OPT_O0))
106-
return llvm::CodeGenOpt::None;
106+
return 0;
107107

108108
assert(a->getOption().matches(clang::driver::options::OPT_O));
109109

flang/lib/Frontend/FrontendActions.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -777,10 +777,10 @@ bool CodeGenAction::setUpTargetMachine() {
777777

778778
// Create `TargetMachine`
779779
const auto &CGOpts = ci.getInvocation().getCodeGenOpts();
780-
std::optional<llvm::CodeGenOpt::Level> OptLevelOrNone =
780+
std::optional<llvm::CodeGenOptLevel> OptLevelOrNone =
781781
llvm::CodeGenOpt::getLevel(CGOpts.OptimizationLevel);
782782
assert(OptLevelOrNone && "Invalid optimization level!");
783-
llvm::CodeGenOpt::Level OptLevel = *OptLevelOrNone;
783+
llvm::CodeGenOptLevel OptLevel = *OptLevelOrNone;
784784
std::string featuresStr = getTargetFeatures(ci);
785785
tm.reset(theTarget->createTargetMachine(
786786
theTriple, /*CPU=*/targetOpts.cpu,
@@ -848,8 +848,8 @@ static void generateMachineCodeOrAssemblyImpl(clang::DiagnosticsEngine &diags,
848848
codeGenPasses.add(new llvm::TargetLibraryInfoWrapperPass(*tlii));
849849

850850
llvm::CodeGenFileType cgft = (act == BackendActionTy::Backend_EmitAssembly)
851-
? llvm::CodeGenFileType::CGFT_AssemblyFile
852-
: llvm::CodeGenFileType::CGFT_ObjectFile;
851+
? llvm::CodeGenFileType::AssemblyFile
852+
: llvm::CodeGenFileType::ObjectFile;
853853
if (tm.addPassesToEmitFile(codeGenPasses, os, nullptr, cgft)) {
854854
unsigned diagID =
855855
diags.getCustomDiagID(clang::DiagnosticsEngine::Error,

lld/COFF/LTO.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ lto::Config BitcodeCompiler::createConfig() {
8888
c.OptLevel = ctx.config.ltoo;
8989
c.CPU = getCPUStr();
9090
c.MAttrs = getMAttrs();
91-
std::optional<CodeGenOpt::Level> optLevelOrNone = CodeGenOpt::getLevel(
91+
std::optional<CodeGenOptLevel> optLevelOrNone = CodeGenOpt::getLevel(
9292
ctx.config.ltoCgo.value_or(args::getCGOptLevel(ctx.config.ltoo)));
9393
assert(optLevelOrNone && "Invalid optimization level!");
9494
c.CGOptLevel = *optLevelOrNone;

lld/ELF/Config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ struct Config {
341341
uint64_t zStackSize;
342342
unsigned ltoPartitions;
343343
unsigned ltoo;
344-
llvm::CodeGenOpt::Level ltoCgo;
344+
llvm::CodeGenOptLevel ltoCgo;
345345
unsigned optimize;
346346
StringRef thinLTOJobs;
347347
unsigned timeTraceGranularity;

lld/ELF/LTO.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ static lto::Config createConfig() {
174174
}
175175

176176
if (config->ltoEmitAsm) {
177-
c.CGFileType = CGFT_AssemblyFile;
177+
c.CGFileType = CodeGenFileType::AssemblyFile;
178178
c.Options.MCOptions.AsmVerbose = true;
179179
}
180180

lld/MachO/Config.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626

2727
#include <vector>
2828

29-
namespace llvm::CodeGenOpt {
30-
enum Level : int;
31-
} // namespace llvm::CodeGenOpt
29+
namespace llvm {
30+
enum class CodeGenOptLevel;
31+
} // namespace llvm
3232

3333
namespace lld {
3434
namespace macho {
@@ -167,7 +167,7 @@ struct Configuration {
167167
llvm::StringRef thinLTOJobs;
168168
llvm::StringRef umbrella;
169169
uint32_t ltoo = 2;
170-
llvm::CodeGenOpt::Level ltoCgo;
170+
llvm::CodeGenOptLevel ltoCgo;
171171
llvm::CachePruningPolicy thinLTOCachePolicy;
172172
llvm::StringRef thinLTOCacheDir;
173173
llvm::StringRef thinLTOIndexOnlyArg;

lld/wasm/Config.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
#include "llvm/Support/CachePruning.h"
1717
#include <optional>
1818

19-
namespace llvm::CodeGenOpt {
20-
enum Level : int;
21-
} // namespace llvm::CodeGenOpt
19+
namespace llvm {
20+
enum class CodeGenOptLevel;
21+
} // namespace llvm
2222

2323
namespace lld::wasm {
2424

@@ -72,7 +72,7 @@ struct Configuration {
7272
uint64_t zStackSize;
7373
unsigned ltoPartitions;
7474
unsigned ltoo;
75-
llvm::CodeGenOpt::Level ltoCgo;
75+
llvm::CodeGenOptLevel ltoCgo;
7676
unsigned optimize;
7777
llvm::StringRef thinLTOJobs;
7878
bool ltoDebugPassManager;

lldb/source/Expression/IRExecutionUnit.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ void IRExecutionUnit::GetRunnableInfo(Status &error, lldb::addr_t &func_addr,
285285
.setRelocationModel(triple.isOSBinFormatMachO() ? llvm::Reloc::PIC_
286286
: llvm::Reloc::Static)
287287
.setMCJITMemoryManager(std::make_unique<MemoryManager>(*this))
288-
.setOptLevel(llvm::CodeGenOpt::Less);
288+
.setOptLevel(llvm::CodeGenOptLevel::Less);
289289

290290
llvm::StringRef mArch;
291291
llvm::StringRef mCPU;

llvm/docs/OptBisect.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ skipped while still allowing correct code generation call a function to
1919
check the opt-bisect limit before performing optimizations. Passes which
2020
either must be run or do not modify the IR do not perform this check and are
2121
therefore never skipped. Generally, this means analysis passes, passes
22-
that are run at CodeGenOpt::None and passes which are required for register
22+
that are run at CodeGenOptLevel::None and passes which are required for register
2323
allocation.
2424

2525
The -opt-bisect-limit option can be used with any tool, including front ends

llvm/docs/tutorial/MyFirstLanguageFrontend/LangImpl08.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ pass:
155155
.. code-block:: c++
156156

157157
legacy::PassManager pass;
158-
auto FileType = CGFT_ObjectFile;
158+
auto FileType = CodeGenFileType::ObjectFile;
159159

160160
if (TargetMachine->addPassesToEmitFile(pass, dest, nullptr, FileType)) {
161161
errs() << "TargetMachine can't emit a file of this type";

llvm/examples/Kaleidoscope/Chapter8/toy.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1258,7 +1258,7 @@ int main() {
12581258
}
12591259

12601260
legacy::PassManager pass;
1261-
auto FileType = CGFT_ObjectFile;
1261+
auto FileType = CodeGenFileType::ObjectFile;
12621262

12631263
if (TheTargetMachine->addPassesToEmitFile(pass, dest, nullptr, FileType)) {
12641264
errs() << "TheTargetMachine can't emit a file of this type";

0 commit comments

Comments
 (0)