[turbofan] Fix array masking for the length==index case.

Bug: chromium:798964
Change-Id: I48d6662d60765f04004b324f67ed3aadf11ee07b
Reviewed-on: https://chromium-review.googlesource.com/854132
Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#50421}
This commit is contained in:
Jaroslav Sevcik 2018-01-08 16:37:44 +01:00 committed by Commit Bot
parent 784e2f5e00
commit f13540e96e

View File

@ -1300,9 +1300,12 @@ Node* EffectControlLinearizer::LowerMaskIndexWithBound(Node* node) {
if (mask_array_index_ == kMaskArrayIndex) { if (mask_array_index_ == kMaskArrayIndex) {
Node* limit = node->InputAt(1); Node* limit = node->InputAt(1);
Node* mask = __ Word32Sar(__ Word32Or(__ Int32Sub(limit, index), index), // mask = ((index - limit) & ~index) >> 31
// index = index & mask
Node* neg_index = __ Word32Xor(index, __ Int32Constant(-1));
Node* mask =
__ Word32Sar(__ Word32And(__ Int32Sub(index, limit), neg_index),
__ Int32Constant(31)); __ Int32Constant(31));
mask = __ Word32Xor(mask, __ Int32Constant(-1));
index = __ Word32And(index, mask); index = __ Word32And(index, mask);
} }
return index; return index;