Skip to content

Commit

Permalink
Stop using Vector::unsafeAppendWithoutCapacityCheck() in AirAllocateR…
Browse files Browse the repository at this point in the history
…egistersByGraphColoring.cpp

https://bugs.webkit.org/show_bug.cgi?id=265005

Reviewed by Darin Adler.

* Source/JavaScriptCore/b3/air/AirAllocateRegistersByGraphColoring.cpp:

Canonical link: https://commits.webkit.org/270907@main
  • Loading branch information
cdumez committed Nov 17, 2023
1 parent 73ee3b0 commit dd7600e
Showing 1 changed file with 13 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,9 @@ class AbstractColoringAllocator {
const auto& adjacentsOfU = m_adjacencyList[u];
const auto& adjacentsOfV = m_adjacencyList[v];

Vector<IndexType, MacroAssembler::numGPRs + MacroAssembler::numFPRs> highOrderAdjacents;
std::array<IndexType, MacroAssembler::numGPRs + MacroAssembler::numFPRs> highOrderAdjacents;
size_t highOrderAdjacentsSize = 0;

RELEASE_ASSERT(registerCount() <= MacroAssembler::numGPRs + MacroAssembler::numFPRs);
unsigned numCandidates = adjacentsOfU.size() + adjacentsOfV.size();
if (numCandidates < registerCount()) {
Expand All @@ -228,33 +230,33 @@ class AbstractColoringAllocator {
ASSERT(adjacentTmpIndex != u);
numCandidates--;
if (!hasBeenSimplified(adjacentTmpIndex) && m_degrees[adjacentTmpIndex] >= registerCount()) {
ASSERT(std::find(highOrderAdjacents.begin(), highOrderAdjacents.end(), adjacentTmpIndex) == highOrderAdjacents.end());
highOrderAdjacents.unsafeAppendWithoutCapacityCheck(adjacentTmpIndex);
if (highOrderAdjacents.size() >= registerCount())
ASSERT(std::find(highOrderAdjacents.begin(), highOrderAdjacents.begin() + highOrderAdjacentsSize, adjacentTmpIndex) == highOrderAdjacents.begin() + highOrderAdjacentsSize);
highOrderAdjacents[highOrderAdjacentsSize++] = adjacentTmpIndex;
if (highOrderAdjacentsSize >= registerCount())
return false;
} else if (highOrderAdjacents.size() + numCandidates < registerCount())
} else if (highOrderAdjacentsSize + numCandidates < registerCount())
return true;
}
ASSERT(numCandidates == adjacentsOfV.size());

auto iteratorEndHighOrderAdjacentsOfU = highOrderAdjacents.end();
auto iteratorEndHighOrderAdjacentsOfU = highOrderAdjacents.begin() + highOrderAdjacentsSize;
for (IndexType adjacentTmpIndex : adjacentsOfV) {
ASSERT(adjacentTmpIndex != u);
ASSERT(adjacentTmpIndex != v);
numCandidates--;
if (!hasBeenSimplified(adjacentTmpIndex)
&& m_degrees[adjacentTmpIndex] >= registerCount()
&& std::find(highOrderAdjacents.begin(), iteratorEndHighOrderAdjacentsOfU, adjacentTmpIndex) == iteratorEndHighOrderAdjacentsOfU) {
ASSERT(std::find(iteratorEndHighOrderAdjacentsOfU, highOrderAdjacents.end(), adjacentTmpIndex) == highOrderAdjacents.end());
highOrderAdjacents.unsafeAppendWithoutCapacityCheck(adjacentTmpIndex);
if (highOrderAdjacents.size() >= registerCount())
ASSERT(std::find(iteratorEndHighOrderAdjacentsOfU, highOrderAdjacents.begin() + highOrderAdjacentsSize, adjacentTmpIndex) == highOrderAdjacents.begin() + highOrderAdjacentsSize);
highOrderAdjacents[highOrderAdjacentsSize++] = adjacentTmpIndex;
if (highOrderAdjacentsSize >= registerCount())
return false;
} else if (highOrderAdjacents.size() + numCandidates < registerCount())
} else if (highOrderAdjacentsSize + numCandidates < registerCount())
return true;
}

ASSERT(!numCandidates);
ASSERT(highOrderAdjacents.size() < registerCount());
ASSERT(highOrderAdjacentsSize < registerCount());
return true;
}

Expand Down

0 comments on commit dd7600e

Please sign in to comment.