[PATCH] D93002: [NPM] Support -fmerge-functions
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 10 11:40:00 PST 2020
aeubanks updated this revision to Diff 310969.
aeubanks added a comment.
move -O0 MergeFunctions after inlining
add to LTO pipeline (matches legacy PM)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D93002/new/
https://reviews.llvm.org/D93002
Files:
clang/lib/CodeGen/BackendUtil.cpp
clang/test/CodeGenCXX/merge-functions.cpp
llvm/include/llvm/Passes/PassBuilder.h
llvm/lib/Passes/PassBuilder.cpp
Index: llvm/lib/Passes/PassBuilder.cpp
===================================================================
--- llvm/lib/Passes/PassBuilder.cpp
+++ llvm/lib/Passes/PassBuilder.cpp
@@ -282,6 +282,7 @@
LicmMssaOptCap = SetLicmMssaOptCap;
LicmMssaNoAccForPromotionCap = SetLicmMssaNoAccForPromotionCap;
CallGraphProfile = true;
+ MergeFunctions = false;
}
extern cl::opt<bool> EnableConstraintElimination;
@@ -1316,6 +1317,10 @@
if (EnableHotColdSplit && !LTOPreLink)
MPM.addPass(HotColdSplittingPass());
+ // Merge functions if requested.
+ if (PTO.MergeFunctions)
+ MPM.addPass(MergeFunctionsPass());
+
// LoopSink pass sinks instructions hoisted by LICM, which serves as a
// canonicalization pass that enables other optimizations. As a result,
// LoopSink pass needs to be a very late IR pass to avoid undoing LICM
@@ -1746,10 +1751,12 @@
// Now that we have optimized the program, discard unreachable functions.
MPM.addPass(GlobalDCEPass());
+ if (PTO.MergeFunctions)
+ MPM.addPass(MergeFunctionsPass());
+
// Emit annotation remarks.
addAnnotationRemarksPass(MPM);
- // FIXME: Maybe enable MergeFuncs conditionally after it's ported.
return MPM;
}
@@ -1781,6 +1788,9 @@
MPM.addPass(AlwaysInlinerPass(
/*InsertLifetimeIntrinsics=*/PTO.Coroutines));
+ if (PTO.MergeFunctions)
+ MPM.addPass(MergeFunctionsPass());
+
if (EnableMatrix)
MPM.addPass(
createModuleToFunctionPassAdaptor(LowerMatrixIntrinsicsPass(true)));
Index: llvm/include/llvm/Passes/PassBuilder.h
===================================================================
--- llvm/include/llvm/Passes/PassBuilder.h
+++ llvm/include/llvm/Passes/PassBuilder.h
@@ -123,6 +123,10 @@
/// Tuning option to enable/disable call graph profile. Its default value is
/// that of the flag: `-enable-npm-call-graph-profile`.
bool CallGraphProfile;
+
+ /// Tuning option to enable/disable function merging. Its default value is
+ /// false.
+ bool MergeFunctions;
};
/// This class provides access to building LLVM's passes.
Index: clang/test/CodeGenCXX/merge-functions.cpp
===================================================================
--- clang/test/CodeGenCXX/merge-functions.cpp
+++ clang/test/CodeGenCXX/merge-functions.cpp
@@ -1,5 +1,8 @@
// REQUIRES: x86-registered-target
+// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -O0 -fno-experimental-new-pass-manager -fmerge-functions -emit-llvm -o - -x c++ < %s | FileCheck %s -implicit-check-not=_ZN1A1gEiPi
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -O1 -fno-experimental-new-pass-manager -fmerge-functions -emit-llvm -o - -x c++ < %s | FileCheck %s -implicit-check-not=_ZN1A1gEiPi
+// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -O0 -fexperimental-new-pass-manager -fmerge-functions -emit-llvm -o - -x c++ < %s | FileCheck %s -implicit-check-not=_ZN1A1gEiPi
+// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -O1 -fexperimental-new-pass-manager -fmerge-functions -emit-llvm -o - -x c++ < %s | FileCheck %s -implicit-check-not=_ZN1A1gEiPi
// Basic functionality test. Function merging doesn't kick in on functions that
// are too simple.
Index: clang/lib/CodeGen/BackendUtil.cpp
===================================================================
--- clang/lib/CodeGen/BackendUtil.cpp
+++ clang/lib/CodeGen/BackendUtil.cpp
@@ -1139,6 +1139,7 @@
PTO.LoopInterleaving = CodeGenOpts.UnrollLoops;
PTO.LoopVectorization = CodeGenOpts.VectorizeLoop;
PTO.SLPVectorization = CodeGenOpts.VectorizeSLP;
+ PTO.MergeFunctions = CodeGenOpts.MergeFunctions;
// Only enable CGProfilePass when using integrated assembler, since
// non-integrated assemblers don't recognize .cgprofile section.
PTO.CallGraphProfile = !CodeGenOpts.DisableIntegratedAS;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D93002.310969.patch
Type: text/x-patch
Size: 3775 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201210/14717e85/attachment.bin>
More information about the llvm-commits
mailing list