X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FAliasAnalysisCounter.cpp;h=4362d7d301a80ed8bdd943f30debdfab761ed7b6;hb=ef4cfc749a61d0d0252196c957697436ba7ec068;hp=25ace732e2dd4d7c7583cc256af97057a6d168cf;hpb=a5370172b64bed5daf8e2869d7bf7cb52f80d6b7;p=oota-llvm.git diff --git a/lib/Analysis/AliasAnalysisCounter.cpp b/lib/Analysis/AliasAnalysisCounter.cpp index 25ace732e2d..4362d7d301a 100644 --- a/lib/Analysis/AliasAnalysisCounter.cpp +++ b/lib/Analysis/AliasAnalysisCounter.cpp @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -17,58 +17,57 @@ #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Assembly/Writer.h" #include "llvm/Support/CommandLine.h" -#include +#include "llvm/Support/Compiler.h" +#include "llvm/Support/Streams.h" using namespace llvm; -namespace { - cl::opt - PrintAll("count-aa-print-all-queries", cl::ReallyHidden); - cl::opt - PrintAllFailures("count-aa-print-all-failed-queries", cl::ReallyHidden); +static cl::opt +PrintAll("count-aa-print-all-queries", cl::ReallyHidden); +static cl::opt +PrintAllFailures("count-aa-print-all-failed-queries", cl::ReallyHidden); - class AliasAnalysisCounter : public ModulePass, public AliasAnalysis { +namespace { + class VISIBILITY_HIDDEN AliasAnalysisCounter + : public ModulePass, public AliasAnalysis { unsigned No, May, Must; unsigned NoMR, JustRef, JustMod, MR; const char *Name; Module *M; public: - AliasAnalysisCounter() { + static char ID; // Class identification, replacement for typeinfo + AliasAnalysisCounter() : ModulePass(&ID) { No = May = Must = 0; NoMR = JustRef = JustMod = MR = 0; } void printLine(const char *Desc, unsigned Val, unsigned Sum) { - std::cerr << " " << Val << " " << Desc << " responses (" - << Val*100/Sum << "%)\n"; + cerr << " " << Val << " " << Desc << " responses (" + << Val*100/Sum << "%)\n"; } ~AliasAnalysisCounter() { unsigned AASum = No+May+Must; unsigned MRSum = NoMR+JustRef+JustMod+MR; if (AASum + MRSum) { // Print a report if any counted queries occurred... - std::cerr - << "\n===== Alias Analysis Counter Report =====\n" - << " Analysis counted: " << Name << "\n" - << " " << AASum << " Total Alias Queries Performed\n"; + cerr << "\n===== Alias Analysis Counter Report =====\n" + << " Analysis counted: " << Name << "\n" + << " " << AASum << " Total Alias Queries Performed\n"; if (AASum) { printLine("no alias", No, AASum); printLine("may alias", May, AASum); printLine("must alias", Must, AASum); - std::cerr - << " Alias Analysis Counter Summary: " << No*100/AASum << "%/" - << May*100/AASum << "%/" << Must*100/AASum<<"%\n\n"; + cerr << " Alias Analysis Counter Summary: " << No*100/AASum << "%/" + << May*100/AASum << "%/" << Must*100/AASum<<"%\n\n"; } - std::cerr - << " " << MRSum << " Total Mod/Ref Queries Performed\n"; + cerr << " " << MRSum << " Total Mod/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); - std::cerr - << " Mod/Ref Analysis Counter Summary: " << NoMR*100/MRSum<< "%/" - << JustRef*100/MRSum << "%/" << JustMod*100/MRSum << "%/" - << MR*100/MRSum <<"%\n\n"; + cerr << " Mod/Ref Analysis Counter Summary: " <().pointsToConstantMemory(P); } + bool doesNotAccessMemory(CallSite CS) { + return getAnalysis().doesNotAccessMemory(CS); + } bool doesNotAccessMemory(Function *F) { return getAnalysis().doesNotAccessMemory(F); } + bool onlyReadsMemory(CallSite CS) { + return getAnalysis().onlyReadsMemory(CS); + } bool onlyReadsMemory(Function *F) { return getAnalysis().onlyReadsMemory(F); } @@ -108,12 +113,13 @@ namespace { return AliasAnalysis::getModRefInfo(CS1,CS2); } }; - - RegisterPass - X("count-aa", "Count Alias Analysis Query Responses"); - RegisterAnalysisGroup Y(X); } +char AliasAnalysisCounter::ID = 0; +static RegisterPass +X("count-aa", "Count Alias Analysis Query Responses", false, true); +static RegisterAnalysisGroup Y(X); + ModulePass *llvm::createAliasAnalysisCounterPass() { return new AliasAnalysisCounter(); } @@ -132,11 +138,13 @@ AliasAnalysisCounter::alias(const Value *V1, unsigned V1Size, } if (PrintAll || (PrintAllFailures && R == MayAlias)) { - std::cerr << AliasString << ":\t"; - std::cerr << "[" << V1Size << "B] "; - WriteAsOperand(std::cerr, V1, true, true, M) << ", "; - std::cerr << "[" << V2Size << "B] "; - WriteAsOperand(std::cerr, V2, true, true, M) << "\n"; + cerr << AliasString << ":\t"; + cerr << "[" << V1Size << "B] "; + WriteAsOperand(*cerr.stream(), V1, true, M); + cerr << ", "; + cerr << "[" << V2Size << "B] "; + WriteAsOperand(*cerr.stream(), V2, true, M); + cerr << "\n"; } return R; @@ -156,10 +164,10 @@ AliasAnalysisCounter::getModRefInfo(CallSite CS, Value *P, unsigned Size) { } if (PrintAll || (PrintAllFailures && R == ModRef)) { - std::cerr << MRString << ": Ptr: "; - std::cerr << "[" << Size << "B] "; - WriteAsOperand(std::cerr, P, true, true, M); - std::cerr << "\t<->" << *CS.getInstruction(); + cerr << MRString << ": Ptr: "; + cerr << "[" << Size << "B] "; + WriteAsOperand(*cerr.stream(), P, true, M); + cerr << "\t<->" << *CS.getInstruction(); } return R; }