BasicAA: Move BasicAAResult::alias out-of-line. NFC
authorJustin Bogner <mail@justinbogner.com>
Thu, 24 Sep 2015 04:59:24 +0000 (04:59 +0000)
committerJustin Bogner <mail@justinbogner.com>
Thu, 24 Sep 2015 04:59:24 +0000 (04:59 +0000)
This makes the header more readable and cleans up some unnecessary
header differences between NDEBUG and !NDEBUG.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248462 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/BasicAliasAnalysis.h
lib/Analysis/BasicAliasAnalysis.cpp

index 06f3e4a4bcf96f79b4ae667179698da1ea82d3f3..fe0dbc487438abed93307275516c7c3d90cac8f5 100644 (file)
@@ -44,26 +44,6 @@ class BasicAAResult : public AAResultBase<BasicAAResult> {
   DominatorTree *DT;
   LoopInfo *LI;
 
-#ifndef NDEBUG
-  static const Function *getParent(const Value *V) {
-    if (const Instruction *inst = dyn_cast<Instruction>(V))
-      return inst->getParent()->getParent();
-
-    if (const Argument *arg = dyn_cast<Argument>(V))
-      return arg->getParent();
-
-    return nullptr;
-  }
-
-  static bool notDifferentParent(const Value *O1, const Value *O2) {
-
-    const Function *F1 = getParent(O1);
-    const Function *F2 = getParent(O2);
-
-    return !F1 || !F2 || F1 == F2;
-  }
-#endif
-
 public:
   BasicAAResult(const DataLayout &DL, const TargetLibraryInfo &TLI,
                 AssumptionCache &AC, DominatorTree *DT = nullptr,
@@ -81,27 +61,7 @@ public:
   /// By definition, this result is stateless and so remains valid.
   bool invalidate(Function &, const PreservedAnalyses &) { return false; }
 
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {
-    assert(notDifferentParent(LocA.Ptr, LocB.Ptr) &&
-           "BasicAliasAnalysis doesn't support interprocedural queries.");
-
-    // If we have a directly cached entry for these locations, we have recursed
-    // through this once, so just return the cached results. Notably, when this
-    // happens, we don't clear the cache.
-    auto CacheIt = AliasCache.find(LocPair(LocA, LocB));
-    if (CacheIt != AliasCache.end())
-      return CacheIt->second;
-
-    AliasResult Alias = aliasCheck(LocA.Ptr, LocA.Size, LocA.AATags, LocB.Ptr,
-                                   LocB.Size, LocB.AATags);
-    // AliasCache rarely has more than 1 or 2 elements, always use
-    // shrink_and_clear so it quickly returns to the inline capacity of the
-    // SmallDenseMap if it ever grows larger.
-    // FIXME: This should really be shrink_to_inline_capacity_and_clear().
-    AliasCache.shrink_and_clear();
-    VisitedPhiBBs.clear();
-    return Alias;
-  }
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
 
   ModRefInfo getModRefInfo(ImmutableCallSite CS, const MemoryLocation &Loc);
 
index 04e6d98b5fb59de8bd82e4be8a923edd86641ad0..2e927ed7816765dab7205c087fb21db3ff8ad29c 100644 (file)
@@ -627,6 +627,47 @@ static bool isAssumeIntrinsic(ImmutableCallSite CS) {
   return false;
 }
 
+static const Function *getParent(const Value *V) {
+  if (const Instruction *inst = dyn_cast<Instruction>(V))
+    return inst->getParent()->getParent();
+
+  if (const Argument *arg = dyn_cast<Argument>(V))
+    return arg->getParent();
+
+  return nullptr;
+}
+
+static bool notDifferentParent(const Value *O1, const Value *O2) {
+
+  const Function *F1 = getParent(O1);
+  const Function *F2 = getParent(O2);
+
+  return !F1 || !F2 || F1 == F2;
+}
+
+AliasResult BasicAAResult::alias(const MemoryLocation &LocA,
+                                 const MemoryLocation &LocB) {
+  assert(notDifferentParent(LocA.Ptr, LocB.Ptr) &&
+         "BasicAliasAnalysis doesn't support interprocedural queries.");
+
+  // If we have a directly cached entry for these locations, we have recursed
+  // through this once, so just return the cached results. Notably, when this
+  // happens, we don't clear the cache.
+  auto CacheIt = AliasCache.find(LocPair(LocA, LocB));
+  if (CacheIt != AliasCache.end())
+    return CacheIt->second;
+
+  AliasResult Alias = aliasCheck(LocA.Ptr, LocA.Size, LocA.AATags, LocB.Ptr,
+                                 LocB.Size, LocB.AATags);
+  // AliasCache rarely has more than 1 or 2 elements, always use
+  // shrink_and_clear so it quickly returns to the inline capacity of the
+  // SmallDenseMap if it ever grows larger.
+  // FIXME: This should really be shrink_to_inline_capacity_and_clear().
+  AliasCache.shrink_and_clear();
+  VisitedPhiBBs.clear();
+  return Alias;
+}
+
 /// Checks to see if the specified callsite can clobber the specified memory
 /// object.
 ///