diff options
author | Stepan Dyatkovskiy <stpworld@narod.ru> | 2012-06-05 07:43:08 +0000 |
---|---|---|
committer | Stepan Dyatkovskiy <stpworld@narod.ru> | 2012-06-05 07:43:08 +0000 |
commit | 20cb4919cd01967b11b0b468fd43167b263ed028 (patch) | |
tree | ca48877a58ffe13de072ac2148f33669f9fc16ea | |
parent | 1d98530196feee3b1b3ddcd793377b9b430a411e (diff) | |
download | llvm-20cb4919cd01967b11b0b468fd43167b263ed028.tar.gz llvm-20cb4919cd01967b11b0b468fd43167b263ed028.tar.bz2 llvm-20cb4919cd01967b11b0b468fd43167b263ed028.tar.xz |
IntegersSubsetMapping:
Changed type of Items collection: from std::vector to std::list.
Also some small fixes made in IntegersSubset.h, IntegersSubsetMapping.h and IntegersSubsetTest.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157987 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Support/IntegersSubset.h | 5 | ||||
-rw-r--r-- | include/llvm/Support/IntegersSubsetMapping.h | 22 | ||||
-rw-r--r-- | unittests/Support/IntegersSubsetTest.cpp | 1 |
3 files changed, 16 insertions, 12 deletions
diff --git a/include/llvm/Support/IntegersSubset.h b/include/llvm/Support/IntegersSubset.h index add0c902a9..2ceeea5b66 100644 --- a/include/llvm/Support/IntegersSubset.h +++ b/include/llvm/Support/IntegersSubset.h @@ -293,7 +293,7 @@ protected: public: template<class RangesCollectionTy> - IntegersSubsetGeneric(const RangesCollectionTy& Links) { + explicit IntegersSubsetGeneric(const RangesCollectionTy& Links) { assert(Links.size() && "Empty ranges are not allowed."); for (typename RangesCollectionTy::const_iterator i = Links.begin(), e = Links.end(); i != e; ++i) { @@ -459,9 +459,8 @@ public: IntegersSubset(Constant *C) : ParentTy(rangesFromConstant(C)), Holder(C) {} - // implicit template<class RangesCollectionTy> - IntegersSubset(const RangesCollectionTy& Src) : ParentTy(Src) { + explicit IntegersSubset(const RangesCollectionTy& Src) : ParentTy(Src) { std::vector<Constant*> Elts; Elts.reserve(Src.size()); for (typename RangesCollectionTy::const_iterator i = Src.begin(), diff --git a/include/llvm/Support/IntegersSubsetMapping.h b/include/llvm/Support/IntegersSubsetMapping.h index d3d11f03ba..bb02c156f3 100644 --- a/include/llvm/Support/IntegersSubsetMapping.h +++ b/include/llvm/Support/IntegersSubsetMapping.h @@ -49,7 +49,7 @@ public: protected: - typedef std::vector<Cluster> CaseItems; + typedef std::list<Cluster> CaseItems; typedef typename CaseItems::iterator CaseItemIt; typedef typename CaseItems::const_iterator CaseItemConstIt; @@ -87,11 +87,16 @@ protected: void sort() { if (!Sorted) { - std::sort(Items.begin(), Items.end(), ClustersCmp()); + std::vector<Cluster> clustersVector; + clustersVector.reserve(Items.size()); + clustersVector.insert(clustersVector.begin(), Items.begin(), Items.end()); + std::sort(clustersVector.begin(), clustersVector.end(), ClustersCmp()); + Items.clear(); + Items.insert(Items.begin(), clustersVector.begin(), clustersVector.end()); Sorted = true; } } - + public: // Don't public CaseItems itself. Don't allow edit the Items directly. @@ -104,7 +109,6 @@ public: typedef std::list<Case> Cases; IntegersSubsetMapping() { - Items.reserve(32); Sorted = false; } @@ -112,7 +116,7 @@ public: if (Items.empty()) return true; sort(); - for (CaseItemIt i = Items.begin(), j = i+1, e = Items.end(); + for (CaseItemIt j = Items.begin(), i = j++, e = Items.end(); j != e; i = j++) { if (isIntersected(i, j) && i->second != j->second) { errItem = j; @@ -132,8 +136,8 @@ public: const IntTy *High = &OldItems.begin()->first.getHigh(); unsigned Weight = 1; SuccessorClass *Successor = OldItems.begin()->second; - for (CaseItemIt i = OldItems.begin(), j = i+1, e = OldItems.end(); - j != e; i = j++) { + for (CaseItemIt j = OldItems.begin(), i = j++, e = OldItems.end(); + j != e; i = j++) { if (isJoinable(i, j)) { const IntTy *CurHigh = &j->first.getHigh(); ++Weight; @@ -176,7 +180,7 @@ public: /// Adds all ranges and values from given ranges set to the current /// mapping. - void add(const IntegersSubset &CRS, SuccessorClass *S = 0) { + void add(const IntegersSubsetTy &CRS, SuccessorClass *S = 0) { for (unsigned i = 0, e = CRS.getNumItems(); i < e; ++i) { RangeTy R = CRS.getItem(i); add(R, S); @@ -197,7 +201,7 @@ public: /// Builds the finalized case objects ignoring successor values, as though /// all ranges belongs to the same successor. - IntegersSubset getCase() { + IntegersSubsetTy getCase() { RangesCollection Ranges; for (RangeIterator i = this->begin(); i != this->end(); ++i) Ranges.push_back(i->first); diff --git a/unittests/Support/IntegersSubsetTest.cpp b/unittests/Support/IntegersSubsetTest.cpp index 5de1f7c221..836f29a269 100644 --- a/unittests/Support/IntegersSubsetTest.cpp +++ b/unittests/Support/IntegersSubsetTest.cpp @@ -22,6 +22,7 @@ namespace { class Int : public APInt { public: Int(uint64_t V) : APInt(64, V) {} + Int(const APInt& Src) : APInt(Src) {} bool operator < (const APInt& RHS) const { return ult(RHS); } bool operator > (const APInt& RHS) const { return ugt(RHS); } bool operator <= (const APInt& RHS) const { return ule(RHS); } |