| Index: src/compiler/js-intrinsic-lowering.cc
|
| diff --git a/src/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc
|
| index 31cfe1116daed9117578f3c33e47c45ea3a64a9e..fd222d71fd1135ac2c0c5b33f47ad38865b99578 100644
|
| --- a/src/compiler/js-intrinsic-lowering.cc
|
| +++ b/src/compiler/js-intrinsic-lowering.cc
|
| @@ -76,8 +76,17 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
|
| return ReduceCall(node);
|
| case Runtime::kInlineGetSuperConstructor:
|
| return ReduceGetSuperConstructor(node);
|
| + case Runtime::kInlineArrayBufferViewGetByteLength:
|
| + return ReduceArrayBufferViewField(
|
| + node, AccessBuilder::ForJSArrayBufferViewByteLength());
|
| + case Runtime::kInlineArrayBufferViewGetByteOffset:
|
| + return ReduceArrayBufferViewField(
|
| + node, AccessBuilder::ForJSArrayBufferViewByteOffset());
|
| case Runtime::kInlineMaxSmi:
|
| return ReduceMaxSmi(node);
|
| + case Runtime::kInlineTypedArrayGetLength:
|
| + return ReduceArrayBufferViewField(node,
|
| + AccessBuilder::ForJSTypedArrayLength());
|
| case Runtime::kInlineTypedArrayMaxSizeInHeap:
|
| return ReduceTypedArrayMaxSizeInHeap(node);
|
| case Runtime::kInlineJSCollectionGetTable:
|
| @@ -321,6 +330,32 @@ Reduction JSIntrinsicLowering::ReduceGetSuperConstructor(Node* node) {
|
| active_function_map, effect, control);
|
| }
|
|
|
| +Reduction JSIntrinsicLowering::ReduceArrayBufferViewField(
|
| + Node* node, FieldAccess const& access) {
|
| + Node* receiver = NodeProperties::GetValueInput(node, 0);
|
| + Node* effect = NodeProperties::GetEffectInput(node);
|
| + Node* control = NodeProperties::GetControlInput(node);
|
| +
|
| + // Load the {receiver}s field.
|
| + Node* value = effect = graph()->NewNode(simplified()->LoadField(access),
|
| + receiver, effect, control);
|
| +
|
| + // Check if the {receiver}s buffer was neutered.
|
| + Node* receiver_buffer = effect = graph()->NewNode(
|
| + simplified()->LoadField(AccessBuilder::ForJSArrayBufferViewBuffer()),
|
| + receiver, effect, control);
|
| + Node* check = effect = graph()->NewNode(
|
| + simplified()->ArrayBufferWasNeutered(), receiver_buffer, effect, control);
|
| +
|
| + // Default to zero if the {receiver}s buffer was neutered.
|
| + value = graph()->NewNode(
|
| + common()->Select(MachineRepresentation::kTagged, BranchHint::kFalse),
|
| + check, jsgraph()->ZeroConstant(), value);
|
| +
|
| + ReplaceWithValue(node, value, effect, control);
|
| + return Replace(value);
|
| +}
|
| +
|
| Reduction JSIntrinsicLowering::ReduceMaxSmi(Node* node) {
|
| Node* value = jsgraph()->Constant(Smi::kMaxValue);
|
| ReplaceWithValue(node, value);
|
|
|