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

Side by Side Diff: test/cctest/compiler/test-run-bytecode-graph-builder.cc

Issue 1555063002: [Interpreter] Adds support for wide variant of load/store lookup slots. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 months 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
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 <utility> 5 #include <utility>
6 6
7 #include "src/compiler/pipeline.h" 7 #include "src/compiler/pipeline.h"
8 #include "src/execution.h" 8 #include "src/execution.h"
9 #include "src/handles.h" 9 #include "src/handles.h"
10 #include "src/interpreter/bytecode-array-builder.h" 10 #include "src/interpreter/bytecode-array-builder.h"
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 " var z = 20;" 1031 " var z = 20;"
1032 " eval(\"function t() {"; 1032 " eval(\"function t() {";
1033 const char* function_epilogue = " }; f = t; t();\");" 1033 const char* function_epilogue = " }; f = t; t();\");"
1034 "}" 1034 "}"
1035 "f1();"; 1035 "f1();";
1036 1036
1037 ExpectedSnippet<0> snippets[] = { 1037 ExpectedSnippet<0> snippets[] = {
1038 {"return x;", {factory->NewNumber(12)}}, 1038 {"return x;", {factory->NewNumber(12)}},
1039 {"return obj.val;", {factory->NewNumber(3.1414)}}, 1039 {"return obj.val;", {factory->NewNumber(3.1414)}},
1040 {"return typeof x;", {factory->NewStringFromStaticChars("number")}}, 1040 {"return typeof x;", {factory->NewStringFromStaticChars("number")}},
1041 {"return typeof dummy;",
1042 {factory->NewStringFromStaticChars("undefined")}},
1041 {"x = 23; return x;", {factory->NewNumber(23)}}, 1043 {"x = 23; return x;", {factory->NewNumber(23)}},
1042 {"'use strict'; obj.val = 23.456; return obj.val;", 1044 {"'use strict'; obj.val = 23.456; return obj.val;",
1043 {factory->NewNumber(23.456)}}}; 1045 {factory->NewNumber(23.456)}}};
1044 1046
1045 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]); 1047 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1046 for (size_t i = 0; i < num_snippets; i++) { 1048 for (size_t i = 0; i < num_snippets; i++) {
1047 ScopedVector<char> script(1024); 1049 ScopedVector<char> script(1024);
1048 SNPrintF(script, "%s %s %s", function_prologue, snippets[i].code_snippet, 1050 SNPrintF(script, "%s %s %s", function_prologue, snippets[i].code_snippet,
1049 function_epilogue); 1051 function_epilogue);
1050 1052
1051 BytecodeGraphTester tester(isolate, zone, script.start(), "t"); 1053 BytecodeGraphTester tester(isolate, zone, script.start(), "t");
1052 auto callable = tester.GetCallable<>(); 1054 auto callable = tester.GetCallable<>();
1053 Handle<Object> return_value = callable().ToHandleChecked(); 1055 Handle<Object> return_value = callable().ToHandleChecked();
1054 CHECK(return_value->SameValue(*snippets[i].return_value())); 1056 CHECK(return_value->SameValue(*snippets[i].return_value()));
1055 } 1057 }
1056 } 1058 }
1057 1059
1058 1060
1061 TEST(BytecodeGraphBuilderLookupSlotWide) {
1062 HandleAndZoneScope scope;
1063 Isolate* isolate = scope.main_isolate();
1064 Zone* zone = scope.main_zone();
1065 Factory* factory = isolate->factory();
1066
1067 const char* function_prologue =
1068 "var f;"
1069 "var x = 12;"
1070 "y = 10;"
1071 "var obj = {val:3.1414};"
1072 "var z = 30;"
1073 "function f1() {"
1074 " var z = 20;"
1075 " eval(\"function t() {";
1076 const char* function_epilogue =
1077 " }; f = t; t();\");"
1078 "}"
1079 "f1();";
1080 std::ostringstream str;
1081 str << "var y = 2.3; ";
1082 for (int i = 1; i < 256; i++) {
1083 str << "y = " << 2.3 + i << "; ";
1084 }
1085 std::string init_function_body = str.str();
1086
1087 std::pair<std::string, Handle<Object>> snippets[] = {
1088 {init_function_body + "return x;", factory->NewNumber(12)},
1089 {init_function_body + "return typeof x;",
1090 factory->NewStringFromStaticChars("number")},
1091 {init_function_body + "return x = 23;", factory->NewNumber(23)},
1092 {"'use strict';" + init_function_body + "return obj.val = 23.456;",
1093 factory->NewNumber(23.456)}};
1094
1095 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1096 for (size_t i = 0; i < num_snippets; i++) {
1097 ScopedVector<char> script(3072);
1098 SNPrintF(script, "%s %s %s", function_prologue, snippets[i].first.c_str(),
1099 function_epilogue);
1100
1101 BytecodeGraphTester tester(isolate, zone, script.start(), "t");
1102 auto callable = tester.GetCallable<>();
1103 Handle<Object> return_value = callable().ToHandleChecked();
1104 CHECK(return_value->SameValue(*snippets[i].second));
1105 }
1106 }
1107
1108
1059 bool get_compare_result(Token::Value opcode, Handle<Object> lhs_value, 1109 bool get_compare_result(Token::Value opcode, Handle<Object> lhs_value,
1060 Handle<Object> rhs_value) { 1110 Handle<Object> rhs_value) {
1061 switch (opcode) { 1111 switch (opcode) {
1062 case Token::Value::EQ: 1112 case Token::Value::EQ:
1063 return Object::Equals(lhs_value, rhs_value).FromJust(); 1113 return Object::Equals(lhs_value, rhs_value).FromJust();
1064 case Token::Value::NE: 1114 case Token::Value::NE:
1065 return !Object::Equals(lhs_value, rhs_value).FromJust(); 1115 return !Object::Equals(lhs_value, rhs_value).FromJust();
1066 case Token::Value::EQ_STRICT: 1116 case Token::Value::EQ_STRICT:
1067 return lhs_value->StrictEquals(*rhs_value); 1117 return lhs_value->StrictEquals(*rhs_value);
1068 case Token::Value::NE_STRICT: 1118 case Token::Value::NE_STRICT:
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after
2102 auto callable = tester.GetCallable<>(); 2152 auto callable = tester.GetCallable<>();
2103 Handle<Object> return_value = callable().ToHandleChecked(); 2153 Handle<Object> return_value = callable().ToHandleChecked();
2104 CHECK(return_value->SameValue(*snippets[i].return_value())); 2154 CHECK(return_value->SameValue(*snippets[i].return_value()));
2105 } 2155 }
2106 } 2156 }
2107 2157
2108 2158
2109 } // namespace compiler 2159 } // namespace compiler
2110 } // namespace internal 2160 } // namespace internal
2111 } // namespace v8 2161 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698