X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FIPA%2FAndersens.cpp;h=805e771e542531f2f8b9b586335b47135e65ba06;hb=e4d87aa2de6e52952dca73716386db09aad5a8fd;hp=73aa231e21c8c3243f736e10493a4b41478d7705;hpb=3da59db637a887474c1b1346c1f3ccf53b6c4663;p=oota-llvm.git diff --git a/lib/Analysis/IPA/Andersens.cpp b/lib/Analysis/IPA/Andersens.cpp index 73aa231e21c..805e771e542 100644 --- a/lib/Analysis/IPA/Andersens.cpp +++ b/lib/Analysis/IPA/Andersens.cpp @@ -62,21 +62,15 @@ #include "llvm/Support/Debug.h" #include "llvm/ADT/Statistic.h" #include -#include using namespace llvm; -namespace { - Statistic<> - NumIters("anders-aa", "Number of iterations to reach convergence"); - Statistic<> - NumConstraints("anders-aa", "Number of constraints"); - Statistic<> - NumNodes("anders-aa", "Number of nodes"); - Statistic<> - NumEscapingFunctions("anders-aa", "Number of internal functions that escape"); - Statistic<> - NumIndirectCallees("anders-aa", "Number of indirect callees found"); +STATISTIC(NumIters , "Number of iterations to reach convergence"); +STATISTIC(NumConstraints , "Number of constraints"); +STATISTIC(NumNodes , "Number of nodes"); +STATISTIC(NumEscapingFunctions, "Number of internal functions that escape"); +STATISTIC(NumIndirectCallees , "Number of indirect callees found"); +namespace { class Andersens : public ModulePass, public AliasAnalysis, private InstVisitor { /// Node class - This class is used to represent a memory object in the @@ -331,7 +325,8 @@ namespace { void visitGetElementPtrInst(GetElementPtrInst &GEP); void visitPHINode(PHINode &PN); void visitCastInst(CastInst &CI); - void visitSetCondInst(SetCondInst &SCI) {} // NOOP! + void visitICmpInst(ICmpInst &ICI) {} // NOOP! + void visitFCmpInst(FCmpInst &ICI) {} // NOOP! void visitSelectInst(SelectInst &SI); void visitVAArg(VAArgInst &I); void visitInstruction(Instruction &I); @@ -534,7 +529,7 @@ Andersens::Node *Andersens::getNodeForConstantPointer(Constant *C) { case Instruction::BitCast: return getNodeForConstantPointer(CE->getOperand(0)); default: - std::cerr << "Constant Expr not yet handled: " << *CE << "\n"; + cerr << "Constant Expr not yet handled: " << *CE << "\n"; assert(0); } } else { @@ -561,7 +556,7 @@ Andersens::Node *Andersens::getNodeForConstantPointerTarget(Constant *C) { case Instruction::BitCast: return getNodeForConstantPointerTarget(CE->getOperand(0)); default: - std::cerr << "Constant Expr not yet handled: " << *CE << "\n"; + cerr << "Constant Expr not yet handled: " << *CE << "\n"; assert(0); } } else { @@ -784,10 +779,12 @@ void Andersens::visitInstruction(Instruction &I) { case Instruction::Shl: case Instruction::LShr: case Instruction::AShr: + case Instruction::ICmp: + case Instruction::FCmp: return; default: // Is this something we aren't handling yet? - std::cerr << "Unknown instruction: " << I; + cerr << "Unknown instruction: " << I; abort(); } } @@ -1105,13 +1102,13 @@ void Andersens::SolveConstraints() { void Andersens::PrintNode(Node *N) { if (N == &GraphNodes[UniversalSet]) { - std::cerr << ""; + cerr << ""; return; } else if (N == &GraphNodes[NullPtr]) { - std::cerr << ""; + cerr << ""; return; } else if (N == &GraphNodes[NullObject]) { - std::cerr << ""; + cerr << ""; return; } @@ -1120,56 +1117,56 @@ void Andersens::PrintNode(Node *N) { if (Function *F = dyn_cast(V)) { if (isa(F->getFunctionType()->getReturnType()) && N == getReturnNode(F)) { - std::cerr << F->getName() << ":retval"; + cerr << F->getName() << ":retval"; return; } else if (F->getFunctionType()->isVarArg() && N == getVarargNode(F)) { - std::cerr << F->getName() << ":vararg"; + cerr << F->getName() << ":vararg"; return; } } if (Instruction *I = dyn_cast(V)) - std::cerr << I->getParent()->getParent()->getName() << ":"; + cerr << I->getParent()->getParent()->getName() << ":"; else if (Argument *Arg = dyn_cast(V)) - std::cerr << Arg->getParent()->getName() << ":"; + cerr << Arg->getParent()->getName() << ":"; if (V->hasName()) - std::cerr << V->getName(); + cerr << V->getName(); else - std::cerr << "(unnamed)"; + cerr << "(unnamed)"; if (isa(V) || isa(V)) if (N == getObject(V)) - std::cerr << ""; + cerr << ""; } void Andersens::PrintConstraints() { - std::cerr << "Constraints:\n"; + cerr << "Constraints:\n"; for (unsigned i = 0, e = Constraints.size(); i != e; ++i) { - std::cerr << " #" << i << ": "; + cerr << " #" << i << ": "; Constraint &C = Constraints[i]; if (C.Type == Constraint::Store) - std::cerr << "*"; + cerr << "*"; PrintNode(C.Dest); - std::cerr << " = "; + cerr << " = "; if (C.Type == Constraint::Load) - std::cerr << "*"; + cerr << "*"; PrintNode(C.Src); - std::cerr << "\n"; + cerr << "\n"; } } void Andersens::PrintPointsToGraph() { - std::cerr << "Points-to graph:\n"; + cerr << "Points-to graph:\n"; for (unsigned i = 0, e = GraphNodes.size(); i != e; ++i) { Node *N = &GraphNodes[i]; - std::cerr << "[" << (N->end() - N->begin()) << "] "; + cerr << "[" << (N->end() - N->begin()) << "] "; PrintNode(N); - std::cerr << "\t--> "; + cerr << "\t--> "; for (Node::iterator I = N->begin(), E = N->end(); I != E; ++I) { - if (I != N->begin()) std::cerr << ", "; + if (I != N->begin()) cerr << ", "; PrintNode(*I); } - std::cerr << "\n"; + cerr << "\n"; } }