| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler/js-native-context-specialization.h" | 5 #include "src/compiler/js-native-context-specialization.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
| 9 #include "src/compilation-dependencies.h" | 9 #include "src/compilation-dependencies.h" |
| 10 #include "src/compiler/access-builder.h" | 10 #include "src/compiler/access-builder.h" |
| (...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 base_pointer = effect = graph()->NewNode( | 1206 base_pointer = effect = graph()->NewNode( |
| 1207 simplified()->LoadField( | 1207 simplified()->LoadField( |
| 1208 AccessBuilder::ForFixedTypedArrayBaseBasePointer()), | 1208 AccessBuilder::ForFixedTypedArrayBaseBasePointer()), |
| 1209 elements, effect, control); | 1209 elements, effect, control); |
| 1210 external_pointer = effect = graph()->NewNode( | 1210 external_pointer = effect = graph()->NewNode( |
| 1211 simplified()->LoadField( | 1211 simplified()->LoadField( |
| 1212 AccessBuilder::ForFixedTypedArrayBaseExternalPointer()), | 1212 AccessBuilder::ForFixedTypedArrayBaseExternalPointer()), |
| 1213 elements, effect, control); | 1213 elements, effect, control); |
| 1214 } | 1214 } |
| 1215 | 1215 |
| 1216 // Default to zero if the {receiver}s buffer was neutered. | 1216 // See if we can skip the neutering check. |
| 1217 Node* check = effect = graph()->NewNode( | 1217 if (isolate()->IsArrayBufferNeuteringIntact()) { |
| 1218 simplified()->ArrayBufferWasNeutered(), buffer, effect, control); | 1218 // Add a code dependency so we are deoptimized in case an ArrayBuffer |
| 1219 length = graph()->NewNode( | 1219 // gets neutered. |
| 1220 common()->Select(MachineRepresentation::kTagged, BranchHint::kFalse), | 1220 dependencies()->AssumePropertyCell( |
| 1221 check, jsgraph()->ZeroConstant(), length); | 1221 factory()->array_buffer_neutering_protector()); |
| 1222 } else { |
| 1223 // Default to zero if the {receiver}s buffer was neutered. |
| 1224 Node* check = effect = graph()->NewNode( |
| 1225 simplified()->ArrayBufferWasNeutered(), buffer, effect, control); |
| 1226 length = graph()->NewNode( |
| 1227 common()->Select(MachineRepresentation::kTagged, BranchHint::kFalse), |
| 1228 check, jsgraph()->ZeroConstant(), length); |
| 1229 } |
| 1222 | 1230 |
| 1223 if (store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS) { | 1231 if (store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS) { |
| 1224 // Check that the {index} is a valid array index, we do the actual | 1232 // Check that the {index} is a valid array index, we do the actual |
| 1225 // bounds check below and just skip the store below if it's out of | 1233 // bounds check below and just skip the store below if it's out of |
| 1226 // bounds for the {receiver}. | 1234 // bounds for the {receiver}. |
| 1227 index = effect = graph()->NewNode(simplified()->CheckBounds(), index, | 1235 index = effect = graph()->NewNode(simplified()->CheckBounds(), index, |
| 1228 jsgraph()->Constant(Smi::kMaxValue), | 1236 jsgraph()->Constant(Smi::kMaxValue), |
| 1229 effect, control); | 1237 effect, control); |
| 1230 } else { | 1238 } else { |
| 1231 // Check that the {index} is in the valid range for the {receiver}. | 1239 // Check that the {index} is in the valid range for the {receiver}. |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1707 return jsgraph()->javascript(); | 1715 return jsgraph()->javascript(); |
| 1708 } | 1716 } |
| 1709 | 1717 |
| 1710 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { | 1718 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { |
| 1711 return jsgraph()->simplified(); | 1719 return jsgraph()->simplified(); |
| 1712 } | 1720 } |
| 1713 | 1721 |
| 1714 } // namespace compiler | 1722 } // namespace compiler |
| 1715 } // namespace internal | 1723 } // namespace internal |
| 1716 } // namespace v8 | 1724 } // namespace v8 |
| OLD | NEW |