[AA] Add option for tracing AA queries (NFC)
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 12 Feb 2021 15:00:24 +0000 (16:00 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 12 Feb 2021 20:42:49 +0000 (21:42 +0100)
Add an -aa-trace debug option that can be used to print AA queries,
including any recursive queries and their results.

llvm/lib/Analysis/AliasAnalysis.cpp

index ebf7070..6af69e8 100644 (file)
@@ -67,6 +67,13 @@ STATISTIC(NumMustAlias, "Number of MustAlias results");
 /// when testing to isolate a single AA implementation.
 cl::opt<bool> DisableBasicAA("disable-basic-aa", cl::Hidden, cl::init(false));
 
+#ifndef NDEBUG
+/// Print a trace of alias analysis queries and their results.
+static cl::opt<bool> EnableAATrace("aa-trace", cl::Hidden, cl::init(false));
+#else
+static const bool EnableAATrace = false;
+#endif
+
 AAResults::AAResults(AAResults &&Arg)
     : TLI(Arg.TLI), AAs(std::move(Arg.AAs)), AADeps(std::move(Arg.AADeps)) {
   for (auto &AA : AAs)
@@ -118,6 +125,13 @@ AliasResult AAResults::alias(const MemoryLocation &LocA,
                              const MemoryLocation &LocB, AAQueryInfo &AAQI) {
   AliasResult Result = MayAlias;
 
+  if (EnableAATrace) {
+    for (unsigned I = 0; I < AAQI.Depth; ++I)
+      dbgs() << "  ";
+    dbgs() << "Start " << *LocA.Ptr << " @ " << LocA.Size << ", "
+           << *LocB.Ptr << " @ " << LocB.Size << "\n";
+  }
+
   AAQI.Depth++;
   for (const auto &AA : AAs) {
     Result = AA->alias(LocA, LocB, AAQI);
@@ -126,6 +140,13 @@ AliasResult AAResults::alias(const MemoryLocation &LocA,
   }
   AAQI.Depth--;
 
+  if (EnableAATrace) {
+    for (unsigned I = 0; I < AAQI.Depth; ++I)
+      dbgs() << "  ";
+    dbgs() << "End " << *LocA.Ptr << " @ " << LocA.Size << ", "
+           << *LocB.Ptr << " @ " << LocB.Size << " = " << Result << "\n";
+  }
+
   if (AAQI.Depth == 0) {
     if (Result == NoAlias)
       ++NumNoAlias;