summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO
diff options
context:
space:
mode:
authorClement Courbet <courbet@google.com>2019-09-10 09:18:00 +0000
committerClement Courbet <courbet@google.com>2019-09-10 09:18:00 +0000
commit612c260ec3fe15cd2b661dead1aa8fef34906cf4 (patch)
treebfdaa74eb0d7839c5b541e2818fad1bfd1a60d30 /llvm/lib/Transforms/IPO
parent1da4f47195c2e5e4faaaca265ae2f9d9149b85df (diff)
downloadbcm5719-llvm-612c260ec3fe15cd2b661dead1aa8fef34906cf4.tar.gz
bcm5719-llvm-612c260ec3fe15cd2b661dead1aa8fef34906cf4.zip
Reland "r364412 [ExpandMemCmp][MergeICmps] Move passes out of CodeGen into opt pipeline."
With a fix for sanitizer breakage (see explanation in D60318). llvm-svn: 371502
Diffstat (limited to 'llvm/lib/Transforms/IPO')
-rw-r--r--llvm/lib/Transforms/IPO/PassManagerBuilder.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
index 3ea77f08fd3..d06dadec362 100644
--- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
+++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -246,6 +246,18 @@ void PassManagerBuilder::addInstructionCombiningPass(
PM.add(createInstructionCombiningPass(ExpensiveCombines));
}
+void PassManagerBuilder::addMemcmpPasses(legacy::PassManagerBase &PM) const {
+ if (OptLevel > 0) {
+ // The MergeICmpsPass tries to create memcmp calls by grouping sequences of
+ // loads and compares. ExpandMemCmpPass then tries to expand those calls
+ // into optimally-sized loads and compares. The transforms are enabled by a
+ // target transform info hook.
+ PM.add(createMergeICmpsLegacyPass());
+ PM.add(createExpandMemCmpPass());
+ PM.add(createEarlyCSEPass());
+ }
+}
+
void PassManagerBuilder::populateFunctionPassManager(
legacy::FunctionPassManager &FPM) {
addExtensionsToPM(EP_EarlyAsPossible, FPM);
@@ -409,6 +421,7 @@ void PassManagerBuilder::addFunctionSimplificationPasses(
addExtensionsToPM(EP_ScalarOptimizerLate, MPM);
+ addMemcmpPasses(MPM); // Merge/Expand comparisons.
if (RerollLoops)
MPM.add(createLoopRerollPass());
@@ -910,6 +923,7 @@ void PassManagerBuilder::addLTOOptimizationPasses(legacy::PassManagerBase &PM) {
PM.add(NewGVN ? createNewGVNPass()
: createGVNPass(DisableGVNLoadPRE)); // Remove redundancies.
PM.add(createMemCpyOptPass()); // Remove dead memcpys.
+ addMemcmpPasses(PM); // Merge/Expand comparisons.
// Nuke dead stores.
PM.add(createDeadStoreEliminationPass());
OpenPOWER on IntegriCloud