From 06df574f2031ac2201a3f0ccbf0ce08cd206a22a Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 20 Jan 2015 08:35:24 +0000 Subject: [PATCH] [PM] Move the LoopInfo analysis pointer into the InstCombiner class along with the other analyses. The most obvious reason why is because eventually I need to separate out the pass layer from the rest of the instcombiner. However, it is also probably a compile time win as every query through the pass manager layer is pretty slow these days. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226550 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/InstCombine/InstCombine.h | 7 ++++++- lib/Transforms/InstCombine/InstructionCombining.cpp | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/Transforms/InstCombine/InstCombine.h b/lib/Transforms/InstCombine/InstCombine.h index 3c3c1355193..e28a29ffe5d 100644 --- a/lib/Transforms/InstCombine/InstCombine.h +++ b/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/lib/Transforms/InstCombine/InstructionCombining.cpp b/lib/Transforms/InstCombine/InstructionCombining.cpp index fb1332a5493..5e9a22ca12e 100644 --- a/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/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(); - 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(); DL = DLP ? &DLP->getDataLayout() : nullptr; DT = &getAnalysis().getDomTree(); + auto *LIWP = getAnalysisIfAvailable(); + LI = LIWP ? &LIWP->getLoopInfo() : nullptr; TLI = &getAnalysis().getTLI(); // Minimizing size?