X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FAliasAnalysisEvaluator.cpp;h=37271b94a20138f56d7e5c752dfe80bba40242fc;hb=3ca2ad11567f83883ae2719c5fac5afc30c7b3d1;hp=ddf8b192c73d24116e0017a26d9e383ab3acbd49;hpb=1db839e73471a40309c2c10873b67c3b5b1b7a7b;p=oota-llvm.git diff --git a/lib/Analysis/AliasAnalysisEvaluator.cpp b/lib/Analysis/AliasAnalysisEvaluator.cpp index ddf8b192c73..37271b94a20 100644 --- a/lib/Analysis/AliasAnalysisEvaluator.cpp +++ b/lib/Analysis/AliasAnalysisEvaluator.cpp @@ -36,6 +36,7 @@ static cl::opt PrintAll("print-all-alias-modref-info", cl::ReallyHidden); static cl::opt PrintNoAlias("print-no-aliases", cl::ReallyHidden); static cl::opt PrintMayAlias("print-may-aliases", cl::ReallyHidden); +static cl::opt PrintPartialAlias("print-partial-aliases", cl::ReallyHidden); static cl::opt PrintMustAlias("print-must-aliases", cl::ReallyHidden); static cl::opt PrintNoModRef("print-no-modref", cl::ReallyHidden); @@ -45,7 +46,7 @@ static cl::opt PrintModRef("print-modref", cl::ReallyHidden); namespace { class AAEval : public FunctionPass { - unsigned NoAlias, MayAlias, MustAlias; + unsigned NoAlias, MayAlias, PartialAlias, MustAlias; unsigned NoModRef, Mod, Ref, ModRef; public: @@ -60,11 +61,12 @@ namespace { } bool doInitialization(Module &M) { - NoAlias = MayAlias = MustAlias = 0; + NoAlias = MayAlias = PartialAlias = MustAlias = 0; NoModRef = Mod = Ref = ModRef = 0; if (PrintAll) { - PrintNoAlias = PrintMayAlias = PrintMustAlias = true; + PrintNoAlias = PrintMayAlias = true; + PrintPartialAlias = PrintMustAlias = true; PrintNoModRef = PrintMod = PrintRef = PrintModRef = true; } return false; @@ -160,7 +162,7 @@ bool AAEval::runOnFunction(Function &F) { } } - if (PrintNoAlias || PrintMayAlias || PrintMustAlias || + if (PrintNoAlias || PrintMayAlias || PrintPartialAlias || PrintMustAlias || PrintNoModRef || PrintMod || PrintRef || PrintModRef) errs() << "Function: " << F.getName() << ": " << Pointers.size() << " pointers, " << CallSites.size() << " call sites\n"; @@ -168,13 +170,13 @@ bool AAEval::runOnFunction(Function &F) { // iterate over the worklist, and run the full (n^2)/2 disambiguations for (SetVector::iterator I1 = Pointers.begin(), E = Pointers.end(); I1 != E; ++I1) { - unsigned I1Size = AliasAnalysis::UnknownSize; - const Type *I1ElTy = cast((*I1)->getType())->getElementType(); + uint64_t I1Size = AliasAnalysis::UnknownSize; + Type *I1ElTy = cast((*I1)->getType())->getElementType(); if (I1ElTy->isSized()) I1Size = AA.getTypeStoreSize(I1ElTy); for (SetVector::iterator I2 = Pointers.begin(); I2 != I1; ++I2) { - unsigned I2Size = AliasAnalysis::UnknownSize; - const Type *I2ElTy =cast((*I2)->getType())->getElementType(); + uint64_t I2Size = AliasAnalysis::UnknownSize; + Type *I2ElTy =cast((*I2)->getType())->getElementType(); if (I2ElTy->isSized()) I2Size = AA.getTypeStoreSize(I2ElTy); switch (AA.alias(*I1, I1Size, *I2, I2Size)) { @@ -184,6 +186,10 @@ bool AAEval::runOnFunction(Function &F) { case AliasAnalysis::MayAlias: PrintResults("MayAlias", PrintMayAlias, *I1, *I2, F.getParent()); ++MayAlias; break; + case AliasAnalysis::PartialAlias: + PrintResults("PartialAlias", PrintPartialAlias, *I1, *I2, + F.getParent()); + ++PartialAlias; break; case AliasAnalysis::MustAlias: PrintResults("MustAlias", PrintMustAlias, *I1, *I2, F.getParent()); ++MustAlias; break; @@ -200,8 +206,8 @@ bool AAEval::runOnFunction(Function &F) { for (SetVector::iterator V = Pointers.begin(), Ve = Pointers.end(); V != Ve; ++V) { - unsigned Size = AliasAnalysis::UnknownSize; - const Type *ElTy = cast((*V)->getType())->getElementType(); + uint64_t Size = AliasAnalysis::UnknownSize; + Type *ElTy = cast((*V)->getType())->getElementType(); if (ElTy->isSized()) Size = AA.getTypeStoreSize(ElTy); switch (AA.getModRefInfo(*C, *V, Size)) { @@ -255,7 +261,7 @@ static void PrintPercent(unsigned Num, unsigned Sum) { } bool AAEval::doFinalization(Module &M) { - unsigned AliasSum = NoAlias + MayAlias + MustAlias; + unsigned AliasSum = NoAlias + MayAlias + PartialAlias + MustAlias; errs() << "===== Alias Analysis Evaluator Report =====\n"; if (AliasSum == 0) { errs() << " Alias Analysis Evaluator Summary: No pointers!\n"; @@ -265,10 +271,13 @@ bool AAEval::doFinalization(Module &M) { PrintPercent(NoAlias, AliasSum); errs() << " " << MayAlias << " may alias responses "; PrintPercent(MayAlias, AliasSum); + errs() << " " << PartialAlias << " partial alias responses "; + PrintPercent(PartialAlias, AliasSum); errs() << " " << MustAlias << " must alias responses "; PrintPercent(MustAlias, AliasSum); errs() << " Alias Analysis Evaluator Pointer Alias Summary: " << NoAlias*100/AliasSum << "%/" << MayAlias*100/AliasSum << "%/" + << PartialAlias*100/AliasSum << "%/" << MustAlias*100/AliasSum << "%\n"; }