Merge pull request #40555 from nate-chandler/copy_propagation/rename-disabled-flags

Clarified copy-prop/lexical-lifetime flags.
This commit is contained in:
nate-chandler
2021-12-16 15:28:26 -08:00
committed by GitHub
37 changed files with 244 additions and 115 deletions

View File

@@ -1466,6 +1466,42 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
// -Ounchecked might also set removal of runtime asserts (cond_fail).
Opts.RemoveRuntimeAsserts |= Args.hasArg(OPT_RemoveRuntimeAsserts);
Optional<CopyPropagationOption> specifiedCopyPropagationOption;
if (Arg *A = Args.getLastArg(OPT_copy_propagation_state_EQ)) {
specifiedCopyPropagationOption =
llvm::StringSwitch<Optional<CopyPropagationOption>>(A->getValue())
.Case("true", CopyPropagationOption::On)
.Case("false", CopyPropagationOption::Off)
.Case("requested-passes-only",
CopyPropagationOption::RequestedPassesOnly)
.Default(None);
}
if (Args.hasArg(OPT_enable_copy_propagation)) {
if (specifiedCopyPropagationOption) {
if (*specifiedCopyPropagationOption == CopyPropagationOption::Off) {
// Error if copy propagation has been set to ::Off via the meta-var form
// and enabled via the flag.
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_combination,
"enable-copy-propagation",
"enable-copy-propagation=false");
return true;
} else if (*specifiedCopyPropagationOption ==
CopyPropagationOption::RequestedPassesOnly) {
// Error if copy propagation has been set to ::RequestedPassesOnly via
// the meta-var form and enabled via the flag.
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_combination,
"enable-copy-propagation",
"enable-copy-propagation=requested-passes-only");
return true;
}
} else {
specifiedCopyPropagationOption = CopyPropagationOption::On;
}
}
if (specifiedCopyPropagationOption) {
Opts.CopyPropagation = *specifiedCopyPropagationOption;
}
Optional<bool> enableLexicalBorrowScopesFlag;
if (Arg *A = Args.getLastArg(OPT_enable_lexical_borrow_scopes)) {
enableLexicalBorrowScopesFlag =
@@ -1525,13 +1561,14 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
return true;
}
// -enable-copy-propagation implies -enable-lexical-lifetimes unless
// otherwise specified.
if (Args.hasArg(OPT_enable_copy_propagation))
// Unless overridden below, enabling copy propagation means enabling lexical
// lifetimes.
if (Opts.CopyPropagation == CopyPropagationOption::On)
Opts.LexicalLifetimes = LexicalLifetimesOption::On;
// -disable-copy-propagation implies -enable-lexical-lifetimes=false
if (Args.hasArg(OPT_disable_copy_propagation))
// Unless overridden below, disable copy propagation means disabling lexical
// lifetimes.
if (Opts.CopyPropagation == CopyPropagationOption::Off)
Opts.LexicalLifetimes = LexicalLifetimesOption::DiagnosticMarkersOnly;
// If move-only is enabled, always enable lexical lifetime as well. Move-only
@@ -1554,24 +1591,6 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
}
}
if (Args.hasArg(OPT_enable_copy_propagation) &&
Args.hasArg(OPT_disable_copy_propagation)) {
// Error if copy propagation is enabled and copy propagation is disabled.
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_combination,
"enable-copy-propagation", "disable-copy-propagation");
return true;
} else if (Args.hasArg(OPT_enable_copy_propagation) &&
!Args.hasArg(OPT_disable_copy_propagation)) {
Opts.CopyPropagation = CopyPropagationOption::On;
} else if (!Args.hasArg(OPT_enable_copy_propagation) &&
Args.hasArg(OPT_disable_copy_propagation)) {
Opts.CopyPropagation = CopyPropagationOption::Off;
} else /*if (!Args.hasArg(OPT_enable_copy_propagation) &&
!Args.hasArg(OPT_disable_copy_propagation))*/
{
Opts.CopyPropagation = CopyPropagationOption::RequestedPassesOnly;
}
Opts.EnableARCOptimizations &= !Args.hasArg(OPT_disable_arc_opts);
Opts.EnableOSSAModules |= Args.hasArg(OPT_enable_ossa_modules);
Opts.EnableOSSAOptimizations &= !Args.hasArg(OPT_disable_ossa_opts);