Skip to content

Commit 5e2144b

Browse files
committed
Large loadable types peepholes and address assignment
Contract some load store patterns and assign addresses to (non-address) SIL SSA values. rdar://115571407
1 parent ccdcf6f commit 5e2144b

7 files changed

+1427
-2
lines changed

include/swift/AST/IRGenOptions.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,9 @@ class IRGenOptions {
404404
/// using TypeInfo entries.
405405
unsigned ForceStructTypeLayouts : 1;
406406

407+
/// Run a reg2Mem pass after large loadable type lowering.
408+
unsigned EnableLargeLoadableTypesReg2Mem : 1;
409+
407410
/// Enable generation and use of layout string based value witnesses
408411
unsigned EnableLayoutStringValueWitnesses : 1;
409412

@@ -537,6 +540,7 @@ class IRGenOptions {
537540
CompactAbsoluteFunctionPointer(false), DisableLegacyTypeInfo(false),
538541
PrespecializeGenericMetadata(false), UseIncrementalLLVMCodeGen(true),
539542
UseTypeLayoutValueHandling(true), ForceStructTypeLayouts(false),
543+
EnableLargeLoadableTypesReg2Mem(true),
540544
EnableLayoutStringValueWitnesses(false),
541545
EnableLayoutStringValueWitnessesInstantiation(false),
542546
EnableObjectiveCProtocolSymbolicReferences(true),

include/swift/Option/FrontendOptions.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,12 @@ def force_struct_type_layouts : Flag<["-"], "force-struct-type-layouts">,
10701070
def enable_layout_string_value_witnesses : Flag<["-"], "enable-layout-string-value-witnesses">,
10711071
HelpText<"Enable layout string based value witnesses">;
10721072

1073+
def enable_large_loadable_types_reg2mem : Flag<["-"], "enable-large-loadable-types-reg2mem">,
1074+
HelpText<"Enable large loadable types register to memory pass">;
1075+
1076+
def disable_large_loadable_types_reg2mem : Flag<["-"], "disable-large-loadable-types-reg2mem">,
1077+
HelpText<"Disable large loadable types register to memory pass">;
1078+
10731079
let Flags = [FrontendOption, NoDriverOption, HelpHidden, ModuleInterfaceOptionIgnorable] in {
10741080
def enable_pack_metadata_stack_promotion :
10751081
Joined<["-"], "enable-pack-metadata-stack-promotion=">,

lib/Frontend/CompilerInvocation.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3009,7 +3009,10 @@ static bool ParseIRGenArgs(IRGenOptions &Opts, ArgList &Args,
30093009
Args.hasFlag(OPT_enable_relative_protocol_witness_tables,
30103010
OPT_disable_relative_protocol_witness_tables,
30113011
Opts.UseRelativeProtocolWitnessTables);
3012-
3012+
Opts.EnableLargeLoadableTypesReg2Mem =
3013+
Args.hasFlag(OPT_enable_large_loadable_types_reg2mem,
3014+
OPT_disable_large_loadable_types_reg2mem,
3015+
Opts.EnableLargeLoadableTypesReg2Mem);
30133016
Opts.EnableLayoutStringValueWitnesses = Args.hasFlag(OPT_enable_layout_string_value_witnesses,
30143017
OPT_disable_layout_string_value_witnesses,
30153018
Opts.EnableLayoutStringValueWitnesses);

0 commit comments

Comments
 (0)