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

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

Issue 2570213002: [stubs] Enable machine graph verification for CodeStubAssembler and friends by default in debug mode (Closed)
Patch Set: Created 4 years 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 | « test/cctest/test-accessor-assembler.cc ('k') | no next file » | 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 8fb709eff8ae627e83475af7f2bb3814df96498d..f81dce128b2859895aacd3f7c700e1cd0c4bcd6c 100644
--- a/test/cctest/test-code-stub-assembler.cc
+++ b/test/cctest/test-code-stub-assembler.cc
@@ -16,6 +16,9 @@ namespace internal {
using compiler::CodeAssemblerTester;
using compiler::FunctionTester;
using compiler::Node;
+using compiler::CodeAssemblerLabel;
+using compiler::CodeAssemblerVariable;
+using compiler::CodeAssemblerVariableList;
TEST(FixedArrayAccessSmiIndex) {
Isolate* isolate(CcTest::InitIsolateOnce());
@@ -37,7 +40,7 @@ TEST(LoadHeapNumberValue) {
CodeAssemblerTester data(isolate);
CodeStubAssembler m(data.state());
Handle<HeapNumber> number = isolate->factory()->NewHeapNumber(1234);
- m.Return(m.SmiTag(
+ m.Return(m.SmiFromWord32(
m.ChangeFloat64ToUint32(m.LoadHeapNumberValue(m.HeapConstant(number)))));
Handle<Code> code = data.GenerateCode();
FunctionTester ft(code);
@@ -50,7 +53,7 @@ TEST(LoadInstanceType) {
CodeAssemblerTester data(isolate);
CodeStubAssembler m(data.state());
Handle<HeapObject> undefined = isolate->factory()->undefined_value();
- m.Return(m.SmiTag(m.LoadInstanceType(m.HeapConstant(undefined))));
+ m.Return(m.SmiFromWord32(m.LoadInstanceType(m.HeapConstant(undefined))));
Handle<Code> code = data.GenerateCode();
FunctionTester ft(code);
MaybeHandle<Object> result = ft.Call();
@@ -98,7 +101,7 @@ TEST(ComputeIntegerHash) {
CodeAssemblerTester data(isolate, kNumParams);
CodeStubAssembler m(data.state());
m.Return(m.SmiFromWord32(m.ComputeIntegerHash(
- m.SmiToWord32(m.Parameter(0)), m.SmiToWord32(m.Parameter(1)))));
+ m.SmiUntag(m.Parameter(0)), m.SmiToWord32(m.Parameter(1)))));
Handle<Code> code = data.GenerateCode();
FunctionTester ft(code, kNumParams);
@@ -218,8 +221,8 @@ TEST(FlattenString) {
}
TEST(TryToName) {
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
+ typedef CodeAssemblerLabel Label;
+ typedef CodeAssemblerVariable Variable;
Isolate* isolate(CcTest::InitIsolateOnce());
const int kNumParams = 3;
@@ -383,8 +386,8 @@ namespace {
template <typename Dictionary>
void TestNameDictionaryLookup() {
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
+ typedef CodeAssemblerLabel Label;
+ typedef CodeAssemblerVariable Variable;
Isolate* isolate(CcTest::InitIsolateOnce());
const int kNumParams = 4;
@@ -408,7 +411,7 @@ void TestNameDictionaryLookup() {
m.GotoUnless(
m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kFound))),
&failed);
- m.Branch(m.Word32Equal(m.SmiToWord32(expected_arg), var_name_index.value()),
+ m.Branch(m.WordEqual(m.SmiUntag(expected_arg), var_name_index.value()),
&passed, &failed);
m.Bind(&if_not_found);
@@ -490,8 +493,8 @@ namespace {
template <typename Dictionary>
void TestNumberDictionaryLookup() {
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
+ typedef CodeAssemblerLabel Label;
+ typedef CodeAssemblerVariable Variable;
Isolate* isolate(CcTest::InitIsolateOnce());
const int kNumParams = 4;
@@ -501,7 +504,7 @@ void TestNumberDictionaryLookup() {
enum Result { kFound, kNotFound };
{
Node* dictionary = m.Parameter(0);
- Node* key = m.SmiToWord32(m.Parameter(1));
+ Node* key = m.SmiUntag(m.Parameter(1));
Node* expected_result = m.Parameter(2);
Node* expected_arg = m.Parameter(3);
@@ -515,8 +518,8 @@ void TestNumberDictionaryLookup() {
m.GotoUnless(
m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kFound))),
&failed);
- m.Branch(m.Word32Equal(m.SmiToWord32(expected_arg), var_entry.value()),
- &passed, &failed);
+ m.Branch(m.WordEqual(m.SmiUntag(expected_arg), var_entry.value()), &passed,
+ &failed);
m.Bind(&if_not_found);
m.Branch(
@@ -629,7 +632,7 @@ void AddProperties(Handle<JSObject> object, Handle<Name> names[],
} // namespace
TEST(TryHasOwnProperty) {
- typedef CodeStubAssembler::Label Label;
+ typedef CodeAssemblerLabel Label;
Isolate* isolate(CcTest::InitIsolateOnce());
const int kNumParams = 4;
@@ -814,8 +817,8 @@ TEST(TryHasOwnProperty) {
}
TEST(TryGetOwnProperty) {
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
+ typedef CodeAssemblerLabel Label;
+ typedef CodeAssemblerVariable Variable;
Isolate* isolate(CcTest::InitIsolateOnce());
Factory* factory = isolate->factory();
@@ -1033,7 +1036,7 @@ void AddElement(Handle<JSObject> object, uint32_t index, Handle<Object> value,
} // namespace
TEST(TryLookupElement) {
- typedef CodeStubAssembler::Label Label;
+ typedef CodeAssemblerLabel Label;
Isolate* isolate(CcTest::InitIsolateOnce());
const int kNumParams = 3;
@@ -1043,7 +1046,7 @@ TEST(TryLookupElement) {
enum Result { kFound, kNotFound, kBailout };
{
Node* object = m.Parameter(0);
- Node* index = m.SmiToWord32(m.Parameter(1));
+ Node* index = m.SmiUntag(m.Parameter(1));
Node* expected_result = m.Parameter(2);
Label passed(&m), failed(&m);
@@ -1219,189 +1222,6 @@ TEST(TryLookupElement) {
}
}
-TEST(DeferredCodePhiHints) {
Igor Sheludko 2016/12/14 15:45:37 I moved this whole red block to test-code-assemble
- typedef compiler::Node Node;
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
- Isolate* isolate(CcTest::InitIsolateOnce());
- CodeAssemblerTester data(isolate);
- CodeStubAssembler m(data.state());
- Label block1(&m, Label::kDeferred);
- m.Goto(&block1);
- m.Bind(&block1);
- {
- Variable var_object(&m, MachineRepresentation::kTagged);
- Label loop(&m, &var_object);
- var_object.Bind(m.IntPtrConstant(0));
- m.Goto(&loop);
- m.Bind(&loop);
- {
- Node* map = m.LoadMap(var_object.value());
- var_object.Bind(map);
- m.Goto(&loop);
- }
- }
- CHECK(!data.GenerateCode().is_null());
-}
-
-TEST(TestOutOfScopeVariable) {
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
- Isolate* isolate(CcTest::InitIsolateOnce());
- CodeAssemblerTester data(isolate);
- CodeStubAssembler m(data.state());
- Label block1(&m);
- Label block2(&m);
- Label block3(&m);
- Label block4(&m);
- m.Branch(m.WordEqual(m.Parameter(0), m.IntPtrConstant(0)), &block1, &block4);
- m.Bind(&block4);
- {
- Variable var_object(&m, MachineRepresentation::kTagged);
- m.Branch(m.WordEqual(m.Parameter(0), m.IntPtrConstant(0)), &block2,
- &block3);
-
- m.Bind(&block2);
- var_object.Bind(m.IntPtrConstant(55));
- m.Goto(&block1);
-
- m.Bind(&block3);
- var_object.Bind(m.IntPtrConstant(66));
- m.Goto(&block1);
- }
- m.Bind(&block1);
- CHECK(!data.GenerateCode().is_null());
-}
-
-TEST(GotoIfException) {
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
- Isolate* isolate(CcTest::InitIsolateOnce());
-
- const int kNumParams = 1;
- CodeAssemblerTester data(isolate, kNumParams);
- CodeStubAssembler m(data.state());
-
- Node* context = m.HeapConstant(Handle<Context>(isolate->native_context()));
- Node* to_string_tag =
- m.HeapConstant(isolate->factory()->to_string_tag_symbol());
- Variable exception(&m, MachineRepresentation::kTagged);
-
- Label exception_handler(&m);
- Callable to_string = CodeFactory::ToString(isolate);
- Node* string = m.CallStub(to_string, context, to_string_tag);
- m.GotoIfException(string, &exception_handler, &exception);
- m.Return(string);
-
- m.Bind(&exception_handler);
- m.Return(exception.value());
-
- Handle<Code> code = data.GenerateCode();
- CHECK(!code.is_null());
-
- FunctionTester ft(code, kNumParams);
- Handle<Object> result = ft.Call().ToHandleChecked();
-
- // Should be a TypeError.
- CHECK(result->IsJSObject());
-
- Handle<Object> constructor =
- Object::GetPropertyOrElement(result,
- isolate->factory()->constructor_string())
- .ToHandleChecked();
- CHECK(constructor->SameValue(*isolate->type_error_function()));
-}
-
-TEST(GotoIfExceptionMultiple) {
- typedef CodeStubAssembler::Label Label;
- typedef CodeStubAssembler::Variable Variable;
- Isolate* isolate(CcTest::InitIsolateOnce());
-
- const int kNumParams = 4; // receiver, first, second, third
- CodeAssemblerTester data(isolate, kNumParams);
- CodeStubAssembler m(data.state());
-
- Node* context = m.HeapConstant(Handle<Context>(isolate->native_context()));
- Node* first_value = m.Parameter(0);
- Node* second_value = m.Parameter(1);
- Node* third_value = m.Parameter(2);
-
- Label exception_handler1(&m);
- Label exception_handler2(&m);
- Label exception_handler3(&m);
- Variable return_value(&m, MachineRepresentation::kWord32);
- Variable error(&m, MachineRepresentation::kTagged);
-
- return_value.Bind(m.Int32Constant(0));
-
- // try { return ToString(param1) } catch (e) { ... }
- Callable to_string = CodeFactory::ToString(isolate);
- Node* string = m.CallStub(to_string, context, first_value);
- m.GotoIfException(string, &exception_handler1, &error);
- m.Return(string);
-
- // try { ToString(param2); return 7 } catch (e) { ... }
- m.Bind(&exception_handler1);
- return_value.Bind(m.Int32Constant(7));
- error.Bind(m.UndefinedConstant());
- string = m.CallStub(to_string, context, second_value);
- m.GotoIfException(string, &exception_handler2, &error);
- m.Return(m.SmiFromWord32(return_value.value()));
-
- // try { ToString(param3); return 7 & ~2; } catch (e) { return e; }
- m.Bind(&exception_handler2);
- // Return returnValue & ~2
- error.Bind(m.UndefinedConstant());
- string = m.CallStub(to_string, context, third_value);
- m.GotoIfException(string, &exception_handler3, &error);
- m.Return(m.SmiFromWord32(
- m.Word32And(return_value.value(),
- m.Word32Xor(m.Int32Constant(2), m.Int32Constant(-1)))));
-
- m.Bind(&exception_handler3);
- m.Return(error.value());
-
- Handle<Code> code = data.GenerateCode();
- CHECK(!code.is_null());
-
- FunctionTester ft(code, kNumParams);
-
- Handle<Object> result;
- // First handler does not throw, returns result of first value.
- result = ft.Call(isolate->factory()->undefined_value(),
- isolate->factory()->to_string_tag_symbol())
- .ToHandleChecked();
- CHECK(String::cast(*result)->IsOneByteEqualTo(OneByteVector("undefined")));
-
- // First handler returns a number.
- result = ft.Call(isolate->factory()->to_string_tag_symbol(),
- isolate->factory()->undefined_value())
- .ToHandleChecked();
- CHECK_EQ(7, Smi::cast(*result)->value());
-
- // First handler throws, second handler returns a number.
- result = ft.Call(isolate->factory()->to_string_tag_symbol(),
- isolate->factory()->to_primitive_symbol())
- .ToHandleChecked();
- CHECK_EQ(7 & ~2, Smi::cast(*result)->value());
-
- // First handler throws, second handler throws, third handler returns thrown
- // value.
- result = ft.Call(isolate->factory()->to_string_tag_symbol(),
- isolate->factory()->to_primitive_symbol(),
- isolate->factory()->unscopables_symbol())
- .ToHandleChecked();
-
- // Should be a TypeError.
- CHECK(result->IsJSObject());
-
- Handle<Object> constructor =
- Object::GetPropertyOrElement(result,
- isolate->factory()->constructor_string())
- .ToHandleChecked();
- CHECK(constructor->SameValue(*isolate->type_error_function()));
-}
-
TEST(AllocateJSObjectFromMap) {
Isolate* isolate(CcTest::InitIsolateOnce());
Factory* factory = isolate->factory();
@@ -1705,7 +1525,7 @@ TEST(Arguments) {
CodeAssemblerTester data(isolate, kNumParams);
CodeStubAssembler m(data.state());
- CodeStubArguments arguments(&m, m.IntPtrConstant(3));
+ CodeStubArguments arguments(&m, m.Int32Constant(3));
CSA_ASSERT(
&m, m.WordEqual(arguments.AtIndex(0), m.SmiConstant(Smi::FromInt(12))));
@@ -1735,15 +1555,15 @@ TEST(ArgumentsForEach) {
CodeAssemblerTester data(isolate, kNumParams);
CodeStubAssembler m(data.state());
- CodeStubArguments arguments(&m, m.IntPtrConstant(3));
+ CodeStubArguments arguments(&m, m.Int32Constant(3));
- CodeStubAssembler::Variable sum(&m, MachineType::PointerRepresentation());
- CodeStubAssembler::VariableList list({&sum}, m.zone());
+ CodeAssemblerVariable sum(&m, MachineRepresentation::kTagged);
+ CodeAssemblerVariableList list({&sum}, m.zone());
- sum.Bind(m.IntPtrConstant(0));
+ sum.Bind(m.SmiConstant(0));
arguments.ForEach(
- list, [&m, &sum](Node* arg) { sum.Bind(m.IntPtrAdd(sum.value(), arg)); });
+ list, [&m, &sum](Node* arg) { sum.Bind(m.SmiAdd(sum.value(), arg)); });
m.Return(sum.value());
@@ -1766,7 +1586,7 @@ TEST(IsDebugActive) {
CodeAssemblerTester data(isolate, kNumParams);
CodeStubAssembler m(data.state());
- CodeStubAssembler::Label if_active(&m), if_not_active(&m);
+ CodeAssemblerLabel if_active(&m), if_not_active(&m);
m.Branch(m.IsDebugActive(), &if_active, &if_not_active);
m.Bind(&if_active);
@@ -1805,8 +1625,8 @@ class AppendJSArrayCodeStubAssembler : public CodeStubAssembler {
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;
+ typedef CodeAssemblerVariable Variable;
+ typedef CodeAssemblerLabel Label;
Handle<JSArray> array = isolate->factory()->NewJSArray(
kind_, 2, initial_size, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE);
JSObject::SetElement(isolate, array, 0,
@@ -1815,7 +1635,7 @@ class AppendJSArrayCodeStubAssembler : public CodeStubAssembler {
JSObject::SetElement(isolate, array, 1,
Handle<Smi>(Smi::FromInt(2), isolate), SLOPPY)
.Check();
- CodeStubArguments args(this, IntPtrConstant(kNumParams));
+ CodeStubArguments args(this, Int32Constant(kNumParams));
Variable arg_index(this, MachineType::PointerRepresentation());
Label bailout(this);
arg_index.Bind(IntPtrConstant(0));
« no previous file with comments | « test/cctest/test-accessor-assembler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698