@@ -2203,6 +2203,22 @@ void parseExclusivityEnforcementOptions(const llvm::opt::Arg *A,
22032203 }
22042204}
22052205
2206+ static std::optional<IRGenLLVMLTOKind>
2207+ ParseLLVMLTOKind (const ArgList &Args, DiagnosticEngine &Diags) {
2208+ std::optional<IRGenLLVMLTOKind> LLVMLTOKind;
2209+ if (const Arg *A = Args.getLastArg (options::OPT_lto)) {
2210+ LLVMLTOKind =
2211+ llvm::StringSwitch<std::optional<IRGenLLVMLTOKind>>(A->getValue ())
2212+ .Case (" llvm-thin" , IRGenLLVMLTOKind::Thin)
2213+ .Case (" llvm-full" , IRGenLLVMLTOKind::Full)
2214+ .Default (std::nullopt );
2215+ if (!LLVMLTOKind)
2216+ Diags.diagnose (SourceLoc (), diag::error_invalid_arg_value,
2217+ A->getAsString (Args), A->getValue ());
2218+ }
2219+ return LLVMLTOKind;
2220+ }
2221+
22062222static bool ParseSILArgs (SILOptions &Opts, ArgList &Args,
22072223 IRGenOptions &IRGenOpts, const FrontendOptions &FEOpts,
22082224 const TypeCheckerOptions &TCOpts,
@@ -2603,6 +2619,16 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
26032619 Opts.EnableExperimentalSwiftBasedClosureSpecialization =
26042620 Args.hasArg (OPT_enable_experimental_swift_based_closure_specialization);
26052621
2622+ // If these optimizations are enabled never preserve functions for the
2623+ // debugger.
2624+ Opts.ShouldFunctionsBePreservedToDebugger =
2625+ !Args.hasArg (OPT_enable_llvm_wme);
2626+ Opts.ShouldFunctionsBePreservedToDebugger &=
2627+ !Args.hasArg (OPT_enable_llvm_vfe);
2628+ if (auto LTOKind = ParseLLVMLTOKind (Args, Diags))
2629+ Opts.ShouldFunctionsBePreservedToDebugger &=
2630+ LTOKind.value () == IRGenLLVMLTOKind::None;
2631+
26062632 return false ;
26072633}
26082634
@@ -2949,18 +2975,8 @@ static bool ParseIRGenArgs(IRGenOptions &Opts, ArgList &Args,
29492975 }
29502976 }
29512977
2952- if (const Arg *A = Args.getLastArg (options::OPT_lto)) {
2953- auto LLVMLTOKind =
2954- llvm::StringSwitch<std::optional<IRGenLLVMLTOKind>>(A->getValue ())
2955- .Case (" llvm-thin" , IRGenLLVMLTOKind::Thin)
2956- .Case (" llvm-full" , IRGenLLVMLTOKind::Full)
2957- .Default (std::nullopt );
2958- if (LLVMLTOKind)
2959- Opts.LLVMLTOKind = LLVMLTOKind.value ();
2960- else
2961- Diags.diagnose (SourceLoc (), diag::error_invalid_arg_value,
2962- A->getAsString (Args), A->getValue ());
2963- }
2978+ if (auto LTOKind = ParseLLVMLTOKind (Args, Diags))
2979+ Opts.LLVMLTOKind = LTOKind.value ();
29642980
29652981 if (const Arg *A = Args.getLastArg (options::OPT_sanitize_coverage_EQ)) {
29662982 Opts.SanitizeCoverage =
0 commit comments