Fix bug in edge case in populating PointerMaps

If a live range was split immediately before an instruction that required a
safe-point pointer map, it was possible for the safe-point to incorrectly use the
register/stack slot information of the preceeding live range rather than the one
that actually covers the safe-point.

R=mstarzinger@chromium.org,vegorov@chromium.org

Review URL: https://chromiumcodereview.appspot.com/12040052

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13493 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
danno@chromium.org 2013-01-24 15:05:38 +00:00
parent dd92c41aa1
commit 3c52343738

View File

@ -1418,7 +1418,7 @@ void LAllocator::PopulatePointerMaps() {
LifetimePosition safe_point_pos =
LifetimePosition::FromInstructionIndex(safe_point);
LiveRange* cur = range;
while (cur != NULL && !cur->Covers(safe_point_pos.PrevInstruction())) {
while (cur != NULL && !cur->Covers(safe_point_pos)) {
cur = cur->next();
}
if (cur == NULL) continue;