diff options
author | Matthias Braun <matze@braunis.de> | 2015-10-17 00:08:48 +0000 |
---|---|---|
committer | Matthias Braun <matze@braunis.de> | 2015-10-17 00:08:48 +0000 |
commit | 96e411b90c5896119e3479b25dba939e799773d9 (patch) | |
tree | a3e00b7690c8fd84f6caa17d6b8d113fc48467cf | |
parent | 7f47272cda6456a48a48150241672ab8931769ce (diff) | |
download | bcm5719-llvm-96e411b90c5896119e3479b25dba939e799773d9.tar.gz bcm5719-llvm-96e411b90c5896119e3479b25dba939e799773d9.zip |
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
-rw-r--r-- | llvm/include/llvm/CodeGen/RegisterPressure.h | 8 | ||||
-rw-r--r-- | llvm/lib/CodeGen/RegisterPressure.cpp | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/llvm/include/llvm/CodeGen/RegisterPressure.h b/llvm/include/llvm/CodeGen/RegisterPressure.h index c64087c5965..dd549da02c6 100644 --- a/llvm/include/llvm/CodeGen/RegisterPressure.h +++ b/llvm/include/llvm/CodeGen/RegisterPressure.h @@ -125,11 +125,13 @@ class PressureDiff { enum { MaxPSets = 16 }; PressureChange PressureChanges[MaxPSets]; -public: + typedef PressureChange* iterator; + iterator nonconst_begin() { return &PressureChanges[0]; } + iterator nonconst_end() { return &PressureChanges[MaxPSets]; } + +public: typedef const PressureChange* const_iterator; - iterator begin() { return &PressureChanges[0]; } - iterator end() { return &PressureChanges[MaxPSets]; } const_iterator begin() const { return &PressureChanges[0]; } const_iterator end() const { return &PressureChanges[MaxPSets]; } diff --git a/llvm/lib/CodeGen/RegisterPressure.cpp b/llvm/lib/CodeGen/RegisterPressure.cpp index 87c3d46866e..88566d88732 100644 --- a/llvm/lib/CodeGen/RegisterPressure.cpp +++ b/llvm/lib/CodeGen/RegisterPressure.cpp @@ -389,7 +389,7 @@ void PressureDiff::addPressureChange(unsigned RegUnit, bool IsDec, int Weight = IsDec ? -PSetI.getWeight() : PSetI.getWeight(); for (; PSetI.isValid(); ++PSetI) { // 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) { if (I->getPSet() >= *PSetI) break; |