Skip to content

Commit 328b869

Browse files
committed
Add a SILOption to control whether we should use an aggressive form of
keeping large values indirect
1 parent 432c9d4 commit 328b869

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

include/swift/AST/SILOptions.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@ class SILOptions {
318318
/// for the debugger?
319319
bool ShouldFunctionsBePreservedToDebugger = true;
320320

321+
/// Block expanding and register promotion more aggressively throughout the
322+
/// optimizer.
323+
bool UseAggressiveReg2MemForCodeSize = false;
324+
321325
SILOptions() {}
322326

323327
/// Return a hash code of any components from these options that should

include/swift/Option/FrontendOptions.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,6 +1294,13 @@ def disable_lifetime_dependence_diagnostics :
12941294
Flag<["-"], "disable-lifetime-dependence-diagnostics">,
12951295
HelpText<"Disable lifetime dependence diagnostics for Nonescapable types.">;
12961296

1297+
def enable_aggressive_reg2mem :
1298+
Flag<["-"], "enable-aggressive-reg2mem">,
1299+
HelpText<"Enable a more aggresive reg2mem heuristic">;
1300+
def disable_aggressive_reg2mem :
1301+
Flag<["-"], "disable-aggresive-reg2mem">,
1302+
HelpText<"Disable a more aggresive reg2mem heuristic">;
1303+
12971304
def enable_collocate_metadata_functions :
12981305
Flag<["-"], "enable-collocate-metadata-functions">,
12991306
HelpText<"Enable collocate metadata functions">;

lib/Frontend/CompilerInvocation.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3738,6 +3738,7 @@ bool CompilerInvocation::parseArgs(
37383738
SILOpts.SkipFunctionBodies = FunctionBodySkipping::None;
37393739
SILOpts.CMOMode = CrossModuleOptimizationMode::Everything;
37403740
SILOpts.EmbeddedSwift = true;
3741+
SILOpts.UseAggressiveReg2MemForCodeSize = true;
37413742
// OSSA modules are required for deinit de-virtualization.
37423743
SILOpts.EnableOSSAModules = true;
37433744
// -g is promoted to -gdwarf-types in embedded Swift
@@ -3751,6 +3752,11 @@ bool CompilerInvocation::parseArgs(
37513752
}
37523753
}
37533754

3755+
SILOpts.UseAggressiveReg2MemForCodeSize =
3756+
ParsedArgs.hasFlag(OPT_enable_aggressive_reg2mem,
3757+
OPT_disable_aggressive_reg2mem,
3758+
SILOpts.UseAggressiveReg2MemForCodeSize);
3759+
37543760
// With Swift 6, enable @_spiOnly by default. This also enables proper error
37553761
// reporting of ioi references from spi decls.
37563762
if (LangOpts.EffectiveLanguageVersion.isVersionAtLeast(6)) {

0 commit comments

Comments
 (0)