summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStepan Dyatkovskiy <stpworld@narod.ru>2012-06-05 07:43:08 +0000
committerStepan Dyatkovskiy <stpworld@narod.ru>2012-06-05 07:43:08 +0000
commit20cb4919cd01967b11b0b468fd43167b263ed028 (patch)
treeca48877a58ffe13de072ac2148f33669f9fc16ea
parent1d98530196feee3b1b3ddcd793377b9b430a411e (diff)
downloadllvm-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.h5
-rw-r--r--include/llvm/Support/IntegersSubsetMapping.h22
-rw-r--r--unittests/Support/IntegersSubsetTest.cpp1
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); }