diff options
author | Sean Silva <chisophugis@gmail.com> | 2016-07-06 23:26:29 +0000 |
---|---|---|
committer | Sean Silva <chisophugis@gmail.com> | 2016-07-06 23:26:29 +0000 |
commit | b025d375a154a9faf1d27f0d281fd92c91d34a65 (patch) | |
tree | 16a4cf0220b1fc549c1b51ebfb6c494490ae2ddd /llvm/lib/Transforms | |
parent | 384d376545a0eeaddebb42581be1de0fbf0b1c49 (diff) | |
download | bcm5719-llvm-b025d375a154a9faf1d27f0d281fd92c91d34a65.tar.gz bcm5719-llvm-b025d375a154a9faf1d27f0d281fd92c91d34a65.zip |
[PM] Port CorrelatedValuePropagation
llvm-svn: 274705
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index b7944a34579..c09f3534dcf 100644 --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Transforms/Scalar/CorrelatedValuePropagation.h" #include "llvm/Transforms/Scalar.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/GlobalsModRef.h" @@ -39,7 +40,6 @@ STATISTIC(NumSDivs, "Number of sdiv converted to udiv"); namespace { class CorrelatedValuePropagation : public FunctionPass { - LazyValueInfo *LVI; public: static char ID; CorrelatedValuePropagation(): FunctionPass(ID) { @@ -384,12 +384,7 @@ static Constant *getConstantAt(Value *V, Instruction *At, LazyValueInfo *LVI) { ConstantInt::getFalse(C->getContext()); } -bool CorrelatedValuePropagation::runOnFunction(Function &F) { - if (skipFunction(F)) - return false; - - LVI = &getAnalysis<LazyValueInfoWrapperPass>().getLVI(); - +static bool runImpl(Function &F, LazyValueInfo *LVI) { bool FnChanged = false; for (BasicBlock &BB : F) { @@ -447,3 +442,28 @@ bool CorrelatedValuePropagation::runOnFunction(Function &F) { return FnChanged; } + +bool CorrelatedValuePropagation::runOnFunction(Function &F) { + if (skipFunction(F)) + return false; + + LazyValueInfo *LVI = &getAnalysis<LazyValueInfoWrapperPass>().getLVI(); + return runImpl(F, LVI); +} + +PreservedAnalyses +CorrelatedValuePropagationPass::run(Function &F, FunctionAnalysisManager &AM) { + + LazyValueInfo *LVI = &AM.getResult<LazyValueAnalysis>(F); + bool Changed = runImpl(F, LVI); + + // FIXME: We need to invalidate LVI to avoid PR28400. Is there a better + // solution? + AM.invalidate<LazyValueAnalysis>(F); + + if (!Changed) + return PreservedAnalyses::all(); + PreservedAnalyses PA; + PA.preserve<GlobalsAA>(); + return PA; +} |