diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp index ebf7070c5aa15..6af69e823d405 100644 --- a/llvm/lib/Analysis/AliasAnalysis.cpp +++ b/llvm/lib/Analysis/AliasAnalysis.cpp @@ -67,6 +67,13 @@ STATISTIC(NumMustAlias, "Number of MustAlias results"); /// when testing to isolate a single AA implementation. cl::opt DisableBasicAA("disable-basic-aa", cl::Hidden, cl::init(false)); +#ifndef NDEBUG +/// Print a trace of alias analysis queries and their results. +static cl::opt 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;