Skip to content

Commit d0a8abb

Browse files
committed
RequirementMachine: Add -requirement-machine-generic-signatures flag
Just as with the others, this has three values: on, off, and verify. Not hooked up for now.
1 parent 2666449 commit d0a8abb

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,11 +473,11 @@ namespace swift {
473473
/// Enables fine-grained debug output from the requirement machine.
474474
std::string DebugRequirementMachine;
475475

476-
/// Maximum iteration count for requirement machine confluent completion
476+
/// Maximum iteration count for requirement machine Knuth-Bendix completion
477477
/// algorithm.
478478
unsigned RequirementMachineStepLimit = 4000;
479479

480-
/// Maximum term length for requirement machine confluent completion
480+
/// Maximum term length for requirement machine Knuth-Bendix completion
481481
/// algorithm.
482482
unsigned RequirementMachineDepthLimit = 10;
483483

@@ -486,6 +486,10 @@ namespace swift {
486486
RequirementMachineMode RequirementMachineProtocolSignatures =
487487
RequirementMachineMode::Disabled;
488488

489+
/// Enable the new experimental generic signature minimization algorithm.
490+
RequirementMachineMode RequirementMachineGenericSignatures =
491+
RequirementMachineMode::Disabled;
492+
489493
/// Sets the target we are building for and updates platform conditions
490494
/// to match.
491495
///

include/swift/Option/Options.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,10 @@ def requirement_machine_protocol_signatures_EQ : Joined<["-"], "requirement-mach
624624
Flags<[FrontendOption]>,
625625
HelpText<"Control usage of experimental protocol requirement signature minimization: 'on', 'off', or 'verify'">;
626626

627+
def requirement_machine_generic_signatures_EQ : Joined<["-"], "requirement-machine-generic-signatures=">,
628+
Flags<[FrontendOption]>,
629+
HelpText<"Control usage of experimental generic signature minimization: 'on', 'off', or 'verify'">;
630+
627631
def experimental_hermetic_seal_at_link:
628632
Flag<["-"], "experimental-hermetic-seal-at-link">,
629633
Flags<[FrontendOption, HelpHidden]>,

lib/Frontend/CompilerInvocation.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,20 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
859859
A->getAsString(Args), A->getValue());
860860
}
861861

862+
if (auto A = Args.getLastArg(OPT_requirement_machine_generic_signatures_EQ)) {
863+
auto value = llvm::StringSwitch<Optional<RequirementMachineMode>>(A->getValue())
864+
.Case("off", RequirementMachineMode::Disabled)
865+
.Case("on", RequirementMachineMode::Enabled)
866+
.Case("verify", RequirementMachineMode::Verify)
867+
.Default(None);
868+
869+
if (value)
870+
Opts.RequirementMachineGenericSignatures = *value;
871+
else
872+
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
873+
A->getAsString(Args), A->getValue());
874+
}
875+
862876
Opts.DumpRequirementMachine = Args.hasArg(
863877
OPT_dump_requirement_machine);
864878
Opts.AnalyzeRequirementMachine = Args.hasArg(

0 commit comments

Comments
 (0)