]> granicus.if.org Git - llvm/commitdiff
[PM] Move the LoopInfo analysis pointer into the InstCombiner class
authorChandler Carruth <chandlerc@gmail.com>
Tue, 20 Jan 2015 08:35:24 +0000 (08:35 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 20 Jan 2015 08:35:24 +0000 (08:35 +0000)
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
lib/Transforms/InstCombine/InstructionCombining.cpp

index 3c3c135519370592fde92bc013d3b73a78a7c234..e28a29ffe5d55ba4e2af7e5ed5cd5a08f6eba6b4 100644 (file)
@@ -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
index fb1332a5493446faf531adfed18137595ca0b4be..5e9a22ca12e11e8f801b625bfd20339f12560d46 100644 (file)
@@ -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?