Support Package CMO

* Add a new flag -experimental-package-cmo that requires -experimental-allow-non-resilient-access.
* Support serializing package decls for CMO in package if enabled.
* Only applies to default mode CMO.
* Unlike the existing CMO, package CMO can be built with -enable-library-evolution as package
modules are required to be built together in the same project.
* Create hasPublicOrPackageVisibility to opt in for package decls; needed for CMO, SILVerifier,
and other call sites that verify or determine codegen.

Resolves rdar://121976014
This commit is contained in:
Ellie Shin
2024-03-06 20:46:22 -08:00
parent 8df1abe111
commit a3250e426d
14 changed files with 325 additions and 21 deletions

View File

@@ -2335,6 +2335,18 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
} else if (Args.hasArg(OPT_EnbaleCMOEverything)) {
Opts.CMOMode = CrossModuleOptimizationMode::Everything;
}
if (Args.hasArg(OPT_ExperimentalPackageCMO)) {
if (!FEOpts.AllowNonResilientAccess) {
Diags.diagnose(SourceLoc(), diag::ignoring_option_requires_option,
"-experimental-package-cmo",
"-experimental-allow-non-resilient-access");
} else {
Opts.EnableSerializePackage = true;
Opts.CMOMode = CrossModuleOptimizationMode::Default;
}
}
Opts.EnableStackProtection =
Args.hasFlag(OPT_enable_stack_protector, OPT_disable_stack_protector,
Opts.EnableStackProtection);