Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 42f6b57

Browse files
committed
Add a CC1 option to enable the Swift function-merging pass
Patch by Linus Nilsson.
1 parent 0789816 commit 42f6b57

File tree

6 files changed

+12
-1
lines changed

6 files changed

+12
-1
lines changed

include/clang/Driver/CC1Options.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,8 @@ def fdump_vtable_layouts : Flag<["-"], "fdump-vtable-layouts">,
217217
HelpText<"Dump the layouts of all vtables that will be emitted in a translation unit">;
218218
def fmerge_functions : Flag<["-"], "fmerge-functions">,
219219
HelpText<"Permit merging of identical functions when optimizing.">;
220+
def fmerge_similar_functions : Flag<["-"], "fmerge-similar-functions">,
221+
HelpText<"Permit merging of similar functions when optimizing.">;
220222
def femit_coverage_notes : Flag<["-"], "femit-coverage-notes">,
221223
HelpText<"Emit a gcov coverage notes file when compiling.">;
222224
def femit_coverage_data: Flag<["-"], "femit-coverage-data">,

include/clang/Frontend/CodeGenOptions.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ CODEGENOPT(IncrementalLinkerCompatible, 1, 0) ///< Emit an object file which can
119119
///< linker.
120120
CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants.
121121
CODEGENOPT(MergeFunctions , 1, 0) ///< Set when -fmerge-functions is enabled.
122+
CODEGENOPT(MergeSimilarFunctions , 1, 0) ///< Set when -fmerge-similar-functions is enabled.
122123
CODEGENOPT(MSVolatile , 1, 0) ///< Set when /volatile:ms is enabled.
123124
CODEGENOPT(NoCommon , 1, 0) ///< Set when -fno-common or C++ is enabled.
124125
CODEGENOPT(NoDwarfDirectoryAsm , 1, 0) ///< Set when -fno-dwarf-directory-asm is

lib/CodeGen/BackendUtil.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@ void EmitAssemblyHelper::CreatePasses(legacy::PassManager &MPM,
535535

536536
PMBuilder.DisableUnrollLoops = !CodeGenOpts.UnrollLoops;
537537
PMBuilder.MergeFunctions = CodeGenOpts.MergeFunctions;
538+
PMBuilder.MergeSimilarFunctions = CodeGenOpts.MergeSimilarFunctions;
538539
PMBuilder.PrepareForThinLTO = CodeGenOpts.PrepareForThinLTO;
539540
PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO;
540541
PMBuilder.RerollLoops = CodeGenOpts.RerollLoops;

lib/Driver/ToolChains/Clang.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3407,6 +3407,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
34073407
options::OPT_fdelete_null_pointer_checks, false))
34083408
CmdArgs.push_back("-fno-delete-null-pointer-checks");
34093409

3410+
if (Args.hasArg(options::OPT_fmerge_similar_functions))
3411+
CmdArgs.push_back("-fmerge-similar-functions");
3412+
3413+
if (Args.hasArg(options::OPT_fmerge_functions))
3414+
CmdArgs.push_back("-fmerge-functions");
3415+
34103416
// LLVM Code Generator Options.
34113417

34123418
if (Args.hasArg(options::OPT_frewrite_map_file) ||

lib/Frontend/CompilerInvocation.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
743743
OPT_fno_unique_section_names, true);
744744

745745
Opts.MergeFunctions = Args.hasArg(OPT_fmerge_functions);
746+
Opts.MergeSimilarFunctions = Args.hasArg(OPT_fmerge_similar_functions);
746747

747748
Opts.NoUseJumpTables = Args.hasArg(OPT_fno_jump_tables);
748749

test/CodeGenCXX/merge-functions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// REQUIRES: x86-registered-target
2-
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -O1 -fmerge-functions -emit-llvm -o - -x c++ < %s | FileCheck %s
2+
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -O1 -fmerge-functions -fmerge-similar-functions -emit-llvm -o - -x c++ < %s | FileCheck %s
33

44
// Basic functionality test. Function merging doesn't kick in on functions that
55
// are too simple.

0 commit comments

Comments
 (0)