RegisterPressure: Hide non-const iterators of PressureDiff
It is too easy to accidentally violate the ordering requirements when modifying the PressureDiff entries through iterators. llvm-svn: 250590
This commit is contained in:
		
							parent
							
								
									7f47272cda
								
							
						
					
					
						commit
						96e411b90c
					
				| 
						 | 
					@ -125,11 +125,13 @@ class PressureDiff {
 | 
				
			||||||
  enum { MaxPSets = 16 };
 | 
					  enum { MaxPSets = 16 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PressureChange PressureChanges[MaxPSets];
 | 
					  PressureChange PressureChanges[MaxPSets];
 | 
				
			||||||
public:
 | 
					
 | 
				
			||||||
  typedef PressureChange* iterator;
 | 
					  typedef PressureChange* iterator;
 | 
				
			||||||
 | 
					  iterator nonconst_begin() { return &PressureChanges[0]; }
 | 
				
			||||||
 | 
					  iterator nonconst_end() { return &PressureChanges[MaxPSets]; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
  typedef const PressureChange* const_iterator;
 | 
					  typedef const PressureChange* const_iterator;
 | 
				
			||||||
  iterator begin() { return &PressureChanges[0]; }
 | 
					 | 
				
			||||||
  iterator end() { return &PressureChanges[MaxPSets]; }
 | 
					 | 
				
			||||||
  const_iterator begin() const { return &PressureChanges[0]; }
 | 
					  const_iterator begin() const { return &PressureChanges[0]; }
 | 
				
			||||||
  const_iterator end() const { return &PressureChanges[MaxPSets]; }
 | 
					  const_iterator end() const { return &PressureChanges[MaxPSets]; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -389,7 +389,7 @@ void PressureDiff::addPressureChange(unsigned RegUnit, bool IsDec,
 | 
				
			||||||
  int Weight = IsDec ? -PSetI.getWeight() : PSetI.getWeight();
 | 
					  int Weight = IsDec ? -PSetI.getWeight() : PSetI.getWeight();
 | 
				
			||||||
  for (; PSetI.isValid(); ++PSetI) {
 | 
					  for (; PSetI.isValid(); ++PSetI) {
 | 
				
			||||||
    // Find an existing entry in the pressure diff for this PSet.
 | 
					    // Find an existing entry in the pressure diff for this PSet.
 | 
				
			||||||
    PressureDiff::iterator I = begin(), E = end();
 | 
					    PressureDiff::iterator I = nonconst_begin(), E = nonconst_end();
 | 
				
			||||||
    for (; I != E && I->isValid(); ++I) {
 | 
					    for (; I != E && I->isValid(); ++I) {
 | 
				
			||||||
      if (I->getPSet() >= *PSetI)
 | 
					      if (I->getPSet() >= *PSetI)
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue