Skip to content

Commit a1320e3

Browse files
committed
Suggestions from code review
1 parent dc28e4e commit a1320e3

File tree

4 files changed

+64
-59
lines changed

4 files changed

+64
-59
lines changed

llvm/include/llvm/Passes/TargetPassRegistry.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ if (PIC) {
9292
return true; \
9393
}
9494

95-
PB.registerPipelineParsingCallback([&](StringRef Name, ModulePassManager &PM,
95+
PB.registerPipelineParsingCallback([=](StringRef Name, ModulePassManager &PM,
9696
ArrayRef<PassBuilder::PipelineElement>) {
9797
#define MODULE_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
9898
#include GET_PASS_REGISTRY
@@ -109,7 +109,7 @@ PB.registerPipelineParsingCallback([=](StringRef Name, ModulePassManager &PM,
109109
return false;
110110
});
111111

112-
PB.registerPipelineParsingCallback([&](StringRef Name, FunctionPassManager &PM,
112+
PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM,
113113
ArrayRef<PassBuilder::PipelineElement>) {
114114
#define FUNCTION_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
115115
#include GET_PASS_REGISTRY

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 59 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@
188188
#include "llvm/Support/CodeGen.h"
189189
#include "llvm/Support/CommandLine.h"
190190
#include "llvm/Support/Debug.h"
191+
#include "llvm/Support/Error.h"
191192
#include "llvm/Support/ErrorHandling.h"
192193
#include "llvm/Support/FormatVariadic.h"
193194
#include "llvm/Support/Regex.h"
@@ -529,96 +530,100 @@ PassBuilder::PassBuilder(TargetMachine *TM, PipelineTuningOptions PTO,
529530
});
530531
}
531532
auto parseLevelParam = [](StringRef P) -> Expected<OptimizationLevel> {
532-
if (P == "O0") return OptimizationLevel::O0;
533-
if (P == "O1") return OptimizationLevel::O1;
534-
if (P == "O2") return OptimizationLevel::O2;
535-
if (P == "O3") return OptimizationLevel::O3;
536-
if (P == "Os") return OptimizationLevel::Os;
537-
if (P == "Oz") return OptimizationLevel::Oz;
538-
return make_error<StringError>(
539-
formatv("invalid optimization level '{}'", P).str(),
540-
inconvertibleErrorCode());
533+
auto OptLevel = llvm::StringSwitch<std::optional<OptimizationLevel>>(P)
534+
.Case("O0", OptimizationLevel::O0)
535+
.Case("O1", OptimizationLevel::O1)
536+
.Case("O2", OptimizationLevel::O2)
537+
.Case("O3", OptimizationLevel::O3)
538+
.Case("Os", OptimizationLevel::Os)
539+
.Case("Oz", OptimizationLevel::Oz)
540+
.Default(std::nullopt);
541+
if (!OptLevel)
542+
return llvm::createStringError(llvm::inconvertibleErrorCode(),
543+
"invalid optimization level '%s'",
544+
P.str().c_str());
545+
return *OptLevel;
541546
};
542547

543548
// Module-level callbacks without LTO phase
544-
this->registerPipelineParsingCallback(
549+
registerPipelineParsingCallback(
545550
[this, parseLevelParam](StringRef Name, ModulePassManager &PM,
546-
ArrayRef<PassBuilder::PipelineElement>) {
547-
#define MODULE_CALLBACK(NAME, INVOKE) \
548-
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
549-
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
550-
if (!L) \
551-
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
552-
this->INVOKE(PM, L.get()); \
553-
return true; \
551+
ArrayRef<PassBuilder::PipelineElement>) {
552+
#define MODULE_CALLBACK(NAME, INVOKE) \
553+
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
554+
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
555+
if (!L) \
556+
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
557+
INVOKE(PM, L.get()); \
558+
return true; \
554559
}
555560
#include "PassRegistry.def"
556561
#undef MODULE_CALLBACK
557562
return false;
558563
});
559564

560565
// Module-level callbacks with LTO phase (use Phase::None for string API)
561-
this->registerPipelineParsingCallback(
566+
registerPipelineParsingCallback(
562567
[this, parseLevelParam](StringRef Name, ModulePassManager &PM,
563-
ArrayRef<PassBuilder::PipelineElement>) {
564-
#define MODULE_LTO_CALLBACK(NAME, INVOKE) \
565-
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
566-
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
567-
if (!L) \
568-
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
569-
this->INVOKE(PM, L.get(), ThinOrFullLTOPhase::None); \
570-
return true; \
568+
ArrayRef<PassBuilder::PipelineElement>) {
569+
#define MODULE_LTO_CALLBACK(NAME, INVOKE) \
570+
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
571+
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
572+
if (!L) \
573+
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
574+
INVOKE(PM, L.get(), ThinOrFullLTOPhase::None); \
575+
return true; \
571576
}
572577
#include "PassRegistry.def"
573578
#undef MODULE_LTO_CALLBACK
574579
return false;
575580
});
576581

577582
// Function-level callbacks
578-
this->registerPipelineParsingCallback(
583+
registerPipelineParsingCallback(
579584
[this, parseLevelParam](StringRef Name, FunctionPassManager &PM,
580-
ArrayRef<PassBuilder::PipelineElement>) {
581-
#define FUNCTION_CALLBACK(NAME, INVOKE) \
582-
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
583-
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
584-
if (!L) \
585-
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
586-
this->INVOKE(PM, L.get()); \
587-
return true; \
585+
ArrayRef<PassBuilder::PipelineElement>) {
586+
#define FUNCTION_CALLBACK(NAME, INVOKE) \
587+
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
588+
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
589+
if (!L) \
590+
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
591+
INVOKE(PM, L.get()); \
592+
return true; \
588593
}
589594
#include "PassRegistry.def"
590595
#undef FUNCTION_CALLBACK
591596
return false;
592597
});
593598

594599
// CGSCC-level callbacks
595-
this->registerPipelineParsingCallback(
600+
registerPipelineParsingCallback(
596601
[this, parseLevelParam](StringRef Name, CGSCCPassManager &PM,
597-
ArrayRef<PassBuilder::PipelineElement>) {
598-
#define CGSCC_CALLBACK(NAME, INVOKE) \
599-
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
600-
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
601-
if (!L) \
602-
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
603-
this->INVOKE(PM, L.get()); \
604-
return true; \
602+
ArrayRef<PassBuilder::PipelineElement>) {
603+
#define CGSCC_CALLBACK(NAME, INVOKE) \
604+
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
605+
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
606+
if (!L) \
607+
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
608+
INVOKE(PM, L.get()); \
609+
return true; \
605610
}
606611
#include "PassRegistry.def"
607612
#undef CGSCC_CALLBACK
608613
return false;
609614
});
610615

611616
// Loop-level callbacks
612-
this->registerPipelineParsingCallback(
617+
registerPipelineParsingCallback(
613618
[this, parseLevelParam](StringRef Name, LoopPassManager &PM,
614-
ArrayRef<PassBuilder::PipelineElement>) {
615-
#define LOOP_CALLBACK(NAME, INVOKE) \
616-
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
617-
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
618-
if (!L) \
619-
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
620-
this->INVOKE(PM, L.get()); \
621-
return true; \
619+
ArrayRef<PassBuilder::PipelineElement>) {
620+
#define LOOP_CALLBACK(NAME, INVOKE) \
621+
if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
622+
auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
623+
if (!L) \
624+
return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
625+
INVOKE(PM, L.get()); \
626+
return true; \
622627
}
623628
#include "PassRegistry.def"
624629
#undef LOOP_CALLBACK

llvm/lib/Passes/PassRegistry.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ FUNCTION_PASS_WITH_PARAMS(
725725
return ExpandFpPass(TM, OL);
726726
},
727727
parseExpandFpOptions, "opt-level=N")
728+
728729
#undef FUNCTION_PASS_WITH_PARAMS
729730

730731
#ifndef LOOPNEST_PASS
@@ -819,6 +820,7 @@ MODULE_LTO_CALLBACK("OptimizerLastCallbacks", invokeOptimizerLastEPCallbacks)
819820
FUNCTION_CALLBACK("PeepholeCallbacks", invokePeepholeEPCallbacks)
820821
FUNCTION_CALLBACK("ScalarOptimizerLateCallbacks", invokeScalarOptimizerLateEPCallbacks)
821822
FUNCTION_CALLBACK("VectorizerStartCallbacks", invokeVectorizerStartEPCallbacks)
823+
FUNCTION_CALLBACK("VectorizerEndCallbacks", invokeVectorizerEndEPCallbacks)
822824
#endif
823825

824826
#ifdef LOOP_CALLBACK

llvm/test/Other/pipeline-callbacks-string-api.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-glob -p=VECSTART,VECEND,MODSTART,LTOEARLY,INVALID
1+
22
; RUN: opt -disable-output -print-pipeline-passes \
33
; RUN: -passes-ep-vectorizer-start='no-op-function' \
44
; RUN: -passes='function(VectorizerStartCallbacks<O3>)' < %s 2>&1 | FileCheck %s --check-prefix=VECSTART
@@ -23,5 +23,3 @@ define void @f() {
2323
entry:
2424
ret void
2525
}
26-
27-

0 commit comments

Comments
 (0)