Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(444)

Unified Diff: test/cctest/test-code-stub-assembler.cc

Issue 2497243002: [stubs] Port builtin for Array.push fast-case from Crankshaft to TF (Closed)
Patch Set: Fix GC mole Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/x64/code-stubs-x64.cc ('k') | test/mjsunit/array-push-hole-double.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-code-stub-assembler.cc
diff --git a/test/cctest/test-code-stub-assembler.cc b/test/cctest/test-code-stub-assembler.cc
index 7035d514fd6e162144af865b1050d60ccd1b880c..a1f733b8488d7f249a65d4ea91b07b7f90822d43 100644
--- a/test/cctest/test-code-stub-assembler.cc
+++ b/test/cctest/test-code-stub-assembler.cc
@@ -1797,5 +1797,136 @@ TEST(IsDebugActive) {
*debug_is_active = false;
}
+class AppendJSArrayCodeStubAssembler : public CodeStubAssembler {
+ public:
+ AppendJSArrayCodeStubAssembler(compiler::CodeAssemblerState* state,
+ ElementsKind kind)
+ : CodeStubAssembler(state), kind_(kind) {}
+
+ void TestAppendJSArrayImpl(Isolate* isolate, CodeAssemblerTester* tester,
+ Object* o1, Object* o2, Object* o3, Object* o4,
+ int initial_size, int result_size) {
+ typedef CodeStubAssembler::Variable Variable;
+ typedef CodeStubAssembler::Label Label;
+ Handle<JSArray> array = isolate->factory()->NewJSArray(
+ kind_, 2, initial_size, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE);
+ JSObject::SetElement(isolate, array, 0,
+ Handle<Smi>(Smi::FromInt(1), isolate), SLOPPY)
+ .Check();
+ JSObject::SetElement(isolate, array, 1,
+ Handle<Smi>(Smi::FromInt(2), isolate), SLOPPY)
+ .Check();
+ CodeStubArguments args(this, IntPtrConstant(kNumParams));
+ Variable arg_index(this, MachineType::PointerRepresentation());
+ Label bailout(this);
+ arg_index.Bind(IntPtrConstant(0));
+ Node* length = BuildAppendJSArray(
+ kind_, HeapConstant(Handle<HeapObject>(isolate->context(), isolate)),
+ HeapConstant(array), args, arg_index, &bailout);
+ Return(length);
+
+ Bind(&bailout);
+ Return(SmiTag(IntPtrAdd(arg_index.value(), IntPtrConstant(2))));
+
+ Handle<Code> code = tester->GenerateCode();
+ CHECK(!code.is_null());
+
+ FunctionTester ft(code, kNumParams);
+
+ Handle<Object> result =
+ ft.Call(Handle<Object>(o1, isolate), Handle<Object>(o2, isolate),
+ Handle<Object>(o3, isolate), Handle<Object>(o4, isolate))
+ .ToHandleChecked();
+
+ CHECK_EQ(kind_, array->GetElementsKind());
+ CHECK_EQ(result_size, Handle<Smi>::cast(result)->value());
+ CHECK_EQ(result_size, Smi::cast(array->length())->value());
+ Object* obj = *JSObject::GetElement(isolate, array, 2).ToHandleChecked();
+ CHECK_EQ(result_size < 3 ? isolate->heap()->undefined_value() : o1, obj);
+ obj = *JSObject::GetElement(isolate, array, 3).ToHandleChecked();
+ CHECK_EQ(result_size < 4 ? isolate->heap()->undefined_value() : o2, obj);
+ obj = *JSObject::GetElement(isolate, array, 4).ToHandleChecked();
+ CHECK_EQ(result_size < 5 ? isolate->heap()->undefined_value() : o3, obj);
+ obj = *JSObject::GetElement(isolate, array, 5).ToHandleChecked();
+ CHECK_EQ(result_size < 6 ? isolate->heap()->undefined_value() : o4, obj);
+ }
+
+ static void TestAppendJSArray(Isolate* isolate, ElementsKind kind, Object* o1,
+ Object* o2, Object* o3, Object* o4,
+ int initial_size, int result_size) {
+ CodeAssemblerTester data(isolate, kNumParams);
+ AppendJSArrayCodeStubAssembler m(data.state(), kind);
+ m.TestAppendJSArrayImpl(isolate, &data, o1, o2, o3, o4, initial_size,
+ result_size);
+ }
+
+ private:
+ static const int kNumParams = 4;
+ ElementsKind kind_;
+};
+
+TEST(BuildAppendJSArrayFastElement) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4), Smi::FromInt(5),
+ Smi::FromInt(6), 6, 6);
+}
+
+TEST(BuildAppendJSArrayFastElementGrow) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4), Smi::FromInt(5),
+ Smi::FromInt(6), 2, 6);
+}
+
+TEST(BuildAppendJSArrayFastSmiElement) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_SMI_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4),
+ Smi::FromInt(5), Smi::FromInt(6), 6, 6);
+}
+
+TEST(BuildAppendJSArrayFastSmiElementGrow) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_SMI_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4),
+ Smi::FromInt(5), Smi::FromInt(6), 2, 6);
+}
+
+TEST(BuildAppendJSArrayFastSmiElementObject) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_SMI_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4),
+ isolate->heap()->undefined_value(), Smi::FromInt(6), 6, 4);
+}
+
+TEST(BuildAppendJSArrayFastSmiElementObjectGrow) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_SMI_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4),
+ isolate->heap()->undefined_value(), Smi::FromInt(6), 2, 4);
+}
+
+TEST(BuildAppendJSArrayFastDoubleElements) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_DOUBLE_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4),
+ Smi::FromInt(5), Smi::FromInt(6), 6, 6);
+}
+
+TEST(BuildAppendJSArrayFastDoubleElementsGrow) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_DOUBLE_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4),
+ Smi::FromInt(5), Smi::FromInt(6), 2, 6);
+}
+
+TEST(BuildAppendJSArrayFastDoubleElementsObject) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ AppendJSArrayCodeStubAssembler::TestAppendJSArray(
+ isolate, FAST_DOUBLE_ELEMENTS, Smi::FromInt(3), Smi::FromInt(4),
+ isolate->heap()->undefined_value(), Smi::FromInt(6), 6, 4);
+}
+
} // namespace internal
} // namespace v8
« no previous file with comments | « src/x64/code-stubs-x64.cc ('k') | test/mjsunit/array-push-hole-double.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698