mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -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(), | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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); } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user