diff options
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombine.h | 7 | ||||
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstructionCombining.cpp | 6 |
2 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombine.h b/llvm/lib/Transforms/InstCombine/InstCombine.h index 3c3c1355193..e28a29ffe5d 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombine.h +++ b/llvm/lib/Transforms/InstCombine/InstCombine.h @@ -12,6 +12,7 @@ #include "InstCombineWorklist.h" #include "llvm/Analysis/AssumptionCache.h" +#include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/TargetFolder.h" #include "llvm/Analysis/ValueTracking.h" #include "llvm/IR/Dominators.h" @@ -100,6 +101,7 @@ class LLVM_LIBRARY_VISIBILITY InstCombiner const DataLayout *DL; TargetLibraryInfo *TLI; DominatorTree *DT; + LoopInfo *LI; bool MadeIRChange; LibCallSimplifier *Simplifier; bool MinimizeSize; @@ -115,7 +117,8 @@ public: static char ID; // Pass identification, replacement for typeid InstCombiner() - : FunctionPass(ID), DL(nullptr), DT(nullptr), Builder(nullptr) { + : FunctionPass(ID), DL(nullptr), DT(nullptr), LI(nullptr), + Builder(nullptr) { MinimizeSize = false; initializeInstCombinerPass(*PassRegistry::getPassRegistry()); } @@ -133,6 +136,8 @@ public: DominatorTree *getDominatorTree() const { return DT; } + LoopInfo *getLoopInfo() const { return LI; } + TargetLibraryInfo *getTargetLibraryInfo() const { return TLI; } // Visitation implementation - Implement instruction combining for different diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index fb1332a5493..5e9a22ca12e 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -799,9 +799,7 @@ Instruction *InstCombiner::FoldOpIntoPhi(Instruction &I) { // If the incoming non-constant value is in I's block, we will remove one // instruction, but insert another equivalent one, leading to infinite // instcombine. - auto *LIWP = getAnalysisIfAvailable<LoopInfoWrapperPass>(); - if (isPotentiallyReachable(I.getParent(), NonConstBB, DT, - LIWP ? &LIWP->getLoopInfo() : nullptr)) + if (isPotentiallyReachable(I.getParent(), NonConstBB, DT, LI)) return nullptr; } @@ -2975,6 +2973,8 @@ bool InstCombiner::runOnFunction(Function &F) { DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>(); DL = DLP ? &DLP->getDataLayout() : nullptr; DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); + auto *LIWP = getAnalysisIfAvailable<LoopInfoWrapperPass>(); + LI = LIWP ? &LIWP->getLoopInfo() : nullptr; TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(); // Minimizing size? |