aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Passes/PassBuilder.cpp
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2025-06-30 12:04:42 +0200
committerGitHub <noreply@github.com>2025-06-30 12:04:42 +0200
commitd7a3bdffb9a34da27188368bde45fdd1426f5185 (patch)
treef64d2898c6d2bb14c60fd07d3945309916434de5 /llvm/lib/Passes/PassBuilder.cpp
parentf4128428af0de952c9c5f0e10d8be7512a492986 (diff)
downloadllvm-d7a3bdffb9a34da27188368bde45fdd1426f5185.zip
llvm-d7a3bdffb9a34da27188368bde45fdd1426f5185.tar.gz
llvm-d7a3bdffb9a34da27188368bde45fdd1426f5185.tar.bz2
[PassBuilder][FatLTO] Expose FatLTO pipeline via pipeline string (#146048)
Expose the FatLTO pipeline via `-passes="fatlto-pre-link<Ox>"`, similar to all the other optimization pipelines. This is to allow reproducing it outside clang. (Possibly also useful for C API users.)
Diffstat (limited to 'llvm/lib/Passes/PassBuilder.cpp')
-rw-r--r--llvm/lib/Passes/PassBuilder.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index bb266ac..0697a0a 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -1524,6 +1524,41 @@ Expected<bool> parseVirtRegRewriterPassOptions(StringRef Params) {
return ClearVirtRegs;
}
+struct FatLTOOptions {
+ OptimizationLevel OptLevel;
+ bool ThinLTO = false;
+ bool EmitSummary = false;
+};
+
+Expected<FatLTOOptions> parseFatLTOOptions(StringRef Params) {
+ FatLTOOptions Result;
+ bool HaveOptLevel = false;
+ while (!Params.empty()) {
+ StringRef ParamName;
+ std::tie(ParamName, Params) = Params.split(';');
+
+ if (ParamName == "thinlto") {
+ Result.ThinLTO = true;
+ } else if (ParamName == "emit-summary") {
+ Result.EmitSummary = true;
+ } else if (std::optional<OptimizationLevel> OptLevel =
+ parseOptLevel(ParamName)) {
+ Result.OptLevel = *OptLevel;
+ HaveOptLevel = true;
+ } else {
+ return make_error<StringError>(
+ formatv("invalid fatlto-pre-link pass parameter '{}'", ParamName)
+ .str(),
+ inconvertibleErrorCode());
+ }
+ }
+ if (!HaveOptLevel)
+ return make_error<StringError>(
+ "missing optimization level for fatlto-pre-link pipeline",
+ inconvertibleErrorCode());
+ return Result;
+}
+
} // namespace
/// Tests whether registered callbacks will accept a given pass name.