| Index: test/unittests/compiler/js-typed-lowering-unittest.cc
|
| diff --git a/test/unittests/compiler/js-typed-lowering-unittest.cc b/test/unittests/compiler/js-typed-lowering-unittest.cc
|
| index 82c216283880ec536a54fc4a9c7e84ce6f3d8280..4e2cf084be24d17ef94c75c1b29ea381381963eb 100644
|
| --- a/test/unittests/compiler/js-typed-lowering-unittest.cc
|
| +++ b/test/unittests/compiler/js-typed-lowering-unittest.cc
|
| @@ -67,6 +67,7 @@ Type* const kJSTypes[] = {Type::Undefined(), Type::Null(), Type::Boolean(),
|
|
|
| STATIC_ASSERT(LANGUAGE_END == 3);
|
| const LanguageMode kLanguageModes[] = {SLOPPY, STRICT, STRONG};
|
| +const LanguageMode kLanguageModesForStrength[] = {SLOPPY, STRONG};
|
|
|
| } // namespace
|
|
|
| @@ -651,33 +652,35 @@ TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArray) {
|
| VectorSlotPair feedback(Handle<TypeFeedbackVector>::null(),
|
| FeedbackVectorICSlot::Invalid());
|
| TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) {
|
| - Handle<JSTypedArray> array =
|
| - factory()->NewJSTypedArray(type, buffer, 0, kLength);
|
| - int const element_size = static_cast<int>(array->element_size());
|
| -
|
| - Node* key = Parameter(
|
| - Type::Range(kMinInt / element_size, kMaxInt / element_size, zone()));
|
| - Node* base = HeapConstant(array);
|
| - Node* context = UndefinedConstant();
|
| - Node* effect = graph()->start();
|
| - Node* control = graph()->start();
|
| - Reduction r = Reduce(graph()->NewNode(javascript()->LoadProperty(feedback),
|
| - base, key, context, EmptyFrameState(),
|
| - EmptyFrameState(), effect, control));
|
| + TRACED_FOREACH(LanguageMode, language_mode, kLanguageModesForStrength) {
|
| + Handle<JSTypedArray> array =
|
| + factory()->NewJSTypedArray(type, buffer, 0, kLength);
|
| + int const element_size = static_cast<int>(array->element_size());
|
|
|
| - Matcher<Node*> offset_matcher =
|
| - element_size == 1
|
| - ? key
|
| - : IsWord32Shl(key, IsInt32Constant(WhichPowerOf2(element_size)));
|
| + Node* key = Parameter(
|
| + Type::Range(kMinInt / element_size, kMaxInt / element_size, zone()));
|
| + Node* base = HeapConstant(array);
|
| + Node* context = UndefinedConstant();
|
| + Node* effect = graph()->start();
|
| + Node* control = graph()->start();
|
| + Reduction r = Reduce(graph()->NewNode(
|
| + javascript()->LoadProperty(feedback, language_mode), base, key,
|
| + context, EmptyFrameState(), EmptyFrameState(), effect, control));
|
|
|
| - ASSERT_TRUE(r.Changed());
|
| - EXPECT_THAT(
|
| - r.replacement(),
|
| - IsLoadBuffer(BufferAccess(type),
|
| - IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
|
| - offset_matcher,
|
| - IsNumberConstant(array->byte_length()->Number()), effect,
|
| - control));
|
| + Matcher<Node*> offset_matcher =
|
| + element_size == 1
|
| + ? key
|
| + : IsWord32Shl(key, IsInt32Constant(WhichPowerOf2(element_size)));
|
| +
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(
|
| + r.replacement(),
|
| + IsLoadBuffer(BufferAccess(type),
|
| + IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
|
| + offset_matcher,
|
| + IsNumberConstant(array->byte_length()->Number()), effect,
|
| + control));
|
| + }
|
| }
|
| }
|
|
|
| @@ -690,28 +693,30 @@ TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArrayWithSafeKey) {
|
| VectorSlotPair feedback(Handle<TypeFeedbackVector>::null(),
|
| FeedbackVectorICSlot::Invalid());
|
| TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) {
|
| - Handle<JSTypedArray> array =
|
| - factory()->NewJSTypedArray(type, buffer, 0, kLength);
|
| - ElementAccess access = AccessBuilder::ForTypedArrayElement(type, true);
|
| -
|
| - int min = random_number_generator()->NextInt(static_cast<int>(kLength));
|
| - int max = random_number_generator()->NextInt(static_cast<int>(kLength));
|
| - if (min > max) std::swap(min, max);
|
| - Node* key = Parameter(Type::Range(min, max, zone()));
|
| - Node* base = HeapConstant(array);
|
| - Node* context = UndefinedConstant();
|
| - Node* effect = graph()->start();
|
| - Node* control = graph()->start();
|
| - Reduction r = Reduce(graph()->NewNode(javascript()->LoadProperty(feedback),
|
| - base, key, context, EmptyFrameState(),
|
| - EmptyFrameState(), effect, control));
|
| + TRACED_FOREACH(LanguageMode, language_mode, kLanguageModesForStrength) {
|
| + Handle<JSTypedArray> array =
|
| + factory()->NewJSTypedArray(type, buffer, 0, kLength);
|
| + ElementAccess access = AccessBuilder::ForTypedArrayElement(type, true);
|
|
|
| - ASSERT_TRUE(r.Changed());
|
| - EXPECT_THAT(
|
| - r.replacement(),
|
| - IsLoadElement(access,
|
| - IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
|
| - key, effect, control));
|
| + int min = random_number_generator()->NextInt(static_cast<int>(kLength));
|
| + int max = random_number_generator()->NextInt(static_cast<int>(kLength));
|
| + if (min > max) std::swap(min, max);
|
| + Node* key = Parameter(Type::Range(min, max, zone()));
|
| + Node* base = HeapConstant(array);
|
| + Node* context = UndefinedConstant();
|
| + Node* effect = graph()->start();
|
| + Node* control = graph()->start();
|
| + Reduction r = Reduce(graph()->NewNode(
|
| + javascript()->LoadProperty(feedback, language_mode), base, key,
|
| + context, EmptyFrameState(), EmptyFrameState(), effect, control));
|
| +
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(
|
| + r.replacement(),
|
| + IsLoadElement(access,
|
| + IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
|
| + key, effect, control));
|
| + }
|
| }
|
| }
|
|
|
| @@ -885,14 +890,16 @@ TEST_F(JSTypedLoweringTest, JSLoadNamedGlobalConstants) {
|
| Node* effect = graph()->start();
|
| Node* control = graph()->start();
|
|
|
| - for (size_t i = 0; i < arraysize(names); i++) {
|
| - Unique<Name> name = Unique<Name>::CreateImmovable(names[i]);
|
| - Reduction r = Reduce(graph()->NewNode(
|
| - javascript()->LoadNamed(name, feedback), global, context,
|
| - EmptyFrameState(), EmptyFrameState(), effect, control));
|
| + TRACED_FOREACH(LanguageMode, language_mode, kLanguageModesForStrength) {
|
| + for (size_t i = 0; i < arraysize(names); i++) {
|
| + Unique<Name> name = Unique<Name>::CreateImmovable(names[i]);
|
| + Reduction r = Reduce(graph()->NewNode(
|
| + javascript()->LoadNamed(name, feedback, language_mode), global,
|
| + context, EmptyFrameState(), EmptyFrameState(), effect, control));
|
|
|
| - ASSERT_TRUE(r.Changed());
|
| - EXPECT_THAT(r.replacement(), matches[i]);
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(r.replacement(), matches[i]);
|
| + }
|
| }
|
| }
|
|
|
|
|