Commit 26a2aee3 authored by Mike Stanton's avatar Mike Stanton Committed by Commit Bot

[Torque] Do Witness Rechecks() at loop starts

Since these Recheck() calls are usually combined with a bailout,
doing them at the end of loops means we have to increment one or
more bailout variables, which is hard to understand.

Change-Id: I595ea592f31762da5abd85bfa7556eb39e3c9430
Reviewed-on: https://chromium-review.googlesource.com/c/1478694Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
Commit-Queue: Michael Stanton <mvstanton@chromium.org>
Cr-Commit-Position: refs/heads/master@{#59727}
parent 723b16b0
......@@ -92,6 +92,8 @@ namespace array {
// Build a fast loop over the smi array.
for (; k < len; k++) {
fastO.Recheck() otherwise goto Bailout(k);
// Ensure that we haven't walked beyond a possibly updated length.
if (k >= fastO.Get().length) goto Bailout(k);
......@@ -105,7 +107,6 @@ namespace array {
}
}
label FoundHole {}
fastO.Recheck() otherwise goto Bailout(k + 1);
}
return True;
}
......
......@@ -107,6 +107,8 @@ namespace array_filter {
// Build a fast loop over the smi array.
for (; k < len; k++) {
fastO.Recheck() otherwise goto Bailout(k, to);
// Ensure that we haven't walked beyond a possibly updated length.
if (k >= fastO.Get().length) goto Bailout(k, to);
const value: Object = LoadElementNoHole<FixedArrayType>(fastO.Get(), k)
......@@ -128,7 +130,6 @@ namespace array_filter {
}
to = to + 1;
}
fastO.Recheck() otherwise goto Bailout(k + 1, to);
}
}
......
......@@ -77,12 +77,13 @@ namespace array_foreach {
// Build a fast loop over the smi array.
for (; k < len; k++) {
fastO.Recheck() otherwise goto Bailout(k);
// Ensure that we haven't walked beyond a possibly updated length.
if (k >= fastO.Get().length) goto Bailout(k);
const value: Object = LoadElementNoHole<FixedArrayType>(fastO.Get(), k)
otherwise continue;
Call(context, callbackfn, thisArg, value, k, fastO.Get());
fastO.Recheck() otherwise goto Bailout(k + 1);
}
}
......
......@@ -191,6 +191,8 @@ namespace array_map {
// Build a fast loop over the smi array.
// 7. Repeat, while k < len.
for (; k < len; k++) {
fastO.Recheck() otherwise goto Bailout(v, k);
// Ensure that we haven't walked beyond a possibly updated length.
if (k >= fastO.Get().length) goto Bailout(v, k);
......@@ -200,7 +202,6 @@ namespace array_map {
const result: Object =
Call(context, callbackfn, thisArg, value, k, fastO.Get());
v.StoreResult(k, result);
fastO.Recheck() otherwise goto Bailout(v, k + 1);
}
label FoundHole {
// Our output array must necessarily be holey because of holes in
......
......@@ -92,6 +92,8 @@ namespace array {
// Build a fast loop over the smi array.
for (; k < len; k++) {
fastO.Recheck() otherwise goto Bailout(k);
// Ensure that we haven't walked beyond a possibly updated length.
if (k >= fastO.Get().length) goto Bailout(k);
......@@ -105,7 +107,6 @@ namespace array {
}
}
label FoundHole {}
fastO.Recheck() otherwise goto Bailout(k + 1);
}
return False;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment