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

Side by Side Diff: test/cctest/compiler/test-run-intrinsics.cc

Issue 872363002: [turbofan] Add new JSIntrinsicsLowering reducer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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/flag-definitions.h ('k') | test/unittests/compiler/js-intrinsic-lowering-unittest.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "test/cctest/compiler/function-tester.h" 7 #include "test/cctest/compiler/function-tester.h"
8 8
9 using namespace v8::internal; 9 using namespace v8::internal;
10 using namespace v8::internal::compiler; 10 using namespace v8::internal::compiler;
11 uint32_t flags = CompilationInfo::kInliningEnabled; 11 uint32_t flags = CompilationInfo::kInliningEnabled;
12 12
13 TEST(IsSmi) { 13 TEST(IsSmi) {
14 FLAG_turbo_inlining_intrinsics = true;
15 FLAG_turbo_deoptimization = true; 14 FLAG_turbo_deoptimization = true;
16 FunctionTester T("(function(a) { return %_IsSmi(a); })", flags); 15 FunctionTester T("(function(a) { return %_IsSmi(a); })", flags);
17 16
18 T.CheckTrue(T.Val(1)); 17 T.CheckTrue(T.Val(1));
19 T.CheckFalse(T.Val(1.1)); 18 T.CheckFalse(T.Val(1.1));
20 T.CheckFalse(T.Val(-0.0)); 19 T.CheckFalse(T.Val(-0.0));
21 T.CheckTrue(T.Val(-2)); 20 T.CheckTrue(T.Val(-2));
22 T.CheckFalse(T.Val(-2.3)); 21 T.CheckFalse(T.Val(-2.3));
23 T.CheckFalse(T.undefined()); 22 T.CheckFalse(T.undefined());
24 } 23 }
25 24
26 25
27 TEST(IsNonNegativeSmi) { 26 TEST(IsNonNegativeSmi) {
28 FLAG_turbo_inlining_intrinsics = true;
29 FLAG_turbo_deoptimization = true; 27 FLAG_turbo_deoptimization = true;
30 FunctionTester T("(function(a) { return %_IsNonNegativeSmi(a); })", flags); 28 FunctionTester T("(function(a) { return %_IsNonNegativeSmi(a); })", flags);
31 29
32 T.CheckTrue(T.Val(1)); 30 T.CheckTrue(T.Val(1));
33 T.CheckFalse(T.Val(1.1)); 31 T.CheckFalse(T.Val(1.1));
34 T.CheckFalse(T.Val(-0.0)); 32 T.CheckFalse(T.Val(-0.0));
35 T.CheckFalse(T.Val(-2)); 33 T.CheckFalse(T.Val(-2));
36 T.CheckFalse(T.Val(-2.3)); 34 T.CheckFalse(T.Val(-2.3));
37 T.CheckFalse(T.undefined()); 35 T.CheckFalse(T.undefined());
38 } 36 }
39 37
40 38
41 TEST(IsMinusZero) { 39 TEST(IsMinusZero) {
42 FLAG_turbo_inlining_intrinsics = true;
43 FLAG_turbo_deoptimization = true; 40 FLAG_turbo_deoptimization = true;
44 FunctionTester T("(function(a) { return %_IsMinusZero(a); })", flags); 41 FunctionTester T("(function(a) { return %_IsMinusZero(a); })", flags);
45 42
46 T.CheckFalse(T.Val(1)); 43 T.CheckFalse(T.Val(1));
47 T.CheckFalse(T.Val(1.1)); 44 T.CheckFalse(T.Val(1.1));
48 T.CheckTrue(T.Val(-0.0)); 45 T.CheckTrue(T.Val(-0.0));
49 T.CheckFalse(T.Val(-2)); 46 T.CheckFalse(T.Val(-2));
50 T.CheckFalse(T.Val(-2.3)); 47 T.CheckFalse(T.Val(-2.3));
51 T.CheckFalse(T.undefined()); 48 T.CheckFalse(T.undefined());
52 } 49 }
53 50
54 51
55 TEST(IsArray) { 52 TEST(IsArray) {
56 FLAG_turbo_inlining_intrinsics = true;
57 FLAG_turbo_deoptimization = true; 53 FLAG_turbo_deoptimization = true;
58 FunctionTester T("(function(a) { return %_IsArray(a); })", flags); 54 FunctionTester T("(function(a) { return %_IsArray(a); })", flags);
59 55
60 T.CheckFalse(T.NewObject("(function() {})")); 56 T.CheckFalse(T.NewObject("(function() {})"));
61 T.CheckTrue(T.NewObject("([1])")); 57 T.CheckTrue(T.NewObject("([1])"));
62 T.CheckFalse(T.NewObject("({})")); 58 T.CheckFalse(T.NewObject("({})"));
63 T.CheckFalse(T.NewObject("(/x/)")); 59 T.CheckFalse(T.NewObject("(/x/)"));
64 T.CheckFalse(T.undefined()); 60 T.CheckFalse(T.undefined());
65 T.CheckFalse(T.null()); 61 T.CheckFalse(T.null());
66 T.CheckFalse(T.Val("x")); 62 T.CheckFalse(T.Val("x"));
67 T.CheckFalse(T.Val(1)); 63 T.CheckFalse(T.Val(1));
68 } 64 }
69 65
70 66
71 TEST(IsObject) { 67 TEST(IsObject) {
72 FLAG_turbo_inlining_intrinsics = true;
73 FLAG_turbo_deoptimization = true; 68 FLAG_turbo_deoptimization = true;
74 FunctionTester T("(function(a) { return %_IsObject(a); })", flags); 69 FunctionTester T("(function(a) { return %_IsObject(a); })", flags);
75 70
76 T.CheckFalse(T.NewObject("(function() {})")); 71 T.CheckFalse(T.NewObject("(function() {})"));
77 T.CheckTrue(T.NewObject("([1])")); 72 T.CheckTrue(T.NewObject("([1])"));
78 T.CheckTrue(T.NewObject("({})")); 73 T.CheckTrue(T.NewObject("({})"));
79 T.CheckTrue(T.NewObject("(/x/)")); 74 T.CheckTrue(T.NewObject("(/x/)"));
80 T.CheckFalse(T.undefined()); 75 T.CheckFalse(T.undefined());
81 T.CheckTrue(T.null()); 76 T.CheckTrue(T.null());
82 T.CheckFalse(T.Val("x")); 77 T.CheckFalse(T.Val("x"));
83 T.CheckFalse(T.Val(1)); 78 T.CheckFalse(T.Val(1));
84 } 79 }
85 80
86 81
87 TEST(IsFunction) { 82 TEST(IsFunction) {
88 FLAG_turbo_inlining_intrinsics = true;
89 FLAG_turbo_deoptimization = true; 83 FLAG_turbo_deoptimization = true;
90 FunctionTester T("(function(a) { return %_IsFunction(a); })", flags); 84 FunctionTester T("(function(a) { return %_IsFunction(a); })", flags);
91 85
92 T.CheckTrue(T.NewObject("(function() {})")); 86 T.CheckTrue(T.NewObject("(function() {})"));
93 T.CheckFalse(T.NewObject("([1])")); 87 T.CheckFalse(T.NewObject("([1])"));
94 T.CheckFalse(T.NewObject("({})")); 88 T.CheckFalse(T.NewObject("({})"));
95 T.CheckFalse(T.NewObject("(/x/)")); 89 T.CheckFalse(T.NewObject("(/x/)"));
96 T.CheckFalse(T.undefined()); 90 T.CheckFalse(T.undefined());
97 T.CheckFalse(T.null()); 91 T.CheckFalse(T.null());
98 T.CheckFalse(T.Val("x")); 92 T.CheckFalse(T.Val("x"));
99 T.CheckFalse(T.Val(1)); 93 T.CheckFalse(T.Val(1));
100 } 94 }
101 95
102 96
103 TEST(IsRegExp) { 97 TEST(IsRegExp) {
104 FLAG_turbo_inlining_intrinsics = true;
105 FLAG_turbo_deoptimization = true; 98 FLAG_turbo_deoptimization = true;
106 FunctionTester T("(function(a) { return %_IsRegExp(a); })", flags); 99 FunctionTester T("(function(a) { return %_IsRegExp(a); })", flags);
107 100
108 T.CheckFalse(T.NewObject("(function() {})")); 101 T.CheckFalse(T.NewObject("(function() {})"));
109 T.CheckFalse(T.NewObject("([1])")); 102 T.CheckFalse(T.NewObject("([1])"));
110 T.CheckFalse(T.NewObject("({})")); 103 T.CheckFalse(T.NewObject("({})"));
111 T.CheckTrue(T.NewObject("(/x/)")); 104 T.CheckTrue(T.NewObject("(/x/)"));
112 T.CheckFalse(T.undefined()); 105 T.CheckFalse(T.undefined());
113 T.CheckFalse(T.null()); 106 T.CheckFalse(T.null());
114 T.CheckFalse(T.Val("x")); 107 T.CheckFalse(T.Val("x"));
115 T.CheckFalse(T.Val(1)); 108 T.CheckFalse(T.Val(1));
116 } 109 }
117 110
118 111
119 TEST(ClassOf) { 112 TEST(ClassOf) {
120 FLAG_turbo_inlining_intrinsics = true;
121 FLAG_turbo_deoptimization = true; 113 FLAG_turbo_deoptimization = true;
122 FunctionTester T("(function(a) { return %_ClassOf(a); })", flags); 114 FunctionTester T("(function(a) { return %_ClassOf(a); })", flags);
123 115
124 T.CheckCall(T.Val("Function"), T.NewObject("(function() {})")); 116 T.CheckCall(T.Val("Function"), T.NewObject("(function() {})"));
125 T.CheckCall(T.Val("Array"), T.NewObject("([1])")); 117 T.CheckCall(T.Val("Array"), T.NewObject("([1])"));
126 T.CheckCall(T.Val("Object"), T.NewObject("({})")); 118 T.CheckCall(T.Val("Object"), T.NewObject("({})"));
127 T.CheckCall(T.Val("RegExp"), T.NewObject("(/x/)")); 119 T.CheckCall(T.Val("RegExp"), T.NewObject("(/x/)"));
128 T.CheckCall(T.null(), T.undefined()); 120 T.CheckCall(T.null(), T.undefined());
129 T.CheckCall(T.null(), T.null()); 121 T.CheckCall(T.null(), T.null());
130 T.CheckCall(T.null(), T.Val("x")); 122 T.CheckCall(T.null(), T.Val("x"));
131 T.CheckCall(T.null(), T.Val(1)); 123 T.CheckCall(T.null(), T.Val(1));
132 } 124 }
133 125
134 126
135 TEST(ObjectEquals) { 127 TEST(ObjectEquals) {
136 FLAG_turbo_inlining_intrinsics = true;
137 FLAG_turbo_deoptimization = true; 128 FLAG_turbo_deoptimization = true;
138 FunctionTester T("(function(a,b) { return %_ObjectEquals(a,b); })", flags); 129 FunctionTester T("(function(a,b) { return %_ObjectEquals(a,b); })", flags);
139 CompileRun("var o = {}"); 130 CompileRun("var o = {}");
140 131
141 T.CheckTrue(T.NewObject("(o)"), T.NewObject("(o)")); 132 T.CheckTrue(T.NewObject("(o)"), T.NewObject("(o)"));
142 T.CheckTrue(T.Val("internal"), T.Val("internal")); 133 T.CheckTrue(T.Val("internal"), T.Val("internal"));
143 T.CheckTrue(T.true_value(), T.true_value()); 134 T.CheckTrue(T.true_value(), T.true_value());
144 T.CheckFalse(T.true_value(), T.false_value()); 135 T.CheckFalse(T.true_value(), T.false_value());
145 T.CheckFalse(T.NewObject("({})"), T.NewObject("({})")); 136 T.CheckFalse(T.NewObject("({})"), T.NewObject("({})"));
146 T.CheckFalse(T.Val("a"), T.Val("b")); 137 T.CheckFalse(T.Val("a"), T.Val("b"));
147 } 138 }
148 139
149 140
150 TEST(ValueOf) { 141 TEST(ValueOf) {
151 FLAG_turbo_inlining_intrinsics = true;
152 FLAG_turbo_deoptimization = true; 142 FLAG_turbo_deoptimization = true;
153 FunctionTester T("(function(a) { return %_ValueOf(a); })", flags); 143 FunctionTester T("(function(a) { return %_ValueOf(a); })", flags);
154 144
155 T.CheckCall(T.Val("a"), T.Val("a")); 145 T.CheckCall(T.Val("a"), T.Val("a"));
156 T.CheckCall(T.Val("b"), T.NewObject("(new String('b'))")); 146 T.CheckCall(T.Val("b"), T.NewObject("(new String('b'))"));
157 T.CheckCall(T.Val(123), T.Val(123)); 147 T.CheckCall(T.Val(123), T.Val(123));
158 T.CheckCall(T.Val(456), T.NewObject("(new Number(456))")); 148 T.CheckCall(T.Val(456), T.NewObject("(new Number(456))"));
159 } 149 }
160 150
161 151
162 TEST(SetValueOf) { 152 TEST(SetValueOf) {
163 FLAG_turbo_inlining_intrinsics = true;
164 FLAG_turbo_deoptimization = true; 153 FLAG_turbo_deoptimization = true;
165 FunctionTester T("(function(a,b) { return %_SetValueOf(a,b); })", flags); 154 FunctionTester T("(function(a,b) { return %_SetValueOf(a,b); })", flags);
166 155
167 T.CheckCall(T.Val("a"), T.NewObject("(new String)"), T.Val("a")); 156 T.CheckCall(T.Val("a"), T.NewObject("(new String)"), T.Val("a"));
168 T.CheckCall(T.Val(123), T.NewObject("(new Number)"), T.Val(123)); 157 T.CheckCall(T.Val(123), T.NewObject("(new Number)"), T.Val(123));
169 T.CheckCall(T.Val("x"), T.undefined(), T.Val("x")); 158 T.CheckCall(T.Val("x"), T.undefined(), T.Val("x"));
170 } 159 }
171 160
172 161
173 TEST(StringCharFromCode) { 162 TEST(StringCharFromCode) {
174 FLAG_turbo_inlining_intrinsics = true;
175 FLAG_turbo_deoptimization = true; 163 FLAG_turbo_deoptimization = true;
176 FunctionTester T("(function(a) { return %_StringCharFromCode(a); })", flags); 164 FunctionTester T("(function(a) { return %_StringCharFromCode(a); })", flags);
177 165
178 T.CheckCall(T.Val("a"), T.Val(97)); 166 T.CheckCall(T.Val("a"), T.Val(97));
179 T.CheckCall(T.Val("\xE2\x9D\x8A"), T.Val(0x274A)); 167 T.CheckCall(T.Val("\xE2\x9D\x8A"), T.Val(0x274A));
180 T.CheckCall(T.Val(""), T.undefined()); 168 T.CheckCall(T.Val(""), T.undefined());
181 } 169 }
182 170
183 171
184 TEST(StringCharAt) { 172 TEST(StringCharAt) {
185 FLAG_turbo_inlining_intrinsics = true;
186 FLAG_turbo_deoptimization = true; 173 FLAG_turbo_deoptimization = true;
187 FunctionTester T("(function(a,b) { return %_StringCharAt(a,b); })", flags); 174 FunctionTester T("(function(a,b) { return %_StringCharAt(a,b); })", flags);
188 175
189 T.CheckCall(T.Val("e"), T.Val("huge fan!"), T.Val(3)); 176 T.CheckCall(T.Val("e"), T.Val("huge fan!"), T.Val(3));
190 T.CheckCall(T.Val("f"), T.Val("\xE2\x9D\x8A fan!"), T.Val(2)); 177 T.CheckCall(T.Val("f"), T.Val("\xE2\x9D\x8A fan!"), T.Val(2));
191 T.CheckCall(T.Val(""), T.Val("not a fan!"), T.Val(23)); 178 T.CheckCall(T.Val(""), T.Val("not a fan!"), T.Val(23));
192 } 179 }
193 180
194 181
195 TEST(StringCharCodeAt) { 182 TEST(StringCharCodeAt) {
196 FLAG_turbo_inlining_intrinsics = true;
197 FLAG_turbo_deoptimization = true; 183 FLAG_turbo_deoptimization = true;
198 FunctionTester T("(function(a,b) { return %_StringCharCodeAt(a,b); })", 184 FunctionTester T("(function(a,b) { return %_StringCharCodeAt(a,b); })",
199 flags); 185 flags);
200 186
201 T.CheckCall(T.Val('e'), T.Val("huge fan!"), T.Val(3)); 187 T.CheckCall(T.Val('e'), T.Val("huge fan!"), T.Val(3));
202 T.CheckCall(T.Val('f'), T.Val("\xE2\x9D\x8A fan!"), T.Val(2)); 188 T.CheckCall(T.Val('f'), T.Val("\xE2\x9D\x8A fan!"), T.Val(2));
203 T.CheckCall(T.nan(), T.Val("not a fan!"), T.Val(23)); 189 T.CheckCall(T.nan(), T.Val("not a fan!"), T.Val(23));
204 } 190 }
205 191
206 192
207 TEST(StringAdd) { 193 TEST(StringAdd) {
208 FLAG_turbo_inlining_intrinsics = true;
209 FLAG_turbo_deoptimization = true; 194 FLAG_turbo_deoptimization = true;
210 FunctionTester T("(function(a,b) { return %_StringAdd(a,b); })", flags); 195 FunctionTester T("(function(a,b) { return %_StringAdd(a,b); })", flags);
211 196
212 T.CheckCall(T.Val("aaabbb"), T.Val("aaa"), T.Val("bbb")); 197 T.CheckCall(T.Val("aaabbb"), T.Val("aaa"), T.Val("bbb"));
213 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val("")); 198 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val(""));
214 T.CheckCall(T.Val("bbb"), T.Val(""), T.Val("bbb")); 199 T.CheckCall(T.Val("bbb"), T.Val(""), T.Val("bbb"));
215 } 200 }
216 201
217 202
218 TEST(StringSubString) { 203 TEST(StringSubString) {
219 FLAG_turbo_inlining_intrinsics = true;
220 FLAG_turbo_deoptimization = true; 204 FLAG_turbo_deoptimization = true;
221 FunctionTester T("(function(a,b) { return %_SubString(a,b,b+3); })", flags); 205 FunctionTester T("(function(a,b) { return %_SubString(a,b,b+3); })", flags);
222 206
223 T.CheckCall(T.Val("aaa"), T.Val("aaabbb"), T.Val(0.0)); 207 T.CheckCall(T.Val("aaa"), T.Val("aaabbb"), T.Val(0.0));
224 T.CheckCall(T.Val("abb"), T.Val("aaabbb"), T.Val(2)); 208 T.CheckCall(T.Val("abb"), T.Val("aaabbb"), T.Val(2));
225 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val(0.0)); 209 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val(0.0));
226 } 210 }
227 211
228 212
229 TEST(StringCompare) { 213 TEST(StringCompare) {
230 FLAG_turbo_inlining_intrinsics = true;
231 FLAG_turbo_deoptimization = true; 214 FLAG_turbo_deoptimization = true;
232 FunctionTester T("(function(a,b) { return %_StringCompare(a,b); })", flags); 215 FunctionTester T("(function(a,b) { return %_StringCompare(a,b); })", flags);
233 216
234 T.CheckCall(T.Val(-1), T.Val("aaa"), T.Val("bbb")); 217 T.CheckCall(T.Val(-1), T.Val("aaa"), T.Val("bbb"));
235 T.CheckCall(T.Val(0.0), T.Val("bbb"), T.Val("bbb")); 218 T.CheckCall(T.Val(0.0), T.Val("bbb"), T.Val("bbb"));
236 T.CheckCall(T.Val(+1), T.Val("ccc"), T.Val("bbb")); 219 T.CheckCall(T.Val(+1), T.Val("ccc"), T.Val("bbb"));
237 } 220 }
238 221
239 222
240 TEST(CallFunction) { 223 TEST(CallFunction) {
241 FLAG_turbo_inlining_intrinsics = true;
242 FLAG_turbo_deoptimization = true; 224 FLAG_turbo_deoptimization = true;
243 FunctionTester T("(function(a,b) { return %_CallFunction(a, 1, 2, 3, b); })", 225 FunctionTester T("(function(a,b) { return %_CallFunction(a, 1, 2, 3, b); })",
244 flags); 226 flags);
245 CompileRun("function f(a,b,c) { return a + b + c + this.d; }"); 227 CompileRun("function f(a,b,c) { return a + b + c + this.d; }");
246 228
247 T.CheckCall(T.Val(129), T.NewObject("({d:123})"), T.NewObject("f")); 229 T.CheckCall(T.Val(129), T.NewObject("({d:123})"), T.NewObject("f"));
248 T.CheckCall(T.Val("6x"), T.NewObject("({d:'x'})"), T.NewObject("f")); 230 T.CheckCall(T.Val("6x"), T.NewObject("({d:'x'})"), T.NewObject("f"));
249 } 231 }
OLDNEW
« no previous file with comments | « src/flag-definitions.h ('k') | test/unittests/compiler/js-intrinsic-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698