diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2015-08-14 02:12:12 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2015-08-14 02:12:12 +0000 |
commit | 1b179e1102210c2a93778874b975b8737c7ea6d2 (patch) | |
tree | cba7872a4a2498694caba70f6573e9de2daeddfd /llvm/lib/Analysis | |
parent | fafee839d91426b4b4f06da24245565471a71003 (diff) | |
download | bcm5719-llvm-1b179e1102210c2a93778874b975b8737c7ea6d2.tar.gz bcm5719-llvm-1b179e1102210c2a93778874b975b8737c7ea6d2.zip |
[PM/AA] Sink all the actual code from AliasAnalysisCounter back into the
.cpp file to make the header much less noisy.
Also makes it easy to use a static helper rather than a public method
for printing lines of stats.
llvm-svn: 245006
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r-- | llvm/lib/Analysis/AliasAnalysisCounter.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/AliasAnalysisCounter.cpp b/llvm/lib/Analysis/AliasAnalysisCounter.cpp index 46437849c77..e369c31d237 100644 --- a/llvm/lib/Analysis/AliasAnalysisCounter.cpp +++ b/llvm/lib/Analysis/AliasAnalysisCounter.cpp @@ -35,6 +35,65 @@ ModulePass *llvm::createAliasAnalysisCounterPass() { return new AliasAnalysisCounter(); } +AliasAnalysisCounter::AliasAnalysisCounter() : ModulePass(ID) { + initializeAliasAnalysisCounterPass(*PassRegistry::getPassRegistry()); + No = May = Partial = Must = 0; + NoMR = JustRef = JustMod = MR = 0; +} + +static void printLine(const char *Desc, unsigned Val, unsigned Sum) { + errs() << " " << Val << " " << Desc << " responses (" << Val * 100 / Sum + << "%)\n"; +} + +AliasAnalysisCounter::~AliasAnalysisCounter() { + unsigned AASum = No + May + Partial + Must; + unsigned MRSum = NoMR + JustRef + JustMod + MR; + if (AASum + MRSum) { // Print a report if any counted queries occurred... + errs() << "\n===== Alias Analysis Counter Report =====\n" + << " Analysis counted:\n" + << " " << AASum << " Total Alias Queries Performed\n"; + if (AASum) { + printLine("no alias", No, AASum); + printLine("may alias", May, AASum); + printLine("partial alias", Partial, AASum); + printLine("must alias", Must, AASum); + errs() << " Alias Analysis Counter Summary: " << No * 100 / AASum << "%/" + << May * 100 / AASum << "%/" << Partial * 100 / AASum << "%/" + << Must * 100 / AASum << "%\n\n"; + } + + errs() << " " << MRSum << " Total MRI_Mod/MRI_Ref Queries Performed\n"; + if (MRSum) { + printLine("no mod/ref", NoMR, MRSum); + printLine("ref", JustRef, MRSum); + printLine("mod", JustMod, MRSum); + printLine("mod/ref", MR, MRSum); + errs() << " MRI_Mod/MRI_Ref Analysis Counter Summary: " + << NoMR * 100 / MRSum << "%/" << JustRef * 100 / MRSum << "%/" + << JustMod * 100 / MRSum << "%/" << MR * 100 / MRSum << "%\n\n"; + } + } +} + +bool AliasAnalysisCounter::runOnModule(Module &M) { + this->M = &M; + InitializeAliasAnalysis(this, &M.getDataLayout()); + return false; +} + +void AliasAnalysisCounter::getAnalysisUsage(AnalysisUsage &AU) const { + AliasAnalysis::getAnalysisUsage(AU); + AU.addRequired<AliasAnalysis>(); + AU.setPreservesAll(); +} + +void *AliasAnalysisCounter::getAdjustedAnalysisPointer(AnalysisID PI) { + if (PI == &AliasAnalysis::ID) + return (AliasAnalysis *)this; + return this; +} + AliasResult AliasAnalysisCounter::alias(const MemoryLocation &LocA, const MemoryLocation &LocB) { AliasResult R = getAnalysis<AliasAnalysis>().alias(LocA, LocB); |