diff options
author | Nikita Popov <npopov@redhat.com> | 2025-06-30 12:04:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-30 12:04:42 +0200 |
commit | d7a3bdffb9a34da27188368bde45fdd1426f5185 (patch) | |
tree | f64d2898c6d2bb14c60fd07d3945309916434de5 /llvm/lib/Passes/PassBuilder.cpp | |
parent | f4128428af0de952c9c5f0e10d8be7512a492986 (diff) | |
download | llvm-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.cpp | 35 |
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. |