summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-02-09 20:40:13 +0000
committerChris Lattner <sabre@nondot.org>2003-02-09 20:40:13 +0000
commitb0208e1ae3ea33ffdb8911d81802ee121ac0e681 (patch)
tree450afd023beb013f6859d9d651673200bfdc80fd /llvm/lib/Analysis/AliasAnalysisEvaluator.cpp
parent2393160bdee0a9306ea637f802279c9a17c1c190 (diff)
downloadbcm5719-llvm-b0208e1ae3ea33ffdb8911d81802ee121ac0e681.tar.gz
bcm5719-llvm-b0208e1ae3ea33ffdb8911d81802ee121ac0e681.zip
Allow printing of various types of alias analysis results
llvm-svn: 5520
Diffstat (limited to 'llvm/lib/Analysis/AliasAnalysisEvaluator.cpp')
-rw-r--r--llvm/lib/Analysis/AliasAnalysisEvaluator.cpp31
1 files changed, 27 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp b/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp
index efd22587efc..7a4a193b8d2 100644
--- a/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp
+++ b/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp
@@ -13,10 +13,16 @@
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Pass.h"
#include "llvm/Function.h"
-#include "llvm/Support/InstIterator.h"
#include "llvm/Type.h"
+#include "llvm/Support/InstIterator.h"
+#include "llvm/Assembly/Writer.h"
+#include "Support/CommandLine.h"
namespace {
+ cl::opt<bool> PrintNo ("print-no-alias-results", cl::ReallyHidden);
+ cl::opt<bool> PrintMay ("print-may-alias-results", cl::ReallyHidden);
+ cl::opt<bool> PrintMust("print-must-alias-results", cl::ReallyHidden);
+
class AAEval : public FunctionPass {
unsigned No, May, Must;
@@ -35,6 +41,14 @@ namespace {
X("aa-eval", "Exhaustive Alias Analysis Precision Evaluator");
}
+static inline void PrintResults(const char *Msg, bool P, Value *V1, Value *V2) {
+ if (P) {
+ std::cerr << " " << Msg << ":\t";
+ WriteAsOperand(std::cerr, V1) << ", ";
+ WriteAsOperand(std::cerr, V2) << "\n";
+ }
+}
+
bool AAEval::runOnFunction(Function &F) {
AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
@@ -48,14 +62,23 @@ bool AAEval::runOnFunction(Function &F) {
if (isa<PointerType>((*I)->getType())) // Add all pointer instructions
Pointers.push_back(*I);
+ if (PrintNo || PrintMay || PrintMust)
+ std::cerr << "Function: " << F.getName() << "\n";
+
// iterate over the worklist, and run the full (n^2)/2 disambiguations
for (std::vector<Value *>::iterator I1 = Pointers.begin(), E = Pointers.end();
I1 != E; ++I1)
for (std::vector<Value *>::iterator I2 = Pointers.begin(); I2 != I1; ++I2)
switch (AA.alias(*I1, *I2)) {
- case AliasAnalysis::NoAlias: ++No; break;
- case AliasAnalysis::MayAlias: ++May; break;
- case AliasAnalysis::MustAlias: ++Must; break;
+ case AliasAnalysis::NoAlias:
+ PrintResults("No", PrintNo, *I1, *I2);
+ ++No; break;
+ case AliasAnalysis::MayAlias:
+ PrintResults("May", PrintMay, *I1, *I2);
+ ++May; break;
+ case AliasAnalysis::MustAlias:
+ PrintResults("Must", PrintMust, *I1, *I2);
+ ++Must; break;
default:
std::cerr << "Unknown alias query result!\n";
}
OpenPOWER on IntegriCloud