diff options
| author | Daniel Berlin <dberlin@dberlin.org> | 2007-09-27 15:42:23 +0000 | 
|---|---|---|
| committer | Daniel Berlin <dberlin@dberlin.org> | 2007-09-27 15:42:23 +0000 | 
| commit | a447de7065f2f422f2cb261c76d1605cdfdc5876 (patch) | |
| tree | ee1e7acffa146742aa4d26633ee456ca0f349f88 /llvm/lib/Analysis | |
| parent | cc61bf5e0cfb65734721638299a03c9455f59097 (diff) | |
| download | bcm5719-llvm-a447de7065f2f422f2cb261c76d1605cdfdc5876.tar.gz bcm5719-llvm-a447de7065f2f422f2cb261c76d1605cdfdc5876.zip | |
Ignore redundant constraints
llvm-svn: 42397
Diffstat (limited to 'llvm/lib/Analysis')
| -rw-r--r-- | llvm/lib/Analysis/IPA/Andersens.cpp | 22 | 
1 files changed, 20 insertions, 2 deletions
| diff --git a/llvm/lib/Analysis/IPA/Andersens.cpp b/llvm/lib/Analysis/IPA/Andersens.cpp index 4ede5e128af..63a6cb553e0 100644 --- a/llvm/lib/Analysis/IPA/Andersens.cpp +++ b/llvm/lib/Analysis/IPA/Andersens.cpp @@ -134,6 +134,21 @@ namespace {          assert(Offset == 0 || Ty != AddressOf &&                 "Offset is illegal on addressof constraints");        } +      bool operator==(const Constraint &RHS) const { +        return RHS.Type == Type +          && RHS.Dest == Dest +          && RHS.Src == Src +          && RHS.Offset == Offset; +      } +      bool operator<(const Constraint &RHS) const { +        if (RHS.Type != Type) +          return RHS.Type < Type; +        else if (RHS.Dest != Dest) +          return RHS.Dest < Dest; +        else if (RHS.Src != Src) +          return RHS.Src < Src; +        return RHS.Offset < Offset; +      }      };      // Node class - This class is used to represent a node in the constraint @@ -1735,6 +1750,7 @@ void Andersens::HUValNum(unsigned NodeIndex) {  /// replaced by their the pointer equivalence class representative.  void Andersens::RewriteConstraints() {    std::vector<Constraint> NewConstraints; +  std::set<Constraint> Seen;    PEClass2Node.clear();    PENLEClass2Node.clear(); @@ -1768,12 +1784,14 @@ void Andersens::RewriteConstraints() {      // it.      if (C.Src == C.Dest && C.Type == Constraint::Copy)        continue; -     +      C.Src = FindEquivalentNode(RHSNode, RHSLabel);      C.Dest = FindEquivalentNode(FindNode(LHSNode), LHSLabel); -    if (C.Src == C.Dest && C.Type == Constraint::Copy) +    if (C.Src == C.Dest && C.Type == Constraint::Copy +        || Seen.count(C) != 0)        continue; +    Seen.insert(C);      NewConstraints.push_back(C);    }    Constraints.swap(NewConstraints); | 

