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

Side by Side Diff: test/cctest/test-asm-validator.cc

Issue 1447133002: Use asm style type names and improve asm typer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: revise Created 5 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
« src/typing-asm.cc ('K') | « src/typing-asm.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 // TODO(jochen): Remove this after the setting is turned on globally. 5 // TODO(jochen): Remove this after the setting is turned on globally.
6 #define V8_IMMINENT_DEPRECATION_WARNINGS 6 #define V8_IMMINENT_DEPRECATION_WARNINGS
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/ast.h" 10 #include "src/ast.h"
11 #include "src/ast-expression-visitor.h" 11 #include "src/ast-expression-visitor.h"
12 #include "src/parser.h" 12 #include "src/parser.h"
13 #include "src/rewriter.h" 13 #include "src/rewriter.h"
14 #include "src/scopes.h" 14 #include "src/scopes.h"
15 #include "src/type-cache.h" 15 #include "src/type-cache.h"
16 #include "src/typing-asm.h" 16 #include "src/typing-asm.h"
17 #include "test/cctest/cctest.h" 17 #include "test/cctest/cctest.h"
18 #include "test/cctest/expression-type-collector.h" 18 #include "test/cctest/expression-type-collector.h"
19 #include "test/cctest/expression-type-collector-macros.h" 19 #include "test/cctest/expression-type-collector-macros.h"
20 20
21 // Macros for function types. 21 // Macros for function types.
22 #define FUNC_V_TYPE Bounds(Type::Function(Type::Undefined(), zone)) 22 #define FUNC_V_TYPE Bounds(Type::Function(Type::Undefined(), zone))
23 #define FUNC_I_TYPE Bounds(Type::Function(cache.kInt32, zone)) 23 #define FUNC_I_TYPE Bounds(Type::Function(cache.kAsmSigned, zone))
24 #define FUNC_F_TYPE Bounds(Type::Function(cache.kFloat32, zone)) 24 #define FUNC_F_TYPE Bounds(Type::Function(cache.kAsmFloat, zone))
25 #define FUNC_D_TYPE Bounds(Type::Function(cache.kFloat64, zone)) 25 #define FUNC_D_TYPE Bounds(Type::Function(cache.kAsmDouble, zone))
26 #define FUNC_D2D_TYPE \ 26 #define FUNC_D2D_TYPE \
27 Bounds(Type::Function(cache.kFloat64, cache.kFloat64, zone)) 27 Bounds(Type::Function(cache.kAsmDouble, cache.kAsmDouble, zone))
28 #define FUNC_N2F_TYPE \ 28 #define FUNC_N2F_TYPE \
29 Bounds(Type::Function(cache.kFloat32, Type::Number(), zone)) 29 Bounds(Type::Function(cache.kAsmFloat, Type::Number(), zone))
30 #define FUNC_I2I_TYPE Bounds(Type::Function(cache.kInt32, cache.kInt32, zone)) 30 #define FUNC_I2I_TYPE \
31 Bounds(Type::Function(cache.kAsmSigned, cache.kAsmInt, zone))
31 #define FUNC_II2D_TYPE \ 32 #define FUNC_II2D_TYPE \
32 Bounds(Type::Function(cache.kFloat64, cache.kInt32, cache.kInt32, zone)) 33 Bounds(Type::Function(cache.kAsmDouble, cache.kAsmInt, cache.kAsmInt, zone))
33 #define FUNC_II2I_TYPE \ 34 #define FUNC_II2I_TYPE \
34 Bounds(Type::Function(cache.kInt32, cache.kInt32, cache.kInt32, zone)) 35 Bounds(Type::Function(cache.kAsmSigned, cache.kAsmInt, cache.kAsmInt, zone))
35 #define FUNC_DD2D_TYPE \ 36 #define FUNC_DD2D_TYPE \
36 Bounds(Type::Function(cache.kFloat64, cache.kFloat64, cache.kFloat64, zone)) 37 Bounds(Type::Function(cache.kAsmDouble, cache.kAsmDouble, cache.kAsmDouble, \
38 zone))
37 #define FUNC_N2N_TYPE \ 39 #define FUNC_N2N_TYPE \
38 Bounds(Type::Function(Type::Number(), Type::Number(), zone)) 40 Bounds(Type::Function(Type::Number(), Type::Number(), zone))
39 41
40 // Macros for array types. 42 // Macros for array types.
41 #define FLOAT64_ARRAY_TYPE Bounds(Type::Array(cache.kFloat64, zone)) 43 #define FLOAT64_ARRAY_TYPE Bounds(Type::Array(cache.kAsmDouble, zone))
42 #define FUNC_I2I_ARRAY_TYPE \ 44 #define FUNC_I2I_ARRAY_TYPE \
43 Bounds(Type::Array(Type::Function(cache.kInt32, cache.kInt32, zone), zone)) 45 Bounds(Type::Array(Type::Function(cache.kAsmSigned, cache.kAsmInt, zone), \
46 zone))
44 47
45 using namespace v8::internal; 48 using namespace v8::internal;
46 49
47 namespace { 50 namespace {
48 51
49 std::string Validate(Zone* zone, const char* source, 52 std::string Validate(Zone* zone, const char* source,
50 ZoneVector<ExpressionTypeEntry>* types) { 53 ZoneVector<ExpressionTypeEntry>* types) {
51 i::Isolate* isolate = CcTest::i_isolate(); 54 i::Isolate* isolate = CcTest::i_isolate();
52 i::Factory* factory = isolate->factory(); 55 i::Factory* factory = isolate->factory();
53 56
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 Zone* zone = handles.main_zone(); 122 Zone* zone = handles.main_zone();
120 ZoneVector<ExpressionTypeEntry> types(zone); 123 ZoneVector<ExpressionTypeEntry> types(zone);
121 CHECK_EQ("", Validate(zone, test_function, &types)); 124 CHECK_EQ("", Validate(zone, test_function, &types));
122 TypeCache cache; 125 TypeCache cache;
123 126
124 CHECK_TYPES_BEGIN { 127 CHECK_TYPES_BEGIN {
125 // Module. 128 // Module.
126 CHECK_EXPR(FunctionLiteral, Bounds::Unbounded()) { 129 CHECK_EXPR(FunctionLiteral, Bounds::Unbounded()) {
127 // function logSum 130 // function logSum
128 CHECK_EXPR(FunctionLiteral, FUNC_II2D_TYPE) { 131 CHECK_EXPR(FunctionLiteral, FUNC_II2D_TYPE) {
129 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 132 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
130 CHECK_VAR(start, Bounds(cache.kInt32)); 133 CHECK_VAR(start, Bounds(cache.kAsmInt));
131 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 134 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
132 CHECK_VAR(start, Bounds(cache.kInt32)); 135 CHECK_VAR(start, Bounds(cache.kAsmInt));
133 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 136 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
134 } 137 }
135 } 138 }
136 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 139 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
137 CHECK_VAR(end, Bounds(cache.kInt32)); 140 CHECK_VAR(end, Bounds(cache.kAsmInt));
138 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 141 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
139 CHECK_VAR(end, Bounds(cache.kInt32)); 142 CHECK_VAR(end, Bounds(cache.kAsmInt));
140 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 143 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
141 } 144 }
142 } 145 }
143 CHECK_EXPR(Assignment, Bounds(cache.kFloat64)) { 146 CHECK_EXPR(Assignment, Bounds(cache.kAsmDouble)) {
144 CHECK_VAR(sum, Bounds(cache.kFloat64)); 147 CHECK_VAR(sum, Bounds(cache.kAsmDouble));
145 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 148 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
146 } 149 }
147 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 150 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
148 CHECK_VAR(p, Bounds(cache.kInt32)); 151 CHECK_VAR(p, Bounds(cache.kAsmInt));
149 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 152 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
150 } 153 }
151 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 154 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
152 CHECK_VAR(q, Bounds(cache.kInt32)); 155 CHECK_VAR(q, Bounds(cache.kAsmInt));
153 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 156 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
154 } 157 }
155 // for (p = start << 3, q = end << 3; 158 // for (p = start << 3, q = end << 3;
156 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 159 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
157 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 160 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
158 CHECK_VAR(p, Bounds(cache.kInt32)); 161 CHECK_VAR(p, Bounds(cache.kAsmInt));
159 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 162 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
160 CHECK_VAR(start, Bounds(cache.kInt32)); 163 CHECK_VAR(start, Bounds(cache.kAsmInt));
161 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 164 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
162 } 165 }
163 } 166 }
164 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 167 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
165 CHECK_VAR(q, Bounds(cache.kInt32)); 168 CHECK_VAR(q, Bounds(cache.kAsmInt));
166 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 169 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
167 CHECK_VAR(end, Bounds(cache.kInt32)); 170 CHECK_VAR(end, Bounds(cache.kAsmInt));
168 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 171 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
169 } 172 }
170 } 173 }
171 } 174 }
172 // (p|0) < (q|0); 175 // (p|0) < (q|0);
173 CHECK_EXPR(CompareOperation, Bounds(cache.kInt32)) { 176 CHECK_EXPR(CompareOperation, Bounds(cache.kAsmSigned)) {
174 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 177 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
175 CHECK_VAR(p, Bounds(cache.kInt32)); 178 CHECK_VAR(p, Bounds(cache.kAsmInt));
176 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 179 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
177 } 180 }
178 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 181 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
179 CHECK_VAR(q, Bounds(cache.kInt32)); 182 CHECK_VAR(q, Bounds(cache.kAsmInt));
180 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 183 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
181 } 184 }
182 } 185 }
183 // p = (p + 8)|0) {\n" 186 // p = (p + 8)|0) {\n"
184 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 187 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
185 CHECK_VAR(p, Bounds(cache.kInt32)); 188 CHECK_VAR(p, Bounds(cache.kAsmInt));
186 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 189 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
187 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 190 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
188 CHECK_VAR(p, Bounds(cache.kInt32)); 191 CHECK_VAR(p, Bounds(cache.kAsmInt));
189 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 192 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
190 } 193 }
191 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 194 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
192 } 195 }
193 } 196 }
194 // sum = sum + +log(values[p>>3]); 197 // sum = sum + +log(values[p>>3]);
195 CHECK_EXPR(Assignment, Bounds(cache.kFloat64)) { 198 CHECK_EXPR(Assignment, Bounds(cache.kAsmDouble)) {
196 CHECK_VAR(sum, Bounds(cache.kFloat64)); 199 CHECK_VAR(sum, Bounds(cache.kAsmDouble));
197 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 200 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
198 CHECK_VAR(sum, Bounds(cache.kFloat64)); 201 CHECK_VAR(sum, Bounds(cache.kAsmDouble));
199 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 202 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
200 CHECK_EXPR(Call, Bounds(cache.kFloat64)) { 203 CHECK_EXPR(Call, Bounds(cache.kAsmDouble)) {
201 CHECK_VAR(log, FUNC_D2D_TYPE); 204 CHECK_VAR(log, FUNC_D2D_TYPE);
202 CHECK_EXPR(Property, Bounds(cache.kFloat64)) { 205 CHECK_EXPR(Property, Bounds(cache.kAsmDouble)) {
203 CHECK_VAR(values, FLOAT64_ARRAY_TYPE); 206 CHECK_VAR(values, FLOAT64_ARRAY_TYPE);
204 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 207 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
205 CHECK_VAR(p, Bounds(cache.kInt32)); 208 CHECK_VAR(p, Bounds(cache.kAsmSigned));
206 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 209 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
207 } 210 }
208 } 211 }
209 } 212 }
210 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 213 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
211 } 214 }
212 } 215 }
213 } 216 }
214 // return +sum; 217 // return +sum;
215 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 218 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
216 CHECK_VAR(sum, Bounds(cache.kFloat64)); 219 CHECK_VAR(sum, Bounds(cache.kAsmDouble));
217 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 220 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
218 } 221 }
219 } 222 }
220 // function geometricMean 223 // function geometricMean
221 CHECK_EXPR(FunctionLiteral, FUNC_II2D_TYPE) { 224 CHECK_EXPR(FunctionLiteral, FUNC_II2D_TYPE) {
222 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 225 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
223 CHECK_VAR(start, Bounds(cache.kInt32)); 226 CHECK_VAR(start, Bounds(cache.kAsmInt));
224 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 227 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
225 CHECK_VAR(start, Bounds(cache.kInt32)); 228 CHECK_VAR(start, Bounds(cache.kAsmInt));
226 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 229 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
227 } 230 }
228 } 231 }
229 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 232 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
230 CHECK_VAR(end, Bounds(cache.kInt32)); 233 CHECK_VAR(end, Bounds(cache.kAsmInt));
231 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 234 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
232 CHECK_VAR(end, Bounds(cache.kInt32)); 235 CHECK_VAR(end, Bounds(cache.kAsmInt));
233 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 236 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
234 } 237 }
235 } 238 }
236 // return +exp(+logSum(start, end) / +((end - start)|0)); 239 // return +exp(+logSum(start, end) / +((end - start)|0));
237 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 240 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
238 CHECK_EXPR(Call, Bounds(cache.kFloat64)) { 241 CHECK_EXPR(Call, Bounds(cache.kAsmDouble)) {
239 CHECK_VAR(exp, FUNC_D2D_TYPE); 242 CHECK_VAR(exp, FUNC_D2D_TYPE);
240 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 243 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
241 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 244 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
242 CHECK_EXPR(Call, Bounds(cache.kFloat64)) { 245 CHECK_EXPR(Call, Bounds(cache.kAsmDouble)) {
243 CHECK_VAR(logSum, FUNC_II2D_TYPE); 246 CHECK_VAR(logSum, FUNC_II2D_TYPE);
244 CHECK_VAR(start, Bounds(cache.kInt32)); 247 CHECK_VAR(start, Bounds(cache.kAsmInt));
245 CHECK_VAR(end, Bounds(cache.kInt32)); 248 CHECK_VAR(end, Bounds(cache.kAsmInt));
246 } 249 }
247 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 250 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
248 } 251 }
249 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 252 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
250 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 253 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
251 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 254 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
252 CHECK_VAR(end, Bounds(cache.kInt32)); 255 CHECK_VAR(end, Bounds(cache.kAsmInt));
253 CHECK_VAR(start, Bounds(cache.kInt32)); 256 CHECK_VAR(start, Bounds(cache.kAsmInt));
254 } 257 }
255 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 258 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
256 } 259 }
257 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 260 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
258 } 261 }
259 } 262 }
260 } 263 }
261 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 264 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
262 } 265 }
263 } 266 }
264 // "use asm"; 267 // "use asm";
265 CHECK_EXPR(Literal, Bounds(Type::String())); 268 CHECK_EXPR(Literal, Bounds(Type::String()));
266 // var exp = stdlib.Math.exp; 269 // var exp = stdlib.Math.exp;
267 CHECK_EXPR(Assignment, FUNC_D2D_TYPE) { 270 CHECK_EXPR(Assignment, FUNC_D2D_TYPE) {
268 CHECK_VAR(exp, FUNC_D2D_TYPE); 271 CHECK_VAR(exp, FUNC_D2D_TYPE);
269 CHECK_EXPR(Property, FUNC_D2D_TYPE) { 272 CHECK_EXPR(Property, FUNC_D2D_TYPE) {
270 CHECK_EXPR(Property, Bounds::Unbounded()) { 273 CHECK_EXPR(Property, Bounds::Unbounded()) {
271 CHECK_VAR(stdlib, Bounds::Unbounded()); 274 CHECK_VAR(stdlib, Bounds::Unbounded());
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 CHECK_VAR(buffer, Bounds::Unbounded()); \ 396 CHECK_VAR(buffer, Bounds::Unbounded()); \
394 } \ 397 } \
395 } 398 }
396 399
397 400
398 namespace { 401 namespace {
399 402
400 void CheckStdlibShortcuts(Zone* zone, ZoneVector<ExpressionTypeEntry>& types, 403 void CheckStdlibShortcuts(Zone* zone, ZoneVector<ExpressionTypeEntry>& types,
401 size_t& index, int& depth, TypeCache& cache) { 404 size_t& index, int& depth, TypeCache& cache) {
402 // var exp = stdlib.*; (D * 12) 405 // var exp = stdlib.*; (D * 12)
403 CHECK_VAR_SHORTCUT(Infinity, Bounds(cache.kFloat64)); 406 CHECK_VAR_SHORTCUT(Infinity, Bounds(cache.kAsmDouble));
404 CHECK_VAR_SHORTCUT(NaN, Bounds(cache.kFloat64)); 407 CHECK_VAR_SHORTCUT(NaN, Bounds(cache.kAsmDouble));
405 // var x = stdlib.Math.x; D2D 408 // var x = stdlib.Math.x; D2D
406 CHECK_VAR_MATH_SHORTCUT(acos, FUNC_D2D_TYPE); 409 CHECK_VAR_MATH_SHORTCUT(acos, FUNC_D2D_TYPE);
407 CHECK_VAR_MATH_SHORTCUT(asin, FUNC_D2D_TYPE); 410 CHECK_VAR_MATH_SHORTCUT(asin, FUNC_D2D_TYPE);
408 CHECK_VAR_MATH_SHORTCUT(atan, FUNC_D2D_TYPE); 411 CHECK_VAR_MATH_SHORTCUT(atan, FUNC_D2D_TYPE);
409 CHECK_VAR_MATH_SHORTCUT(cos, FUNC_D2D_TYPE); 412 CHECK_VAR_MATH_SHORTCUT(cos, FUNC_D2D_TYPE);
410 CHECK_VAR_MATH_SHORTCUT(sin, FUNC_D2D_TYPE); 413 CHECK_VAR_MATH_SHORTCUT(sin, FUNC_D2D_TYPE);
411 CHECK_VAR_MATH_SHORTCUT(tan, FUNC_D2D_TYPE); 414 CHECK_VAR_MATH_SHORTCUT(tan, FUNC_D2D_TYPE);
412 CHECK_VAR_MATH_SHORTCUT(exp, FUNC_D2D_TYPE); 415 CHECK_VAR_MATH_SHORTCUT(exp, FUNC_D2D_TYPE);
413 CHECK_VAR_MATH_SHORTCUT(log, FUNC_D2D_TYPE); 416 CHECK_VAR_MATH_SHORTCUT(log, FUNC_D2D_TYPE);
414 CHECK_VAR_MATH_SHORTCUT(ceil, FUNC_D2D_TYPE); 417 CHECK_VAR_MATH_SHORTCUT(ceil, FUNC_D2D_TYPE);
415 CHECK_VAR_MATH_SHORTCUT(floor, FUNC_D2D_TYPE); 418 CHECK_VAR_MATH_SHORTCUT(floor, FUNC_D2D_TYPE);
416 CHECK_VAR_MATH_SHORTCUT(sqrt, FUNC_D2D_TYPE); 419 CHECK_VAR_MATH_SHORTCUT(sqrt, FUNC_D2D_TYPE);
417 // var exp = stdlib.Math.*; (DD2D * 12) 420 // var exp = stdlib.Math.*; (DD2D * 12)
418 CHECK_VAR_MATH_SHORTCUT(min, FUNC_DD2D_TYPE); 421 CHECK_VAR_MATH_SHORTCUT(min, FUNC_DD2D_TYPE);
419 CHECK_VAR_MATH_SHORTCUT(max, FUNC_DD2D_TYPE); 422 CHECK_VAR_MATH_SHORTCUT(max, FUNC_DD2D_TYPE);
420 CHECK_VAR_MATH_SHORTCUT(atan2, FUNC_DD2D_TYPE); 423 CHECK_VAR_MATH_SHORTCUT(atan2, FUNC_DD2D_TYPE);
421 CHECK_VAR_MATH_SHORTCUT(pow, FUNC_DD2D_TYPE); 424 CHECK_VAR_MATH_SHORTCUT(pow, FUNC_DD2D_TYPE);
422 // Special ones. 425 // Special ones.
423 CHECK_VAR_MATH_SHORTCUT(abs, FUNC_N2N_TYPE); 426 CHECK_VAR_MATH_SHORTCUT(abs, FUNC_N2N_TYPE);
424 CHECK_VAR_MATH_SHORTCUT(imul, FUNC_II2I_TYPE); 427 CHECK_VAR_MATH_SHORTCUT(imul, FUNC_II2I_TYPE);
425 CHECK_VAR_MATH_SHORTCUT(fround, FUNC_N2F_TYPE); 428 CHECK_VAR_MATH_SHORTCUT(fround, FUNC_N2F_TYPE);
426 // var exp = stdlib.Math.*; (D * 12) 429 // var exp = stdlib.Math.*; (D * 12)
427 CHECK_VAR_MATH_SHORTCUT(E, Bounds(cache.kFloat64)); 430 CHECK_VAR_MATH_SHORTCUT(E, Bounds(cache.kAsmDouble));
428 CHECK_VAR_MATH_SHORTCUT(LN10, Bounds(cache.kFloat64)); 431 CHECK_VAR_MATH_SHORTCUT(LN10, Bounds(cache.kAsmDouble));
429 CHECK_VAR_MATH_SHORTCUT(LN2, Bounds(cache.kFloat64)); 432 CHECK_VAR_MATH_SHORTCUT(LN2, Bounds(cache.kAsmDouble));
430 CHECK_VAR_MATH_SHORTCUT(LOG2E, Bounds(cache.kFloat64)); 433 CHECK_VAR_MATH_SHORTCUT(LOG2E, Bounds(cache.kAsmDouble));
431 CHECK_VAR_MATH_SHORTCUT(LOG10E, Bounds(cache.kFloat64)); 434 CHECK_VAR_MATH_SHORTCUT(LOG10E, Bounds(cache.kAsmDouble));
432 CHECK_VAR_MATH_SHORTCUT(PI, Bounds(cache.kFloat64)); 435 CHECK_VAR_MATH_SHORTCUT(PI, Bounds(cache.kAsmDouble));
433 CHECK_VAR_MATH_SHORTCUT(SQRT1_2, Bounds(cache.kFloat64)); 436 CHECK_VAR_MATH_SHORTCUT(SQRT1_2, Bounds(cache.kAsmDouble));
434 CHECK_VAR_MATH_SHORTCUT(SQRT2, Bounds(cache.kFloat64)); 437 CHECK_VAR_MATH_SHORTCUT(SQRT2, Bounds(cache.kAsmDouble));
435 // var values = new stdlib.*Array(buffer); 438 // var values = new stdlib.*Array(buffer);
436 CHECK_VAR_NEW_SHORTCUT(u8, Bounds(cache.kUint8Array)); 439 CHECK_VAR_NEW_SHORTCUT(u8, Bounds(cache.kUint8Array));
437 CHECK_VAR_NEW_SHORTCUT(i8, Bounds(cache.kInt8Array)); 440 CHECK_VAR_NEW_SHORTCUT(i8, Bounds(cache.kInt8Array));
438 CHECK_VAR_NEW_SHORTCUT(u16, Bounds(cache.kUint16Array)); 441 CHECK_VAR_NEW_SHORTCUT(u16, Bounds(cache.kUint16Array));
439 CHECK_VAR_NEW_SHORTCUT(i16, Bounds(cache.kInt16Array)); 442 CHECK_VAR_NEW_SHORTCUT(i16, Bounds(cache.kInt16Array));
440 CHECK_VAR_NEW_SHORTCUT(u32, Bounds(cache.kUint32Array)); 443 CHECK_VAR_NEW_SHORTCUT(u32, Bounds(cache.kUint32Array));
441 CHECK_VAR_NEW_SHORTCUT(i32, Bounds(cache.kInt32Array)); 444 CHECK_VAR_NEW_SHORTCUT(i32, Bounds(cache.kInt32Array));
442 CHECK_VAR_NEW_SHORTCUT(f32, Bounds(cache.kFloat32Array)); 445 CHECK_VAR_NEW_SHORTCUT(f32, Bounds(cache.kFloat32Array));
443 CHECK_VAR_NEW_SHORTCUT(f64, Bounds(cache.kFloat64Array)); 446 CHECK_VAR_NEW_SHORTCUT(f64, Bounds(cache.kFloat64Array));
444 } 447 }
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 } 535 }
533 CHECK_FUNC_TYPES_END 536 CHECK_FUNC_TYPES_END
534 } 537 }
535 538
536 539
537 TEST(DoesNothing) { 540 TEST(DoesNothing) {
538 CHECK_FUNC_TYPES_BEGIN( 541 CHECK_FUNC_TYPES_BEGIN(
539 "function bar() { var x = 1.0; }\n" 542 "function bar() { var x = 1.0; }\n"
540 "function foo() { bar(); }") { 543 "function foo() { bar(); }") {
541 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 544 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
542 CHECK_EXPR(Assignment, Bounds(cache.kFloat64)) { 545 CHECK_EXPR(Assignment, Bounds(cache.kAsmDouble)) {
543 CHECK_VAR(x, Bounds(cache.kFloat64)); 546 CHECK_VAR(x, Bounds(cache.kAsmDouble));
544 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 547 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
545 } 548 }
546 } 549 }
547 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 550 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
548 CHECK_EXPR(Call, Bounds(Type::Undefined())) { 551 CHECK_EXPR(Call, Bounds(Type::Undefined())) {
549 CHECK_VAR(bar, FUNC_V_TYPE); 552 CHECK_VAR(bar, FUNC_V_TYPE);
550 } 553 }
551 } 554 }
552 } 555 }
553 CHECK_FUNC_TYPES_END 556 CHECK_FUNC_TYPES_END
554 } 557 }
555 558
556 559
557 TEST(ReturnInt32Literal) { 560 TEST(ReturnInt32Literal) {
558 CHECK_FUNC_TYPES_BEGIN( 561 CHECK_FUNC_TYPES_BEGIN(
559 "function bar() { return 1; }\n" 562 "function bar() { return 1; }\n"
560 "function foo() { bar(); }") { 563 "function foo() { bar(); }") {
561 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 564 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
562 // return 1; 565 // return 1;
563 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 566 CHECK_EXPR(Literal, Bounds(cache.kAsmSigned));
564 } 567 }
565 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 568 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
566 CHECK_EXPR(Call, Bounds(cache.kInt32)) { CHECK_VAR(bar, FUNC_I_TYPE); } 569 CHECK_EXPR(Call, Bounds(cache.kAsmSigned)) {
570 CHECK_VAR(bar, FUNC_I_TYPE);
571 }
567 } 572 }
568 } 573 }
569 CHECK_FUNC_TYPES_END 574 CHECK_FUNC_TYPES_END
570 } 575 }
571 576
572 577
573 TEST(ReturnFloat64Literal) { 578 TEST(ReturnFloat64Literal) {
574 CHECK_FUNC_TYPES_BEGIN( 579 CHECK_FUNC_TYPES_BEGIN(
575 "function bar() { return 1.0; }\n" 580 "function bar() { return 1.0; }\n"
576 "function foo() { bar(); }") { 581 "function foo() { bar(); }") {
577 CHECK_EXPR(FunctionLiteral, FUNC_D_TYPE) { 582 CHECK_EXPR(FunctionLiteral, FUNC_D_TYPE) {
578 // return 1.0; 583 // return 1.0;
579 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 584 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
580 } 585 }
581 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 586 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
582 CHECK_EXPR(Call, Bounds(cache.kFloat64)) { CHECK_VAR(bar, FUNC_D_TYPE); } 587 CHECK_EXPR(Call, Bounds(cache.kAsmDouble)) {
588 CHECK_VAR(bar, FUNC_D_TYPE);
589 }
583 } 590 }
584 } 591 }
585 CHECK_FUNC_TYPES_END 592 CHECK_FUNC_TYPES_END
586 } 593 }
587 594
588 595
589 TEST(ReturnFloat32Literal) { 596 TEST(ReturnFloat32Literal) {
590 CHECK_FUNC_TYPES_BEGIN( 597 CHECK_FUNC_TYPES_BEGIN(
591 "function bar() { return fround(1.0); }\n" 598 "function bar() { return fround(1.0); }\n"
592 "function foo() { bar(); }") { 599 "function foo() { bar(); }") {
593 CHECK_EXPR(FunctionLiteral, FUNC_F_TYPE) { 600 CHECK_EXPR(FunctionLiteral, FUNC_F_TYPE) {
594 // return fround(1.0); 601 // return fround(1.0);
595 CHECK_EXPR(Call, Bounds(cache.kFloat32)) { 602 CHECK_EXPR(Call, Bounds(cache.kAsmFloat)) {
596 CHECK_VAR(fround, FUNC_N2F_TYPE); 603 CHECK_VAR(fround, FUNC_N2F_TYPE);
597 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 604 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
598 } 605 }
599 } 606 }
600 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 607 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
601 CHECK_EXPR(Call, Bounds(cache.kFloat32)) { CHECK_VAR(bar, FUNC_F_TYPE); } 608 CHECK_EXPR(Call, Bounds(cache.kAsmFloat)) { CHECK_VAR(bar, FUNC_F_TYPE); }
602 } 609 }
603 } 610 }
604 CHECK_FUNC_TYPES_END 611 CHECK_FUNC_TYPES_END
605 } 612 }
606 613
607 614
608 TEST(ReturnFloat64Var) { 615 TEST(ReturnFloat64Var) {
609 CHECK_FUNC_TYPES_BEGIN( 616 CHECK_FUNC_TYPES_BEGIN(
610 "function bar() { var x = 1.0; return +x; }\n" 617 "function bar() { var x = 1.0; return +x; }\n"
611 "function foo() { bar(); }") { 618 "function foo() { bar(); }") {
612 CHECK_EXPR(FunctionLiteral, FUNC_D_TYPE) { 619 CHECK_EXPR(FunctionLiteral, FUNC_D_TYPE) {
613 // return 1.0; 620 // return 1.0;
614 CHECK_EXPR(Assignment, Bounds(cache.kFloat64)) { 621 CHECK_EXPR(Assignment, Bounds(cache.kAsmDouble)) {
615 CHECK_VAR(x, Bounds(cache.kFloat64)); 622 CHECK_VAR(x, Bounds(cache.kAsmDouble));
616 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 623 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
617 } 624 }
618 // return 1.0; 625 // return 1.0;
619 CHECK_EXPR(BinaryOperation, Bounds(cache.kFloat64)) { 626 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
620 CHECK_VAR(x, Bounds(cache.kFloat64)); 627 CHECK_VAR(x, Bounds(cache.kAsmDouble));
621 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 628 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
622 } 629 }
623 } 630 }
624 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 631 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
625 CHECK_EXPR(Call, Bounds(cache.kFloat64)) { CHECK_VAR(bar, FUNC_D_TYPE); } 632 CHECK_EXPR(Call, Bounds(cache.kAsmDouble)) {
633 CHECK_VAR(bar, FUNC_D_TYPE);
634 }
626 } 635 }
627 } 636 }
628 CHECK_FUNC_TYPES_END 637 CHECK_FUNC_TYPES_END
629 } 638 }
630 639
631 640
632 TEST(Addition2) { 641 TEST(Addition2) {
633 CHECK_FUNC_TYPES_BEGIN( 642 CHECK_FUNC_TYPES_BEGIN(
634 "function bar() { var x = 1; var y = 2; return (x+y)|0; }\n" 643 "function bar() { var x = 1; var y = 2; return (x+y)|0; }\n"
635 "function foo() { bar(); }") { 644 "function foo() { bar(); }") {
636 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 645 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
637 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 646 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
638 CHECK_VAR(x, Bounds(cache.kInt32)); 647 CHECK_VAR(x, Bounds(cache.kAsmInt));
639 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 648 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
640 } 649 }
641 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 650 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
642 CHECK_VAR(y, Bounds(cache.kInt32)); 651 CHECK_VAR(y, Bounds(cache.kAsmInt));
643 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 652 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
644 } 653 }
645 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 654 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
646 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 655 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
647 CHECK_VAR(x, Bounds(cache.kInt32)); 656 CHECK_VAR(x, Bounds(cache.kAsmInt));
648 CHECK_VAR(y, Bounds(cache.kInt32)); 657 CHECK_VAR(y, Bounds(cache.kAsmInt));
649 } 658 }
650 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 659 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
651 } 660 }
652 } 661 }
653 CHECK_SKIP(); 662 CHECK_SKIP();
654 } 663 }
655 CHECK_FUNC_TYPES_END 664 CHECK_FUNC_TYPES_END
656 } 665 }
657 666
658 667
659 #define TEST_COMPARE_OP(name, op) \ 668 #define TEST_COMPARE_OP(name, op) \
660 TEST(name) { \ 669 TEST(name) { \
661 CHECK_FUNC_TYPES_BEGIN("function bar() { return (0 " op \ 670 CHECK_FUNC_TYPES_BEGIN("function bar() { return (0 " op \
662 " 0)|0; }\n" \ 671 " 0)|0; }\n" \
663 "function foo() { bar(); }") { \ 672 "function foo() { bar(); }") { \
664 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { \ 673 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { \
665 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { \ 674 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) { \
666 CHECK_EXPR(CompareOperation, Bounds(cache.kInt32)) { \ 675 CHECK_EXPR(CompareOperation, Bounds(cache.kAsmSigned)) { \
667 CHECK_EXPR(Literal, Bounds(cache.kInt32)); \ 676 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); \
668 CHECK_EXPR(Literal, Bounds(cache.kInt32)); \ 677 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); \
669 } \ 678 } \
670 CHECK_EXPR(Literal, Bounds(cache.kInt32)); \ 679 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); \
671 } \ 680 } \
672 } \ 681 } \
673 CHECK_SKIP(); \ 682 CHECK_SKIP(); \
674 } \ 683 } \
675 CHECK_FUNC_TYPES_END \ 684 CHECK_FUNC_TYPES_END \
676 } 685 }
677 686
678 687
679 TEST_COMPARE_OP(EqOperator, "==") 688 TEST_COMPARE_OP(EqOperator, "==")
680 TEST_COMPARE_OP(LtOperator, "<") 689 TEST_COMPARE_OP(LtOperator, "<")
681 TEST_COMPARE_OP(LteOperator, "<=") 690 TEST_COMPARE_OP(LteOperator, "<=")
682 TEST_COMPARE_OP(GtOperator, ">") 691 TEST_COMPARE_OP(GtOperator, ">")
683 TEST_COMPARE_OP(GteOperator, ">=") 692 TEST_COMPARE_OP(GteOperator, ">=")
684 693
685 694
686 TEST(NeqOperator) { 695 TEST(NeqOperator) {
687 CHECK_FUNC_TYPES_BEGIN( 696 CHECK_FUNC_TYPES_BEGIN(
688 "function bar() { return (0 != 0)|0; }\n" 697 "function bar() { return (0 != 0)|0; }\n"
689 "function foo() { bar(); }") { 698 "function foo() { bar(); }") {
690 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 699 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
691 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 700 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
692 CHECK_EXPR(UnaryOperation, Bounds(cache.kInt32)) { 701 CHECK_EXPR(UnaryOperation, Bounds(cache.kAsmSigned)) {
693 CHECK_EXPR(CompareOperation, Bounds(cache.kInt32)) { 702 CHECK_EXPR(CompareOperation, Bounds(cache.kAsmSigned)) {
694 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 703 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
695 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 704 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
696 } 705 }
697 } 706 }
698 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 707 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
699 } 708 }
700 } 709 }
701 CHECK_SKIP(); 710 CHECK_SKIP();
702 } 711 }
703 CHECK_FUNC_TYPES_END 712 CHECK_FUNC_TYPES_END
704 } 713 }
705 714
706 715
707 TEST(NotOperator) { 716 TEST(NotOperator) {
708 CHECK_FUNC_TYPES_BEGIN( 717 CHECK_FUNC_TYPES_BEGIN(
709 "function bar() { var x = 0; return (!x)|0; }\n" 718 "function bar() { var x = 0; return (!x)|0; }\n"
710 "function foo() { bar(); }") { 719 "function foo() { bar(); }") {
711 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 720 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
712 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 721 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
713 CHECK_VAR(x, Bounds(cache.kInt32)); 722 CHECK_VAR(x, Bounds(cache.kAsmInt));
714 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 723 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
715 } 724 }
716 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 725 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
717 CHECK_EXPR(UnaryOperation, Bounds(cache.kInt32)) { 726 CHECK_EXPR(UnaryOperation, Bounds(cache.kAsmSigned)) {
718 CHECK_VAR(x, Bounds(cache.kInt32)); 727 CHECK_VAR(x, Bounds(cache.kAsmInt));
719 } 728 }
720 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 729 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
721 } 730 }
722 } 731 }
723 CHECK_SKIP(); 732 CHECK_SKIP();
724 } 733 }
725 CHECK_FUNC_TYPES_END 734 CHECK_FUNC_TYPES_END
726 } 735 }
727 736
728 737
729 TEST(InvertOperator) { 738 TEST(InvertOperator) {
730 CHECK_FUNC_TYPES_BEGIN( 739 CHECK_FUNC_TYPES_BEGIN(
731 "function bar() { var x = 0; return (~x)|0; }\n" 740 "function bar() { var x = 0; return (~x)|0; }\n"
732 "function foo() { bar(); }") { 741 "function foo() { bar(); }") {
733 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 742 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
734 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 743 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
735 CHECK_VAR(x, Bounds(cache.kInt32)); 744 CHECK_VAR(x, Bounds(cache.kAsmInt));
736 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 745 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
737 } 746 }
738 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 747 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
739 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 748 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
740 CHECK_VAR(x, Bounds(cache.kInt32)); 749 CHECK_VAR(x, Bounds(cache.kAsmInt));
741 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 750 CHECK_EXPR(Literal, Bounds(cache.kAsmSigned));
742 } 751 }
743 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 752 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
744 } 753 }
745 } 754 }
746 CHECK_SKIP(); 755 CHECK_SKIP();
747 } 756 }
748 CHECK_FUNC_TYPES_END 757 CHECK_FUNC_TYPES_END
749 } 758 }
750 759
751 760
752 TEST(InvertConversion) { 761 TEST(InvertConversion) {
753 CHECK_FUNC_TYPES_BEGIN( 762 CHECK_FUNC_TYPES_BEGIN(
754 "function bar() { var x = 0.0; return (~~x)|0; }\n" 763 "function bar() { var x = 0.0; return (~~x)|0; }\n"
755 "function foo() { bar(); }") { 764 "function foo() { bar(); }") {
756 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 765 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
757 CHECK_EXPR(Assignment, Bounds(cache.kFloat64)) { 766 CHECK_EXPR(Assignment, Bounds(cache.kAsmDouble)) {
758 CHECK_VAR(x, Bounds(cache.kFloat64)); 767 CHECK_VAR(x, Bounds(cache.kAsmDouble));
759 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 768 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
760 } 769 }
761 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 770 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
762 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 771 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
763 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 772 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
764 CHECK_VAR(x, Bounds(cache.kFloat64)); 773 CHECK_VAR(x, Bounds(cache.kAsmDouble));
765 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 774 CHECK_EXPR(Literal, Bounds(cache.kAsmSigned));
766 } 775 }
767 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 776 CHECK_EXPR(Literal, Bounds(cache.kAsmSigned));
768 } 777 }
769 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 778 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
770 } 779 }
771 } 780 }
772 CHECK_SKIP(); 781 CHECK_SKIP();
773 } 782 }
774 CHECK_FUNC_TYPES_END 783 CHECK_FUNC_TYPES_END
775 } 784 }
776 785
777 786
778 #define TEST_INT_BIN_OP(name, op) \ 787 #define TEST_INT_BIN_OP(name, op) \
779 TEST(name) { \ 788 TEST(name) { \
780 CHECK_FUNC_TYPES_BEGIN("function bar() { var x = 0; return (x " op \ 789 CHECK_FUNC_TYPES_BEGIN("function bar() { var x = 0; return (x " op \
781 " 123)|0; }\n" \ 790 " 123)|0; }\n" \
782 "function foo() { bar(); }") { \ 791 "function foo() { bar(); }") { \
783 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { \ 792 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { \
784 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { \ 793 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) { \
785 CHECK_VAR(x, Bounds(cache.kInt32)); \ 794 CHECK_VAR(x, Bounds(cache.kAsmInt)); \
786 CHECK_EXPR(Literal, Bounds(cache.kInt32)); \ 795 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); \
787 } \ 796 } \
788 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { \ 797 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) { \
789 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { \ 798 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) { \
790 CHECK_VAR(x, Bounds(cache.kInt32)); \ 799 CHECK_VAR(x, Bounds(cache.kAsmInt)); \
791 CHECK_EXPR(Literal, Bounds(cache.kInt32)); \ 800 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); \
792 } \ 801 } \
793 CHECK_EXPR(Literal, Bounds(cache.kInt32)); \ 802 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); \
794 } \ 803 } \
795 } \ 804 } \
796 CHECK_SKIP(); \ 805 CHECK_SKIP(); \
797 } \ 806 } \
798 CHECK_FUNC_TYPES_END \ 807 CHECK_FUNC_TYPES_END \
799 } 808 }
800 809
801 810
802 TEST_INT_BIN_OP(AndOperator, "&") 811 TEST_INT_BIN_OP(AndOperator, "&")
803 TEST_INT_BIN_OP(OrOperator, "|") 812 TEST_INT_BIN_OP(OrOperator, "|")
804 TEST_INT_BIN_OP(XorOperator, "^") 813 TEST_INT_BIN_OP(XorOperator, "^")
805 814
806 815
807 TEST(UnsignedCompare) { 816 TEST(UnsignedCompare) {
808 CHECK_FUNC_TYPES_BEGIN( 817 CHECK_FUNC_TYPES_BEGIN(
809 "function bar() { var x = 1; var y = 1; return ((x>>>0) < (y>>>0))|0; }\n" 818 "function bar() { var x = 1; var y = 1; return ((x>>>0) < (y>>>0))|0; }\n"
810 "function foo() { bar(); }") { 819 "function foo() { bar(); }") {
811 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 820 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
812 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 821 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
813 CHECK_VAR(x, Bounds(cache.kInt32)); 822 CHECK_VAR(x, Bounds(cache.kAsmInt));
814 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 823 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
815 } 824 }
816 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 825 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
817 CHECK_VAR(y, Bounds(cache.kInt32)); 826 CHECK_VAR(y, Bounds(cache.kAsmInt));
818 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 827 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
819 } 828 }
820 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 829 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
821 CHECK_EXPR(CompareOperation, Bounds(cache.kInt32)) { 830 CHECK_EXPR(CompareOperation, Bounds(cache.kAsmSigned)) {
822 CHECK_EXPR(BinaryOperation, Bounds(cache.kUint32)) { 831 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmUnsigned)) {
823 CHECK_VAR(x, Bounds(cache.kInt32)); 832 CHECK_VAR(x, Bounds(cache.kAsmInt));
824 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 833 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
825 } 834 }
826 CHECK_EXPR(BinaryOperation, Bounds(cache.kUint32)) { 835 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmUnsigned)) {
827 CHECK_VAR(y, Bounds(cache.kInt32)); 836 CHECK_VAR(y, Bounds(cache.kAsmInt));
828 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 837 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
829 } 838 }
830 } 839 }
831 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 840 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
832 } 841 }
833 } 842 }
834 CHECK_SKIP(); 843 CHECK_SKIP();
835 } 844 }
836 CHECK_FUNC_TYPES_END 845 CHECK_FUNC_TYPES_END
837 } 846 }
838 847
839 848
840 TEST(UnsignedDivide) { 849 TEST(UnsignedDivide) {
841 CHECK_FUNC_TYPES_BEGIN( 850 CHECK_FUNC_TYPES_BEGIN(
842 "function bar() { var x = 1; var y = 1; return ((x>>>0) / (y>>>0))|0; }\n" 851 "function bar() { var x = 1; var y = 1; return ((x>>>0) / (y>>>0))|0; }\n"
843 "function foo() { bar(); }") { 852 "function foo() { bar(); }") {
844 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 853 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
845 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 854 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
846 CHECK_VAR(x, Bounds(cache.kInt32)); 855 CHECK_VAR(x, Bounds(cache.kAsmInt));
847 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 856 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
848 } 857 }
849 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 858 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
850 CHECK_VAR(y, Bounds(cache.kInt32)); 859 CHECK_VAR(y, Bounds(cache.kAsmInt));
851 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 860 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
852 } 861 }
853 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 862 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
854 CHECK_EXPR(BinaryOperation, Bounds(Type::None(), Type::Any())) { 863 CHECK_EXPR(BinaryOperation, Bounds(Type::None(), Type::Any())) {
855 CHECK_EXPR(BinaryOperation, Bounds(cache.kUint32)) { 864 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmUnsigned)) {
856 CHECK_VAR(x, Bounds(cache.kInt32)); 865 CHECK_VAR(x, Bounds(cache.kAsmInt));
857 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 866 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
858 } 867 }
859 CHECK_EXPR(BinaryOperation, Bounds(cache.kUint32)) { 868 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmUnsigned)) {
860 CHECK_VAR(y, Bounds(cache.kInt32)); 869 CHECK_VAR(y, Bounds(cache.kAsmInt));
861 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 870 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
862 } 871 }
863 } 872 }
864 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 873 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
865 } 874 }
866 } 875 }
867 CHECK_SKIP(); 876 CHECK_SKIP();
868 } 877 }
869 CHECK_FUNC_TYPES_END 878 CHECK_FUNC_TYPES_END
870 } 879 }
871 880
872 881
873 TEST(UnsignedFromFloat64) { 882 TEST(UnsignedFromFloat64) {
874 CHECK_FUNC_ERROR( 883 CHECK_FUNC_ERROR(
875 "function bar() { var x = 1.0; return (x>>>0)|0; }\n" 884 "function bar() { var x = 1.0; return (x>>>0)|0; }\n"
876 "function foo() { bar(); }", 885 "function foo() { bar(); }",
877 "asm: line 39: ill typed bitwise operation\n"); 886 "asm: line 39: left bitwise operand expected to be an integer\n");
878 } 887 }
879 888
880 889
890 TEST(AndFloat64) {
891 CHECK_FUNC_ERROR(
892 "function bar() { var x = 1.0; return (x&0)|0; }\n"
893 "function foo() { bar(); }",
894 "asm: line 39: left bitwise operand expected to be an integer\n");
895 }
896
897
881 TEST(TypeMismatchAddInt32Float64) { 898 TEST(TypeMismatchAddInt32Float64) {
882 CHECK_FUNC_ERROR( 899 CHECK_FUNC_ERROR(
883 "function bar() { var x = 1.0; var y = 0; return (x + y)|0; }\n" 900 "function bar() { var x = 1.0; var y = 0; return (x + y)|0; }\n"
884 "function foo() { bar(); }", 901 "function foo() { bar(); }",
885 "asm: line 39: ill-typed arithmetic operation\n"); 902 "asm: line 39: ill-typed arithmetic operation\n");
886 } 903 }
887 904
888 905
889 TEST(TypeMismatchSubInt32Float64) { 906 TEST(TypeMismatchSubInt32Float64) {
890 CHECK_FUNC_ERROR( 907 CHECK_FUNC_ERROR(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
924 "function foo() { bar(); }", 941 "function foo() { bar(); }",
925 "asm: line 39: ill-typed conditional\n"); 942 "asm: line 39: ill-typed conditional\n");
926 } 943 }
927 944
928 945
929 TEST(FroundFloat32) { 946 TEST(FroundFloat32) {
930 CHECK_FUNC_TYPES_BEGIN( 947 CHECK_FUNC_TYPES_BEGIN(
931 "function bar() { var x = 1; return fround(x); }\n" 948 "function bar() { var x = 1; return fround(x); }\n"
932 "function foo() { bar(); }") { 949 "function foo() { bar(); }") {
933 CHECK_EXPR(FunctionLiteral, FUNC_F_TYPE) { 950 CHECK_EXPR(FunctionLiteral, FUNC_F_TYPE) {
934 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 951 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
935 CHECK_VAR(x, Bounds(cache.kInt32)); 952 CHECK_VAR(x, Bounds(cache.kAsmInt));
936 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 953 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
937 } 954 }
938 CHECK_EXPR(Call, Bounds(cache.kFloat32)) { 955 CHECK_EXPR(Call, Bounds(cache.kAsmFloat)) {
939 CHECK_VAR(fround, FUNC_N2F_TYPE); 956 CHECK_VAR(fround, FUNC_N2F_TYPE);
940 CHECK_VAR(x, Bounds(cache.kInt32)); 957 CHECK_VAR(x, Bounds(cache.kAsmInt));
941 } 958 }
942 } 959 }
943 CHECK_SKIP(); 960 CHECK_SKIP();
944 } 961 }
945 CHECK_FUNC_TYPES_END 962 CHECK_FUNC_TYPES_END
946 } 963 }
947 964
948 965
949 TEST(Addition4) { 966 TEST(Addition4) {
950 CHECK_FUNC_TYPES_BEGIN( 967 CHECK_FUNC_TYPES_BEGIN(
951 "function bar() { var x = 1; var y = 2; return (x+y+x+y)|0; }\n" 968 "function bar() { var x = 1; var y = 2; return (x+y+x+y)|0; }\n"
952 "function foo() { bar(); }") { 969 "function foo() { bar(); }") {
953 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 970 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
954 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 971 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
955 CHECK_VAR(x, Bounds(cache.kInt32)); 972 CHECK_VAR(x, Bounds(cache.kAsmInt));
956 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 973 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
957 } 974 }
958 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 975 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
959 CHECK_VAR(y, Bounds(cache.kInt32)); 976 CHECK_VAR(y, Bounds(cache.kAsmInt));
960 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 977 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
961 } 978 }
962 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 979 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
963 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 980 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
964 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 981 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
965 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 982 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
966 CHECK_VAR(x, Bounds(cache.kInt32)); 983 CHECK_VAR(x, Bounds(cache.kAsmInt));
967 CHECK_VAR(y, Bounds(cache.kInt32)); 984 CHECK_VAR(y, Bounds(cache.kAsmInt));
968 } 985 }
969 CHECK_VAR(x, Bounds(cache.kInt32)); 986 CHECK_VAR(x, Bounds(cache.kAsmInt));
970 } 987 }
971 CHECK_VAR(y, Bounds(cache.kInt32)); 988 CHECK_VAR(y, Bounds(cache.kAsmInt));
972 } 989 }
973 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 990 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
974 } 991 }
975 } 992 }
976 CHECK_SKIP(); 993 CHECK_SKIP();
977 } 994 }
978 CHECK_FUNC_TYPES_END 995 CHECK_FUNC_TYPES_END
979 } 996 }
980 997
981 998
982 TEST(Multiplication2) { 999 TEST(Multiplication2) {
983 CHECK_FUNC_ERROR( 1000 CHECK_FUNC_ERROR(
(...skipping 14 matching lines...) Expand all
998 TEST(CompareMismatchInt32Float64) { 1015 TEST(CompareMismatchInt32Float64) {
999 CHECK_FUNC_ERROR( 1016 CHECK_FUNC_ERROR(
1000 "function bar() { var x = 1; var y = 2.0; return (x < y)|0; }\n" 1017 "function bar() { var x = 1; var y = 2.0; return (x < y)|0; }\n"
1001 "function foo() { bar(); }", 1018 "function foo() { bar(); }",
1002 "asm: line 39: ill-typed comparison operation\n"); 1019 "asm: line 39: ill-typed comparison operation\n");
1003 } 1020 }
1004 1021
1005 1022
1006 TEST(CompareMismatchInt32Uint32) { 1023 TEST(CompareMismatchInt32Uint32) {
1007 CHECK_FUNC_ERROR( 1024 CHECK_FUNC_ERROR(
1008 "function bar() { var x = 1; var y = 2; return (x < (y>>>0))|0; }\n" 1025 "function bar() { var x = 1; var y = 2; return ((x|0) < (y>>>0))|0; }\n"
1009 "function foo() { bar(); }", 1026 "function foo() { bar(); }",
1010 "asm: line 39: ill-typed comparison operation\n"); 1027 "asm: line 39: ill-typed comparison operation\n");
1011 } 1028 }
1012 1029
1013 1030
1014 TEST(CompareMismatchInt32Float32) { 1031 TEST(CompareMismatchInt32Float32) {
1015 CHECK_FUNC_ERROR( 1032 CHECK_FUNC_ERROR(
1016 "function bar() { var x = 1; var y = 2; return (x < fround(y))|0; }\n" 1033 "function bar() { var x = 1; var y = 2; return (x < fround(y))|0; }\n"
1017 "function foo() { bar(); }", 1034 "function foo() { bar(); }",
1018 "asm: line 39: ill-typed comparison operation\n"); 1035 "asm: line 39: ill-typed comparison operation\n");
1019 } 1036 }
1020 1037
1021 1038
1022 TEST(Float64ToInt32) { 1039 TEST(Float64ToInt32) {
1023 CHECK_FUNC_TYPES_BEGIN( 1040 CHECK_FUNC_TYPES_BEGIN(
1024 "function bar() { var x = 1; var y = 0.0; x = ~~y; }\n" 1041 "function bar() { var x = 1; var y = 0.0; x = ~~y; }\n"
1025 "function foo() { bar(); }") { 1042 "function foo() { bar(); }") {
1026 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 1043 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
1027 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1044 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1028 CHECK_VAR(x, Bounds(cache.kInt32)); 1045 CHECK_VAR(x, Bounds(cache.kAsmInt));
1029 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1046 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1030 } 1047 }
1031 CHECK_EXPR(Assignment, Bounds(cache.kFloat64)) { 1048 CHECK_EXPR(Assignment, Bounds(cache.kAsmDouble)) {
1032 CHECK_VAR(y, Bounds(cache.kFloat64)); 1049 CHECK_VAR(y, Bounds(cache.kAsmDouble));
1033 CHECK_EXPR(Literal, Bounds(cache.kFloat64)); 1050 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
1034 } 1051 }
1035 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1052 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1036 CHECK_VAR(x, Bounds(cache.kInt32)); 1053 CHECK_VAR(x, Bounds(cache.kAsmInt));
1037 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1054 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1038 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1055 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1039 CHECK_VAR(y, Bounds(cache.kFloat64)); 1056 CHECK_VAR(y, Bounds(cache.kAsmDouble));
1040 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1057 CHECK_EXPR(Literal, Bounds(cache.kAsmSigned));
1041 } 1058 }
1042 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1059 CHECK_EXPR(Literal, Bounds(cache.kAsmSigned));
1043 } 1060 }
1044 } 1061 }
1045 } 1062 }
1046 CHECK_SKIP(); 1063 CHECK_SKIP();
1047 } 1064 }
1048 CHECK_FUNC_TYPES_END 1065 CHECK_FUNC_TYPES_END
1049 } 1066 }
1050 1067
1051 1068
1052 TEST(Load1) { 1069 TEST(Load1) {
1053 CHECK_FUNC_TYPES_BEGIN( 1070 CHECK_FUNC_TYPES_BEGIN(
1054 "function bar() { var x = 1; var y = i8[x>>0]|0; }\n" 1071 "function bar() { var x = 1; var y = i8[x>>0]|0; }\n"
1055 "function foo() { bar(); }") { 1072 "function foo() { bar(); }") {
1056 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 1073 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
1057 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1074 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1058 CHECK_VAR(x, Bounds(cache.kInt32)); 1075 CHECK_VAR(x, Bounds(cache.kAsmInt));
1059 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1076 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1060 } 1077 }
1061 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1078 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1062 CHECK_VAR(y, Bounds(cache.kInt32)); 1079 CHECK_VAR(y, Bounds(cache.kAsmInt));
1063 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1080 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1064 CHECK_EXPR(Property, Bounds(cache.kInt8)) { 1081 CHECK_EXPR(Property, Bounds(cache.kInt8)) {
1065 CHECK_VAR(i8, Bounds(cache.kInt8Array)); 1082 CHECK_VAR(i8, Bounds(cache.kInt8Array));
1066 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1083 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1067 CHECK_VAR(x, Bounds(cache.kInt32)); 1084 CHECK_VAR(x, Bounds(cache.kAsmSigned));
1068 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1085 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1069 } 1086 }
1070 } 1087 }
1071 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1088 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1072 } 1089 }
1073 } 1090 }
1074 } 1091 }
1075 CHECK_SKIP(); 1092 CHECK_SKIP();
1076 } 1093 }
1077 CHECK_FUNC_TYPES_END 1094 CHECK_FUNC_TYPES_END
1078 } 1095 }
1079 1096
1080 1097
1081 TEST(Load1Constant) { 1098 TEST(Load1Constant) {
1082 CHECK_FUNC_TYPES_BEGIN( 1099 CHECK_FUNC_TYPES_BEGIN(
1083 "function bar() { var x = 1; var y = i8[5]|0; }\n" 1100 "function bar() { var x = 1; var y = i8[5]|0; }\n"
1084 "function foo() { bar(); }") { 1101 "function foo() { bar(); }") {
1085 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 1102 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
1086 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1103 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1087 CHECK_VAR(x, Bounds(cache.kInt32)); 1104 CHECK_VAR(x, Bounds(cache.kAsmInt));
1088 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1105 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1089 } 1106 }
1090 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1107 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1091 CHECK_VAR(y, Bounds(cache.kInt32)); 1108 CHECK_VAR(y, Bounds(cache.kAsmInt));
1092 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1109 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1093 CHECK_EXPR(Property, Bounds(cache.kInt8)) { 1110 CHECK_EXPR(Property, Bounds(cache.kInt8)) {
1094 CHECK_VAR(i8, Bounds(cache.kInt8Array)); 1111 CHECK_VAR(i8, Bounds(cache.kInt8Array));
1095 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1112 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1096 } 1113 }
1097 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1114 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1098 } 1115 }
1099 } 1116 }
1100 } 1117 }
1101 CHECK_SKIP(); 1118 CHECK_SKIP();
1102 } 1119 }
1103 CHECK_FUNC_TYPES_END 1120 CHECK_FUNC_TYPES_END
1104 } 1121 }
1105 1122
1106 1123
1107 TEST(FunctionTables) { 1124 TEST(FunctionTables) {
1108 CHECK_FUNC_TYPES_BEGIN( 1125 CHECK_FUNC_TYPES_BEGIN(
1109 "function func1(x) { x = x | 0; return (x * 5) | 0; }\n" 1126 "function func1(x) { x = x | 0; return (x * 5) | 0; }\n"
1110 "function func2(x) { x = x | 0; return (x * 25) | 0; }\n" 1127 "function func2(x) { x = x | 0; return (x * 25) | 0; }\n"
1111 "var table1 = [func1, func2];\n" 1128 "var table1 = [func1, func2];\n"
1112 "function bar(x, y) { x = x | 0; y = y | 0;\n" 1129 "function bar(x, y) { x = x | 0; y = y | 0;\n"
1113 " return table1[x & 1](y)|0; }\n" 1130 " return table1[x & 1](y)|0; }\n"
1114 "function foo() { bar(1, 2); }") { 1131 "function foo() { bar(1, 2); }") {
1115 CHECK_EXPR(FunctionLiteral, FUNC_I2I_TYPE) { 1132 CHECK_EXPR(FunctionLiteral, FUNC_I2I_TYPE) {
1116 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1133 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1117 CHECK_VAR(x, Bounds(cache.kInt32)); 1134 CHECK_VAR(x, Bounds(cache.kAsmInt));
1118 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1135 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1119 CHECK_VAR(x, Bounds(cache.kInt32)); 1136 CHECK_VAR(x, Bounds(cache.kAsmInt));
1120 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1137 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1121 } 1138 }
1122 } 1139 }
1123 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1140 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1124 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1141 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
1125 CHECK_VAR(x, Bounds(cache.kInt32)); 1142 CHECK_VAR(x, Bounds(cache.kAsmInt));
1126 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1143 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1127 } 1144 }
1128 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1145 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1129 } 1146 }
1130 } 1147 }
1131 CHECK_EXPR(FunctionLiteral, FUNC_I2I_TYPE) { 1148 CHECK_EXPR(FunctionLiteral, FUNC_I2I_TYPE) {
1132 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1149 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1133 CHECK_VAR(x, Bounds(cache.kInt32)); 1150 CHECK_VAR(x, Bounds(cache.kAsmInt));
1134 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1151 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1135 CHECK_VAR(x, Bounds(cache.kInt32)); 1152 CHECK_VAR(x, Bounds(cache.kAsmInt));
1136 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1153 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1137 } 1154 }
1138 } 1155 }
1139 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1156 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1140 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1157 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
1141 CHECK_VAR(x, Bounds(cache.kInt32)); 1158 CHECK_VAR(x, Bounds(cache.kAsmInt));
1142 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1159 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1143 } 1160 }
1144 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1161 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1145 } 1162 }
1146 } 1163 }
1147 CHECK_EXPR(FunctionLiteral, FUNC_II2I_TYPE) { 1164 CHECK_EXPR(FunctionLiteral, FUNC_II2I_TYPE) {
1148 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1165 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1149 CHECK_VAR(x, Bounds(cache.kInt32)); 1166 CHECK_VAR(x, Bounds(cache.kAsmInt));
1150 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1167 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1151 CHECK_VAR(x, Bounds(cache.kInt32)); 1168 CHECK_VAR(x, Bounds(cache.kAsmInt));
1152 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1169 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1153 } 1170 }
1154 } 1171 }
1155 CHECK_EXPR(Assignment, Bounds(cache.kInt32)) { 1172 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1156 CHECK_VAR(y, Bounds(cache.kInt32)); 1173 CHECK_VAR(y, Bounds(cache.kAsmInt));
1157 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1174 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1158 CHECK_VAR(y, Bounds(cache.kInt32)); 1175 CHECK_VAR(y, Bounds(cache.kAsmInt));
1159 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1176 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1160 } 1177 }
1161 } 1178 }
1162 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1179 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1163 CHECK_EXPR(Call, Bounds(cache.kInt32)) { 1180 CHECK_EXPR(Call, Bounds(cache.kAsmSigned)) {
1164 CHECK_EXPR(Property, FUNC_I2I_TYPE) { 1181 CHECK_EXPR(Property, FUNC_I2I_TYPE) {
1165 CHECK_VAR(table1, FUNC_I2I_ARRAY_TYPE); 1182 CHECK_VAR(table1, FUNC_I2I_ARRAY_TYPE);
1166 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1183 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1167 CHECK_VAR(x, Bounds(cache.kInt32)); 1184 CHECK_VAR(x, Bounds(cache.kAsmSigned));
1168 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1185 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1169 } 1186 }
1170 } 1187 }
1171 CHECK_VAR(y, Bounds(cache.kInt32)); 1188 CHECK_VAR(y, Bounds(cache.kAsmInt));
1172 } 1189 }
1173 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1190 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1174 } 1191 }
1175 } 1192 }
1176 CHECK_SKIP(); 1193 CHECK_SKIP();
1177 } 1194 }
1178 CHECK_FUNC_TYPES_END_1(); 1195 CHECK_FUNC_TYPES_END_1();
1179 CHECK_EXPR(Assignment, FUNC_I2I_ARRAY_TYPE) { 1196 CHECK_EXPR(Assignment, FUNC_I2I_ARRAY_TYPE) {
1180 CHECK_VAR(table1, FUNC_I2I_ARRAY_TYPE); 1197 CHECK_VAR(table1, FUNC_I2I_ARRAY_TYPE);
1181 CHECK_EXPR(ArrayLiteral, FUNC_I2I_ARRAY_TYPE) { 1198 CHECK_EXPR(ArrayLiteral, FUNC_I2I_ARRAY_TYPE) {
1182 CHECK_VAR(func1, FUNC_I2I_TYPE); 1199 CHECK_VAR(func1, FUNC_I2I_TYPE);
1183 CHECK_VAR(func2, FUNC_I2I_TYPE); 1200 CHECK_VAR(func2, FUNC_I2I_TYPE);
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 "asm: line 39: illegal literal\n"); 1350 "asm: line 39: illegal literal\n");
1334 } 1351 }
1335 1352
1336 1353
1337 TEST(ForeignFunction) { 1354 TEST(ForeignFunction) {
1338 CHECK_FUNC_TYPES_BEGIN( 1355 CHECK_FUNC_TYPES_BEGIN(
1339 "var baz = foreign.baz;\n" 1356 "var baz = foreign.baz;\n"
1340 "function bar() { return baz(1, 2)|0; }\n" 1357 "function bar() { return baz(1, 2)|0; }\n"
1341 "function foo() { bar(); }") { 1358 "function foo() { bar(); }") {
1342 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 1359 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
1343 CHECK_EXPR(BinaryOperation, Bounds(cache.kInt32)) { 1360 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
1344 CHECK_EXPR(Call, Bounds(Type::Number(zone))) { 1361 CHECK_EXPR(Call, Bounds(Type::Number(zone))) {
1345 CHECK_VAR(baz, Bounds(Type::Any())); 1362 CHECK_VAR(baz, Bounds(Type::Any()));
1346 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1363 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1347 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1364 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1348 } 1365 }
1349 CHECK_EXPR(Literal, Bounds(cache.kInt32)); 1366 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
1350 } 1367 }
1351 } 1368 }
1352 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 1369 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
1353 CHECK_EXPR(Call, Bounds(cache.kInt32)) { CHECK_VAR(bar, FUNC_I_TYPE); } 1370 CHECK_EXPR(Call, Bounds(cache.kAsmSigned)) {
1371 CHECK_VAR(bar, FUNC_I_TYPE);
1372 }
1354 } 1373 }
1355 } 1374 }
1356 CHECK_FUNC_TYPES_END_1() 1375 CHECK_FUNC_TYPES_END_1()
1357 CHECK_EXPR(Assignment, Bounds(Type::Any())) { 1376 CHECK_EXPR(Assignment, Bounds(Type::Any())) {
1358 CHECK_VAR(baz, Bounds(Type::Any())); 1377 CHECK_VAR(baz, Bounds(Type::Any()));
1359 CHECK_EXPR(Property, Bounds(Type::Any())) { 1378 CHECK_EXPR(Property, Bounds(Type::Any())) {
1360 CHECK_VAR(foreign, Bounds::Unbounded()); 1379 CHECK_VAR(foreign, Bounds::Unbounded());
1361 CHECK_EXPR(Literal, Bounds::Unbounded()); 1380 CHECK_EXPR(Literal, Bounds::Unbounded());
1362 } 1381 }
1363 } 1382 }
1364 CHECK_FUNC_TYPES_END_2() 1383 CHECK_FUNC_TYPES_END_2()
1365 } 1384 }
1366 1385
1367 1386
1368 TEST(BadExports) { 1387 TEST(BadExports) {
1369 HARNESS_PREAMBLE() 1388 HARNESS_PREAMBLE()
1370 "function foo() {};\n" 1389 "function foo() {};\n"
1371 "return {foo: foo, bar: 1};" 1390 "return {foo: foo, bar: 1};"
1372 "}\n"; 1391 "}\n";
1373 1392
1374 v8::V8::Initialize(); 1393 v8::V8::Initialize();
1375 HandleAndZoneScope handles; 1394 HandleAndZoneScope handles;
1376 Zone* zone = handles.main_zone(); 1395 Zone* zone = handles.main_zone();
1377 ZoneVector<ExpressionTypeEntry> types(zone); 1396 ZoneVector<ExpressionTypeEntry> types(zone);
1378 CHECK_EQ("asm: line 40: non-function in function table\n", 1397 CHECK_EQ("asm: line 40: non-function in function table\n",
1379 Validate(zone, test_function, &types)); 1398 Validate(zone, test_function, &types));
1380 } 1399 }
OLDNEW
« src/typing-asm.cc ('K') | « src/typing-asm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698