aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Support
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Support')
-rw-r--r--include/llvm/Support/IntegersSubset.h (renamed from include/llvm/Support/ConstantRangesSet.h)4
-rw-r--r--include/llvm/Support/IntegersSubsetMapping.h (renamed from include/llvm/Support/CRSBuilder.h)112
2 files changed, 51 insertions, 65 deletions
diff --git a/include/llvm/Support/ConstantRangesSet.h b/include/llvm/Support/IntegersSubset.h
index 109bd5b26e..894b104da9 100644
--- a/include/llvm/Support/ConstantRangesSet.h
+++ b/include/llvm/Support/IntegersSubset.h
@@ -223,14 +223,14 @@ struct IntRange {
/// Note: It is assumed that "holder" is inherited from Constant object.
/// ConstantRangesSet may be converted to and from Constant* pointer.
///
-class ConstantRangesSet {
+class IntegersSubset {
Constant *Array;
public:
bool IsWide;
// implicit
- ConstantRangesSet(Constant *V) : Array(V) {
+ IntegersSubset(Constant *V) : Array(V) {
ArrayType *ArrTy = cast<ArrayType>(Array->getType());
VectorType *VecTy = cast<VectorType>(ArrTy->getElementType());
IntegerType *IntTy = cast<IntegerType>(VecTy->getElementType());
diff --git a/include/llvm/Support/CRSBuilder.h b/include/llvm/Support/IntegersSubsetMapping.h
index c5dfa9f3f1..eaa2f5be2f 100644
--- a/include/llvm/Support/CRSBuilder.h
+++ b/include/llvm/Support/IntegersSubsetMapping.h
@@ -19,7 +19,7 @@
#ifndef CRSBUILDER_H_
#define CRSBUILDER_H_
-#include "llvm/Support/ConstantRangesSet.h"
+#include "llvm/Support/IntegersSubset.h"
#include <list>
#include <map>
#include <vector>
@@ -27,13 +27,13 @@
namespace llvm {
template <class SuccessorClass>
-class CRSBuilderBase {
+class IntegersSubsetMapping {
public:
- typedef ConstantRangesSet::Range RangeTy;
+ typedef IntegersSubset::Range RangeTy;
struct RangeEx : public RangeTy {
- typedef ConstantRangesSet::Range RangeTy;
+ typedef IntegersSubset::Range RangeTy;
RangeEx() : Weight(1) {}
RangeEx(const RangeTy &R) : RangeTy(R.Low, R.High), Weight(1) {}
RangeEx(const IntItem &C) : RangeTy(C), Weight(1) {}
@@ -50,6 +50,12 @@ protected:
typedef std::vector<Cluster> CaseItems;
typedef typename CaseItems::iterator CaseItemIt;
typedef typename CaseItems::const_iterator CaseItemConstIt;
+
+ typedef std::list<RangeTy> RangesCollection;
+ typedef typename RangesCollection::iterator RangesCollectionIt;
+
+ typedef std::map<SuccessorClass*, RangesCollection > CRSMap;
+ typedef typename CRSMap::iterator CRSMapIt;
struct ClustersCmp {
bool operator()(const Cluster &C1, const Cluster &C2) {
@@ -82,6 +88,31 @@ protected:
Sorted = true;
}
}
+
+ IntegersSubset getCase(RangesCollection& Src) {
+ std::vector<Constant*> Elts;
+ Elts.reserve(Src.size());
+ for (RangesCollectionIt i = Src.begin(), e = Src.end(); i != e; ++i) {
+ RangeTy &R = *i;
+ std::vector<Constant*> r;
+ if (R.isSingleNumber()) {
+ r.reserve(2);
+ // FIXME: Since currently we have ConstantInt based numbers
+ // use hack-conversion of IntItem to ConstantInt
+ r.push_back(R.Low.toConstantInt());
+ r.push_back(R.High.toConstantInt());
+ } else {
+ r.reserve(1);
+ r.push_back(R.Low.toConstantInt());
+ }
+ Constant *CV = ConstantVector::get(r);
+ Elts.push_back(CV);
+ }
+ ArrayType *ArrTy =
+ ArrayType::get(Elts.front()->getType(), (uint64_t)Elts.size());
+ Constant *Array = ConstantArray::get(ArrTy, Elts);
+ return IntegersSubset(Array);
+ }
public:
@@ -91,7 +122,10 @@ public:
// factory.
typedef CaseItemIt RangeIterator;
- CRSBuilderBase() {
+ typedef std::pair<SuccessorClass*, IntegersSubset> Case;
+ typedef std::list<Case> Cases;
+
+ IntegersSubsetMapping() {
Items.reserve(32);
Sorted = false;
}
@@ -164,7 +198,7 @@ public:
/// Adds all ranges and values from given ranges set to the current
/// CRSBuilder object.
- void add(const ConstantRangesSet &CRS, SuccessorClass *S = 0) {
+ void add(const IntegersSubset &CRS, SuccessorClass *S = 0) {
for (unsigned i = 0, e = CRS.getNumItems(); i < e; ++i) {
RangeTy R = CRS.getItem(i);
add(R, S);
@@ -174,59 +208,6 @@ public:
/// Removes items from set.
void removeItem(RangeIterator i) { Items.erase(i); }
- /// Returns true if there is no ranges and values inside.
- bool empty() const { return Items.empty(); }
-
- RangeIterator begin() { return Items.begin(); }
- RangeIterator end() { return Items.end(); }
-};
-
-template <class SuccessorClass>
-class CRSBuilderT : public CRSBuilderBase<SuccessorClass> {
-public:
-
- typedef typename CRSBuilderBase<SuccessorClass>::RangeTy RangeTy;
- typedef typename CRSBuilderBase<SuccessorClass>::RangeIterator
- RangeIterator;
-
-private:
-
- typedef std::list<RangeTy> RangesCollection;
- typedef typename RangesCollection::iterator RangesCollectionIt;
-
- typedef std::map<SuccessorClass*, RangesCollection > CRSMap;
- typedef typename CRSMap::iterator CRSMapIt;
-
- ConstantRangesSet getCase(RangesCollection& Src) {
- std::vector<Constant*> Elts;
- Elts.reserve(Src.size());
- for (RangesCollectionIt i = Src.begin(), e = Src.end(); i != e; ++i) {
- RangeTy &R = *i;
- std::vector<Constant*> r;
- if (R.isSingleNumber()) {
- r.reserve(2);
- // FIXME: Since currently we have ConstantInt based numbers
- // use hack-conversion of IntItem to ConstantInt
- r.push_back(R.Low.toConstantInt());
- r.push_back(R.High.toConstantInt());
- } else {
- r.reserve(1);
- r.push_back(R.Low.toConstantInt());
- }
- Constant *CV = ConstantVector::get(r);
- Elts.push_back(CV);
- }
- ArrayType *ArrTy =
- ArrayType::get(Elts.front()->getType(), (uint64_t)Elts.size());
- Constant *Array = ConstantArray::get(ArrTy, Elts);
- return ConstantRangesSet(Array);
- }
-
-public:
-
- typedef std::pair<SuccessorClass*, ConstantRangesSet> Case;
- typedef std::list<Case> Cases;
-
/// Builds the finalized case objects.
void getCases(Cases& TheCases) {
CRSMap TheCRSMap;
@@ -238,17 +219,22 @@ public:
/// Builds the finalized case objects ignoring successor values, as though
/// all ranges belongs to the same successor.
- ConstantRangesSet getCase() {
+ IntegersSubset getCase() {
RangesCollection Ranges;
for (RangeIterator i = this->begin(); i != this->end(); ++i)
Ranges.push_back(i->first);
return getCase(Ranges);
- }
+ }
+
+ /// Returns true if there is no ranges and values inside.
+ bool empty() const { return Items.empty(); }
+
+ RangeIterator begin() { return Items.begin(); }
+ RangeIterator end() { return Items.end(); }
};
class BasicBlock;
-typedef CRSBuilderT<BasicBlock> CRSBuilder;
-typedef CRSBuilderBase<BasicBlock> CRSBuilderConst;
+typedef IntegersSubsetMapping<BasicBlock> IntegersSubsetToBB;
}