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

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: Updated tests to address review comments. 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
« no previous file with comments | « src/interpreter/interpreter.cc ('k') | test/cctest/interpreter/test-bytecode-generator.cc » ('j') | 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 <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
1081 ExpectedSnippet<0> snippets[] = {
1082 {"var y = 2.3;" REPEAT_256(SPACE, "y = 2.3;") "return x;",
1083 {factory->NewNumber(12)}},
1084 {"var y = 2.3;" REPEAT_256(SPACE, "y = 2.3;") "return typeof x;",
1085 {factory->NewStringFromStaticChars("number")}},
1086 {"var y = 2.3;" REPEAT_256(SPACE, "y = 2.3;") "return x = 23;",
1087 {factory->NewNumber(23)}},
1088 {"'use strict';" REPEAT_256(SPACE, "y = 2.3;") "return obj.val = 23.456;",
1089 {factory->NewNumber(23.456)}}};
1090
1091 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1092 for (size_t i = 0; i < num_snippets; i++) {
1093 ScopedVector<char> script(3072);
1094 SNPrintF(script, "%s %s %s", function_prologue, snippets[i].code_snippet,
1095 function_epilogue);
1096
1097 BytecodeGraphTester tester(isolate, zone, script.start(), "t");
1098 auto callable = tester.GetCallable<>();
1099 Handle<Object> return_value = callable().ToHandleChecked();
1100 CHECK(return_value->SameValue(*snippets[i].return_value()));
1101 }
1102 }
1103
1104
1059 bool get_compare_result(Token::Value opcode, Handle<Object> lhs_value, 1105 bool get_compare_result(Token::Value opcode, Handle<Object> lhs_value,
1060 Handle<Object> rhs_value) { 1106 Handle<Object> rhs_value) {
1061 switch (opcode) { 1107 switch (opcode) {
1062 case Token::Value::EQ: 1108 case Token::Value::EQ:
1063 return Object::Equals(lhs_value, rhs_value).FromJust(); 1109 return Object::Equals(lhs_value, rhs_value).FromJust();
1064 case Token::Value::NE: 1110 case Token::Value::NE:
1065 return !Object::Equals(lhs_value, rhs_value).FromJust(); 1111 return !Object::Equals(lhs_value, rhs_value).FromJust();
1066 case Token::Value::EQ_STRICT: 1112 case Token::Value::EQ_STRICT:
1067 return lhs_value->StrictEquals(*rhs_value); 1113 return lhs_value->StrictEquals(*rhs_value);
1068 case Token::Value::NE_STRICT: 1114 case Token::Value::NE_STRICT:
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after
2102 auto callable = tester.GetCallable<>(); 2148 auto callable = tester.GetCallable<>();
2103 Handle<Object> return_value = callable().ToHandleChecked(); 2149 Handle<Object> return_value = callable().ToHandleChecked();
2104 CHECK(return_value->SameValue(*snippets[i].return_value())); 2150 CHECK(return_value->SameValue(*snippets[i].return_value()));
2105 } 2151 }
2106 } 2152 }
2107 2153
2108 2154
2109 } // namespace compiler 2155 } // namespace compiler
2110 } // namespace internal 2156 } // namespace internal
2111 } // namespace v8 2157 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/interpreter.cc ('k') | test/cctest/interpreter/test-bytecode-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698