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

Side by Side Diff: test/cctest/interpreter/test-interpreter.cc

Issue 2506013005: [Interpreter] Collect String feedback on CompareOps. (Closed)
Patch Set: Fix kAny 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 unified diff | Download patch
« no previous file with comments | « src/type-info.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <tuple> 5 #include <tuple>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/execution.h" 9 #include "src/execution.h"
10 #include "src/handles.h" 10 #include "src/handles.h"
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 isolate->factory()->NewHeapNumber(Smi::kMaxValue + 1.0), 548 isolate->factory()->NewHeapNumber(Smi::kMaxValue + 1.0),
549 BinaryOperationFeedback::kNumber}, 549 BinaryOperationFeedback::kNumber},
550 {Token::Value::ADD, isolate->factory()->NewHeapNumber(3.1415), 550 {Token::Value::ADD, isolate->factory()->NewHeapNumber(3.1415),
551 Handle<Smi>(Smi::FromInt(3), isolate), 551 Handle<Smi>(Smi::FromInt(3), isolate),
552 isolate->factory()->NewHeapNumber(3.1415 + 3), 552 isolate->factory()->NewHeapNumber(3.1415 + 3),
553 BinaryOperationFeedback::kNumber}, 553 BinaryOperationFeedback::kNumber},
554 {Token::Value::ADD, isolate->factory()->NewHeapNumber(3.1415), 554 {Token::Value::ADD, isolate->factory()->NewHeapNumber(3.1415),
555 isolate->factory()->NewHeapNumber(1.4142), 555 isolate->factory()->NewHeapNumber(1.4142),
556 isolate->factory()->NewHeapNumber(3.1415 + 1.4142), 556 isolate->factory()->NewHeapNumber(3.1415 + 1.4142),
557 BinaryOperationFeedback::kNumber}, 557 BinaryOperationFeedback::kNumber},
558 {Token::Value::ADD, isolate->factory()->NewStringFromAsciiChecked("foo"),
559 isolate->factory()->NewStringFromAsciiChecked("bar"),
560 isolate->factory()->NewStringFromAsciiChecked("foobar"),
561 BinaryOperationFeedback::kString},
558 {Token::Value::ADD, Handle<Smi>(Smi::FromInt(2), isolate), 562 {Token::Value::ADD, Handle<Smi>(Smi::FromInt(2), isolate),
559 isolate->factory()->NewStringFromAsciiChecked("2"), 563 isolate->factory()->NewStringFromAsciiChecked("2"),
560 isolate->factory()->NewStringFromAsciiChecked("22"), 564 isolate->factory()->NewStringFromAsciiChecked("22"),
561 BinaryOperationFeedback::kAny}, 565 BinaryOperationFeedback::kAny},
562 // SUB 566 // SUB
563 {Token::Value::SUB, Handle<Smi>(Smi::FromInt(2), isolate), 567 {Token::Value::SUB, Handle<Smi>(Smi::FromInt(2), isolate),
564 Handle<Smi>(Smi::FromInt(3), isolate), 568 Handle<Smi>(Smi::FromInt(3), isolate),
565 Handle<Smi>(Smi::FromInt(-1), isolate), 569 Handle<Smi>(Smi::FromInt(-1), isolate),
566 BinaryOperationFeedback::kSignedSmall}, 570 BinaryOperationFeedback::kSignedSmall},
567 {Token::Value::SUB, Handle<Smi>(Smi::FromInt(Smi::kMinValue), isolate), 571 {Token::Value::SUB, Handle<Smi>(Smi::FromInt(Smi::kMinValue), isolate),
(...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 1806
1803 Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate); 1807 Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(isolate);
1804 InterpreterTester tester(isolate, bytecode_array, vector); 1808 InterpreterTester tester(isolate, bytecode_array, vector);
1805 auto callable = tester.GetCallable<>(); 1809 auto callable = tester.GetCallable<>();
1806 Handle<Object> return_value = callable().ToHandleChecked(); 1810 Handle<Object> return_value = callable().ToHandleChecked();
1807 CHECK(return_value->IsBoolean()); 1811 CHECK(return_value->IsBoolean());
1808 CHECK_EQ(return_value->BooleanValue(), 1812 CHECK_EQ(return_value->BooleanValue(),
1809 CompareC(comparison, inputs[i], inputs[j])); 1813 CompareC(comparison, inputs[i], inputs[j]));
1810 Object* feedback = vector->Get(slot); 1814 Object* feedback = vector->Get(slot);
1811 CHECK(feedback->IsSmi()); 1815 CHECK(feedback->IsSmi());
1812 CHECK_EQ(CompareOperationFeedback::kAny, 1816 CHECK_EQ(CompareOperationFeedback::kString,
1813 static_cast<Smi*>(feedback)->value()); 1817 static_cast<Smi*>(feedback)->value());
1814 } 1818 }
1815 } 1819 }
1816 } 1820 }
1817 } 1821 }
1818 1822
1819 1823
1820 TEST(InterpreterMixedComparisons) { 1824 TEST(InterpreterMixedComparisons) {
1821 // This test compares a HeapNumber with a String. The latter is 1825 // This test compares a HeapNumber with a String. The latter is
1822 // convertible to a HeapNumber so comparison will be between numeric 1826 // convertible to a HeapNumber so comparison will be between numeric
1823 // values except for the strict comparisons where no conversion is 1827 // values except for the strict comparisons where no conversion is
1824 // performed. 1828 // performed.
1825 const char* inputs[] = {"-1.77", "-40.333", "0.01", "55.77e5", "2.01"}; 1829 const char* inputs[] = {"-1.77", "-40.333", "0.01", "55.77e50", "2.01"};
1826 1830
1827 UnicodeCache unicode_cache; 1831 UnicodeCache unicode_cache;
1828 1832
1829 for (size_t c = 0; c < arraysize(kComparisonTypes); c++) { 1833 for (size_t c = 0; c < arraysize(kComparisonTypes); c++) {
1830 Token::Value comparison = kComparisonTypes[c]; 1834 Token::Value comparison = kComparisonTypes[c];
1831 for (size_t i = 0; i < arraysize(inputs); i++) { 1835 for (size_t i = 0; i < arraysize(inputs); i++) {
1832 for (size_t j = 0; j < arraysize(inputs); j++) { 1836 for (size_t j = 0; j < arraysize(inputs); j++) {
1833 for (int pass = 0; pass < 2; pass++) { 1837 for (int pass = 0; pass < 2; pass++) {
1834 const char* lhs_cstr = inputs[i]; 1838 const char* lhs_cstr = inputs[i];
1835 const char* rhs_cstr = inputs[j]; 1839 const char* rhs_cstr = inputs[j];
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1868 Handle<BytecodeArray> bytecode_array = 1872 Handle<BytecodeArray> bytecode_array =
1869 builder.ToBytecodeArray(isolate); 1873 builder.ToBytecodeArray(isolate);
1870 InterpreterTester tester(isolate, bytecode_array, vector); 1874 InterpreterTester tester(isolate, bytecode_array, vector);
1871 auto callable = tester.GetCallable<>(); 1875 auto callable = tester.GetCallable<>();
1872 Handle<Object> return_value = callable().ToHandleChecked(); 1876 Handle<Object> return_value = callable().ToHandleChecked();
1873 CHECK(return_value->IsBoolean()); 1877 CHECK(return_value->IsBoolean());
1874 CHECK_EQ(return_value->BooleanValue(), 1878 CHECK_EQ(return_value->BooleanValue(),
1875 CompareC(comparison, lhs, rhs, true)); 1879 CompareC(comparison, lhs, rhs, true));
1876 Object* feedback = vector->Get(slot); 1880 Object* feedback = vector->Get(slot);
1877 CHECK(feedback->IsSmi()); 1881 CHECK(feedback->IsSmi());
1878 CHECK_EQ(CompareOperationFeedback::kAny, 1882 // kNumber | kString gets converted to CompareOperationHint::kAny.
1879 static_cast<Smi*>(feedback)->value()); 1883 int expected_feedback = CompareOperationFeedback::kNumber |
1884 CompareOperationFeedback::kString;
1885 CHECK_EQ(expected_feedback, static_cast<Smi*>(feedback)->value());
1880 } 1886 }
1881 } 1887 }
1882 } 1888 }
1883 } 1889 }
1884 } 1890 }
1885 1891
1886 TEST(InterpreterStrictNotEqual) { 1892 TEST(InterpreterStrictNotEqual) {
1887 HandleAndZoneScope handles; 1893 HandleAndZoneScope handles;
1888 Isolate* isolate = handles.main_isolate(); 1894 Isolate* isolate = handles.main_isolate();
1889 Factory* factory = isolate->factory(); 1895 Factory* factory = isolate->factory();
(...skipping 2931 matching lines...) Expand 10 before | Expand all | Expand 10 after
4821 auto callable = tester.GetCallable<>(); 4827 auto callable = tester.GetCallable<>();
4822 4828
4823 Handle<i::Object> return_value = callable().ToHandleChecked(); 4829 Handle<i::Object> return_value = callable().ToHandleChecked();
4824 CHECK(return_value->SameValue(*tests[i].second)); 4830 CHECK(return_value->SameValue(*tests[i].second));
4825 } 4831 }
4826 } 4832 }
4827 4833
4828 } // namespace interpreter 4834 } // namespace interpreter
4829 } // namespace internal 4835 } // namespace internal
4830 } // namespace v8 4836 } // namespace v8
OLDNEW
« no previous file with comments | « src/type-info.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698