[llvm-commits] [llvm] r48601 - /llvm/trunk/lib/Analysis/IPA/Andersens.cpp

Andrew Lenharth andrewl at lenharth.org
Thu Mar 20 16:02:58 PDT 2008


I don't think there is a way of knowing if -analyze was passed.  All
you know is Print is called, therefor probably analyze was passed (or
someone called it in gdb, but we probably don't care about that case).
 I agree it would be nice if these vectors could be dropped.

Andrew

On 3/20/08, Daniel Berlin <dberlin at dberlin.org> wrote:
> Err, can't you make this dependent on whether -analyze was specified or not?
>  Seems a waste to keep these large vectors around when it isn't.
>
>
>
>  On Thu, Mar 20, 2008 at 11:36 AM, Andrew Lenharth <alenhar2 at cs.uiuc.edu> wrote:
>  > Author: alenhar2
>  >  Date: Thu Mar 20 10:36:44 2008
>  >  New Revision: 48601
>  >
>  >  URL: http://llvm.org/viewvc/llvm-project?rev=48601&view=rev
>  >  Log:
>  >  enable -analyze for andersens
>  >
>  >  Modified:
>  >     llvm/trunk/lib/Analysis/IPA/Andersens.cpp
>  >
>  >  Modified: llvm/trunk/lib/Analysis/IPA/Andersens.cpp
>  >  URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/Andersens.cpp?rev=48601&r1=48600&r2=48601&view=diff
>  >
>  >  ==============================================================================
>  >  --- llvm/trunk/lib/Analysis/IPA/Andersens.cpp (original)
>  >  +++ llvm/trunk/lib/Analysis/IPA/Andersens.cpp Thu Mar 20 10:36:44 2008
>  >  @@ -286,7 +286,7 @@
>  >          Timestamp = Counter++;
>  >        }
>  >
>  >  -      bool isRep() {
>  >  +      bool isRep() const {
>  >          return( (int) NodeRep < 0 );
>  >        }
>  >      };
>  >  @@ -446,10 +446,11 @@
>  >
>  >        // Free the constraints list, as we don't need it to respond to alias
>  >        // requests.
>  >  -      ObjectNodes.clear();
>  >  -      ReturnNodes.clear();
>  >  -      VarargNodes.clear();
>  >        std::vector<Constraint>().swap(Constraints);
>  >  +      //These are needed for Print() (-analyze in opt)
>  >  +      //ObjectNodes.clear();
>  >  +      //ReturnNodes.clear();
>  >  +      //VarargNodes.clear();
>  >        return false;
>  >      }
>  >
>  >  @@ -510,7 +511,7 @@
>  >
>  >      /// getObject - Return the node corresponding to the memory object for the
>  >      /// specified global or allocation instruction.
>  >  -    unsigned getObject(Value *V) {
>  >  +    unsigned getObject(Value *V) const {
>  >        DenseMap<Value*, unsigned>::iterator I = ObjectNodes.find(V);
>  >        assert(I != ObjectNodes.end() &&
>  >               "Value does not have an object in the points-to graph!");
>  >  @@ -519,7 +520,7 @@
>  >
>  >      /// getReturnNode - Return the node representing the return value for the
>  >      /// specified function.
>  >  -    unsigned getReturnNode(Function *F) {
>  >  +    unsigned getReturnNode(Function *F) const {
>  >        DenseMap<Function*, unsigned>::iterator I = ReturnNodes.find(F);
>  >        assert(I != ReturnNodes.end() && "Function does not return a value!");
>  >        return I->second;
>  >  @@ -527,7 +528,7 @@
>  >
>  >      /// getVarargNode - Return the node representing the variable arguments
>  >      /// formal for the specified function.
>  >  -    unsigned getVarargNode(Function *F) {
>  >  +    unsigned getVarargNode(Function *F) const {
>  >        DenseMap<Function*, unsigned>::iterator I = VarargNodes.find(F);
>  >        assert(I != VarargNodes.end() && "Function does not take var args!");
>  >        return I->second;
>  >  @@ -544,6 +545,7 @@
>  >      unsigned UniteNodes(unsigned First, unsigned Second,
>  >                          bool UnionByRank = true);
>  >      unsigned FindNode(unsigned Node);
>  >  +    unsigned FindNode(unsigned Node) const;
>  >
>  >      void IdentifyObjects(Module &M);
>  >      void CollectConstraints(Module &M);
>  >  @@ -572,11 +574,11 @@
>  >      bool AddConstraintsForExternalCall(CallSite CS, Function *F);
>  >
>  >
>  >  -    void PrintNode(Node *N);
>  >  -    void PrintConstraints();
>  >  -    void PrintConstraint(const Constraint &);
>  >  -    void PrintLabels();
>  >  -    void PrintPointsToGraph();
>  >  +    void PrintNode(const Node *N) const;
>  >  +    void PrintConstraints() const ;
>  >  +    void PrintConstraint(const Constraint &) const;
>  >  +    void PrintLabels() const;
>  >  +    void PrintPointsToGraph() const;
>  >
>  >      //===------------------------------------------------------------------===//
>  >      // Instruction visitation methods for adding constraints
>  >  @@ -598,6 +600,12 @@
>  >      void visitVAArg(VAArgInst &I);
>  >      void visitInstruction(Instruction &I);
>  >
>  >  +    //===------------------------------------------------------------------===//
>  >  +    // Implement Analyize interface
>  >  +    //
>  >  +    void print(std::ostream &O, const Module* M) const {
>  >  +      PrintPointsToGraph();
>  >  +    }
>  >    };
>  >
>  >    char Andersens::ID = 0;
>  >  @@ -1994,7 +2002,7 @@
>  >    return NodeIndex;
>  >   }
>  >
>  >  -void Andersens::PrintLabels() {
>  >  +void Andersens::PrintLabels() const {
>  >    for (unsigned i = 0; i < GraphNodes.size(); ++i) {
>  >      if (i < FirstRefNode) {
>  >        PrintNode(&GraphNodes[i]);
>  >  @@ -2736,11 +2744,23 @@
>  >      return (N->NodeRep = FindNode(N->NodeRep));
>  >   }
>  >
>  >  +// Find the index into GraphNodes of the node representing Node,
>  >  +// don't perform path compression along the way (for Print)
>  >  +unsigned Andersens::FindNode(unsigned NodeIndex) const {
>  >  +  assert (NodeIndex < GraphNodes.size()
>  >  +          && "Attempting to find a node that can't exist");
>  >  +  const Node *N = &GraphNodes[NodeIndex];
>  >  +  if (N->isRep())
>  >  +    return NodeIndex;
>  >  +  else
>  >  +    return FindNode(N->NodeRep);
>  >  +}
>  >  +
>  >   //===----------------------------------------------------------------------===//
>  >   //                               Debugging Output
>  >   //===----------------------------------------------------------------------===//
>  >
>  >  -void Andersens::PrintNode(Node *N) {
>  >  +void Andersens::PrintNode(const Node *N) const {
>  >    if (N == &GraphNodes[UniversalSet]) {
>  >      cerr << "<universal>";
>  >      return;
>  >  @@ -2784,7 +2804,7 @@
>  >      if (N == &GraphNodes[getObject(V)])
>  >        cerr << "<mem>";
>  >   }
>  >  -void Andersens::PrintConstraint(const Constraint &C) {
>  >  +void Andersens::PrintConstraint(const Constraint &C) const {
>  >    if (C.Type == Constraint::Store) {
>  >      cerr << "*";
>  >      if (C.Offset != 0)
>  >  @@ -2809,18 +2829,18 @@
>  >    cerr << "\n";
>  >   }
>  >
>  >  -void Andersens::PrintConstraints() {
>  >  +void Andersens::PrintConstraints() const {
>  >    cerr << "Constraints:\n";
>  >
>  >    for (unsigned i = 0, e = Constraints.size(); i != e; ++i)
>  >      PrintConstraint(Constraints[i]);
>  >   }
>  >
>  >  -void Andersens::PrintPointsToGraph() {
>  >  +void Andersens::PrintPointsToGraph() const {
>  >    cerr << "Points-to graph:\n";
>  >    for (unsigned i = 0, e = GraphNodes.size(); i != e; ++i) {
>  >  -    Node *N = &GraphNodes[i];
>  >  -    if (FindNode (i) != i) {
>  >  +    const Node *N = &GraphNodes[i];
>  >  +    if (FindNode(i) != i) {
>  >        PrintNode(N);
>  >        cerr << "\t--> same as ";
>  >        PrintNode(&GraphNodes[FindNode(i)]);
>  >
>  >
>  >  _______________________________________________
>  >  llvm-commits mailing list
>  >  llvm-commits at cs.uiuc.edu
>  >  http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>  >
>



More information about the llvm-commits mailing list