[turbofan] Remove UnsafePointerAdd operation in TypedArray accesses.

A previous CL lowered NumberConstant nodes into IntPtrConstant nodes during
simplified lowering. It inadvertently disabled an optimization in TypeArray
accesses that relied on matching NumberConstant(0).

Bug: chromium:806727
Change-Id: If1938af057be66dea8edc588cc048a01410ca0ad
Reviewed-on: https://chromium-review.googlesource.com/897494
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Pierre Langlois <pierre.langlois@arm.com>
Cr-Commit-Position: refs/heads/master@{#51092}
This commit is contained in:
Pierre Langlois 2018-02-01 11:30:20 +00:00 committed by Commit Bot
parent 23dd8ef207
commit 20a83e4ff0

View File

@ -3692,8 +3692,9 @@ Node* EffectControlLinearizer::LowerLoadTypedElement(Node* node) {
// Compute the effective storage pointer, handling the case where the
// {external} pointer is the effective storage pointer (i.e. the {base}
// is Smi zero).
Node* storage = NumberMatcher(base).Is(0) ? external : __ UnsafePointerAdd(
base, external);
Node* storage = IntPtrMatcher(base).Is(0)
? external
: __ UnsafePointerAdd(base, external);
// Perform the actual typed element access.
return __ LoadElement(AccessBuilder::ForTypedArrayElement(array_type, true),
@ -3715,8 +3716,9 @@ void EffectControlLinearizer::LowerStoreTypedElement(Node* node) {
// Compute the effective storage pointer, handling the case where the
// {external} pointer is the effective storage pointer (i.e. the {base}
// is Smi zero).
Node* storage = NumberMatcher(base).Is(0) ? external : __ UnsafePointerAdd(
base, external);
Node* storage = IntPtrMatcher(base).Is(0)
? external
: __ UnsafePointerAdd(base, external);
// Perform the actual typed element access.
__ StoreElement(AccessBuilder::ForTypedArrayElement(array_type, true),