summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-06-14 00:49:23 +0000
committerDavide Italiano <davide@freebsd.org>2016-06-14 00:49:23 +0000
commit89ab89d6cd47a0d6a5ad52bf1f737d92ee6fcaeb (patch)
treeedb430e4b17ac30e9eb881d05b4b905649a89d47 /llvm/lib/Transforms
parent50f89da25c83001b0b34bce2e13d40b8389020f7 (diff)
downloadbcm5719-llvm-89ab89d6cd47a0d6a5ad52bf1f737d92ee6fcaeb.tar.gz
bcm5719-llvm-89ab89d6cd47a0d6a5ad52bf1f737d92ee6fcaeb.zip
[PM] Port MergedLoadStoreMotion to the new pass manager.
llvm-svn: 272606
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp109
-rw-r--r--llvm/lib/Transforms/Scalar/Scalar.cpp2
2 files changed, 62 insertions, 49 deletions
diff --git a/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp b/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp
index b7d0d444d29..251650c5539 100644
--- a/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp
+++ b/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp
@@ -72,6 +72,7 @@
//
//===----------------------------------------------------------------------===//
+#include "llvm/Transforms/Scalar/MergedLoadStoreMotion.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/CFG.h"
@@ -96,32 +97,6 @@ using namespace llvm;
// MergedLoadStoreMotion Pass
//===----------------------------------------------------------------------===//
-namespace {
-class MergedLoadStoreMotion : public FunctionPass {
- AliasAnalysis *AA;
- MemoryDependenceResults *MD;
-
-public:
- static char ID; // Pass identification, replacement for typeid
- MergedLoadStoreMotion() : FunctionPass(ID), MD(nullptr) {
- initializeMergedLoadStoreMotionPass(*PassRegistry::getPassRegistry());
- }
-
- bool runOnFunction(Function &F) override;
-
-private:
- // This transformation requires dominator postdominator info
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.setPreservesCFG();
- AU.addRequired<AAResultsWrapperPass>();
- AU.addPreserved<GlobalsAAWrapperPass>();
- AU.addPreserved<MemoryDependenceWrapperPass>();
- }
-};
-
-char MergedLoadStoreMotion::ID = 0;
-} // anonymous namespace
-
// The mergeLoad/Store algorithms could have Size0 * Size1 complexity,
// where Size0 and Size1 are the #instructions on the two sides of
// the diamond. The constant chosen here is arbitrary. Compiler Time
@@ -129,20 +104,6 @@ char MergedLoadStoreMotion::ID = 0;
const int MagicCompileTimeControl = 250;
///
-/// \brief createMergedLoadStoreMotionPass - The public interface to this file.
-///
-FunctionPass *llvm::createMergedLoadStoreMotionPass() {
- return new MergedLoadStoreMotion();
-}
-
-INITIALIZE_PASS_BEGIN(MergedLoadStoreMotion, "mldst-motion",
- "MergedLoadStoreMotion", false, false)
-INITIALIZE_PASS_DEPENDENCY(MemoryDependenceWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
-INITIALIZE_PASS_END(MergedLoadStoreMotion, "mldst-motion",
- "MergedLoadStoreMotion", false, false)
-
-///
/// \brief Remove instruction from parent and update memory dependence analysis.
///
static void removeInstruction(Instruction *Inst, MemoryDependenceResults *MD) {
@@ -533,14 +494,8 @@ static bool mergeStores(BasicBlock *T, AliasAnalysis *AA,
///
/// \brief Run the transformation for each function
///
-bool MergedLoadStoreMotion::runOnFunction(Function &F) {
- if (skipFunction(F))
- return false;
-
- auto *MDWP = getAnalysisIfAvailable<MemoryDependenceWrapperPass>();
- MD = MDWP ? &MDWP->getMemDep() : nullptr;
- AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
-
+static bool runMergedLoadStoreMotion(Function &F, AliasAnalysis *AA,
+ MemoryDependenceResults *MD) {
bool Changed = false;
DEBUG(dbgs() << "Instruction Merger\n");
@@ -558,3 +513,61 @@ bool MergedLoadStoreMotion::runOnFunction(Function &F) {
}
return Changed;
}
+
+PreservedAnalyses
+MergedLoadStoreMotionPass::run(Function &F, AnalysisManager<Function> &AM) {
+ auto &AA = AM.getResult<AAManager>(F);
+ auto *MD = AM.getCachedResult<MemoryDependenceAnalysis>(F);
+ if (!runMergedLoadStoreMotion(F, &AA, MD))
+ return PreservedAnalyses::all();
+ return PreservedAnalyses::none();
+}
+
+namespace {
+class MergedLoadStoreMotionLegacyPass : public FunctionPass {
+ AliasAnalysis *AA;
+ MemoryDependenceResults *MD;
+
+public:
+ static char ID; // Pass identification, replacement for typeid
+ MergedLoadStoreMotionLegacyPass() : FunctionPass(ID), MD(nullptr) {
+ initializeMergedLoadStoreMotionLegacyPassPass(
+ *PassRegistry::getPassRegistry());
+ }
+
+ bool runOnFunction(Function &F) override {
+ if (skipFunction(F))
+ return false;
+
+ AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
+ auto *MDWP = getAnalysisIfAvailable<MemoryDependenceWrapperPass>();
+ MD = MDWP ? &MDWP->getMemDep() : nullptr;
+ return runMergedLoadStoreMotion(F, AA, MD);
+ }
+
+private:
+ // This transformation requires dominator postdominator info
+ void getAnalysisUsage(AnalysisUsage &AU) const override {
+ AU.setPreservesCFG();
+ AU.addRequired<AAResultsWrapperPass>();
+ AU.addPreserved<GlobalsAAWrapperPass>();
+ AU.addPreserved<MemoryDependenceWrapperPass>();
+ }
+};
+
+char MergedLoadStoreMotionLegacyPass::ID = 0;
+} // anonymous namespace
+
+///
+/// \brief createMergedLoadStoreMotionPass - The public interface to this file.
+///
+FunctionPass *llvm::createMergedLoadStoreMotionPass() {
+ return new MergedLoadStoreMotionLegacyPass();
+}
+
+INITIALIZE_PASS_BEGIN(MergedLoadStoreMotionLegacyPass, "mldst-motion",
+ "MergedLoadStoreMotion", false, false)
+INITIALIZE_PASS_DEPENDENCY(MemoryDependenceWrapperPass)
+INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
+INITIALIZE_PASS_END(MergedLoadStoreMotionLegacyPass, "mldst-motion",
+ "MergedLoadStoreMotion", false, false)
diff --git a/llvm/lib/Transforms/Scalar/Scalar.cpp b/llvm/lib/Transforms/Scalar/Scalar.cpp
index 2be220be9e2..2bda6f51148 100644
--- a/llvm/lib/Transforms/Scalar/Scalar.cpp
+++ b/llvm/lib/Transforms/Scalar/Scalar.cpp
@@ -65,7 +65,7 @@ void llvm::initializeScalarOpts(PassRegistry &Registry) {
initializeLowerExpectIntrinsicPass(Registry);
initializeLowerGuardIntrinsicPass(Registry);
initializeMemCpyOptPass(Registry);
- initializeMergedLoadStoreMotionPass(Registry);
+ initializeMergedLoadStoreMotionLegacyPassPass(Registry);
initializeNaryReassociatePass(Registry);
initializePartiallyInlineLibCallsLegacyPassPass(Registry);
initializeReassociateLegacyPassPass(Registry);
OpenPOWER on IntegriCloud