| Index: src/compiler/simplified-operator-reducer.cc
|
| diff --git a/src/compiler/simplified-operator-reducer.cc b/src/compiler/simplified-operator-reducer.cc
|
| index f6181ea988ffca2e432ce7afd0847578ace1e8e2..49b87b22a1aa036f15ccaee3028d6b90131f910c 100644
|
| --- a/src/compiler/simplified-operator-reducer.cc
|
| +++ b/src/compiler/simplified-operator-reducer.cc
|
| @@ -12,6 +12,10 @@ namespace v8 {
|
| namespace internal {
|
| namespace compiler {
|
|
|
| +SimplifiedOperatorReducer::SimplifiedOperatorReducer(JSGraph* jsgraph)
|
| + : jsgraph_(jsgraph), simplified_(jsgraph->zone()) {}
|
| +
|
| +
|
| SimplifiedOperatorReducer::~SimplifiedOperatorReducer() {}
|
|
|
|
|
| @@ -95,6 +99,38 @@ Reduction SimplifiedOperatorReducer::Reduce(Node* node) {
|
| if (m.HasValue()) return ReplaceNumber(FastUI2D(m.Value()));
|
| break;
|
| }
|
| + case IrOpcode::kLoadElement: {
|
| + ElementAccess access = ElementAccessOf(node->op());
|
| + if (access.bounds_check == kTypedArrayBoundsCheck) {
|
| + NumericValueMatcher mkey(node->InputAt(1));
|
| + NumericValueMatcher mlength(node->InputAt(2));
|
| + if (mkey.HasValue() && mlength.HasValue()) {
|
| + // Skip the typed array bounds check if key and length are constant.
|
| + if (mkey.Value() < mlength.Value()) {
|
| + access.bounds_check = kNoBoundsCheck;
|
| + node->set_op(simplified()->LoadElement(access));
|
| + return Changed(node);
|
| + }
|
| + }
|
| + }
|
| + break;
|
| + }
|
| + case IrOpcode::kStoreElement: {
|
| + ElementAccess access = ElementAccessOf(node->op());
|
| + if (access.bounds_check == kTypedArrayBoundsCheck) {
|
| + NumericValueMatcher mkey(node->InputAt(1));
|
| + NumericValueMatcher mlength(node->InputAt(2));
|
| + if (mkey.HasValue() && mlength.HasValue()) {
|
| + // Skip the typed array bounds check if key and length are constant.
|
| + if (mkey.Value() < mlength.Value()) {
|
| + access.bounds_check = kNoBoundsCheck;
|
| + node->set_op(simplified()->StoreElement(access));
|
| + return Changed(node);
|
| + }
|
| + }
|
| + }
|
| + break;
|
| + }
|
| default:
|
| break;
|
| }
|
|
|