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

Side by Side Diff: src/compiler/operation-typer.cc

Issue 2161013002: [turbofan] Fix typing rule for number addition. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 5 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 | « no previous file | test/mjsunit/regress/regress-crbug-629435.js » ('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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/compiler/operation-typer.h" 5 #include "src/compiler/operation-typer.h"
6 6
7 #include "src/factory.h" 7 #include "src/factory.h"
8 #include "src/isolate.h" 8 #include "src/isolate.h"
9 #include "src/type-cache.h" 9 #include "src/type-cache.h"
10 #include "src/types.h" 10 #include "src/types.h"
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 if (!lhs->IsInhabited() || !rhs->IsInhabited()) { 292 if (!lhs->IsInhabited() || !rhs->IsInhabited()) {
293 return Type::None(); 293 return Type::None();
294 } 294 }
295 295
296 // We can give more precise types for integers. 296 // We can give more precise types for integers.
297 if (!lhs->Is(cache_.kIntegerOrMinusZeroOrNaN) || 297 if (!lhs->Is(cache_.kIntegerOrMinusZeroOrNaN) ||
298 !rhs->Is(cache_.kIntegerOrMinusZeroOrNaN)) { 298 !rhs->Is(cache_.kIntegerOrMinusZeroOrNaN)) {
299 return Type::Number(); 299 return Type::Number();
300 } 300 }
301 Type* int_lhs = Type::Intersect(lhs, cache_.kInteger, zone()); 301 Type* int_lhs = Type::Intersect(lhs, cache_.kInteger, zone());
302 if (lhs->Maybe(Type::MinusZero())) {
303 int_lhs = Type::Union(int_lhs, cache_.kSingletonZero, zone());
304 }
302 Type* int_rhs = Type::Intersect(rhs, cache_.kInteger, zone()); 305 Type* int_rhs = Type::Intersect(rhs, cache_.kInteger, zone());
306 if (rhs->Maybe(Type::MinusZero())) {
307 int_rhs = Type::Union(int_rhs, cache_.kSingletonZero, zone());
308 }
303 Type* result = 309 Type* result =
304 AddRanger(int_lhs->Min(), int_lhs->Max(), int_rhs->Min(), int_rhs->Max()); 310 AddRanger(int_lhs->Min(), int_lhs->Max(), int_rhs->Min(), int_rhs->Max());
305 if (lhs->Maybe(Type::NaN()) || rhs->Maybe(Type::NaN())) { 311 if (lhs->Maybe(Type::NaN()) || rhs->Maybe(Type::NaN())) {
306 result = Type::Union(result, Type::NaN(), zone()); 312 result = Type::Union(result, Type::NaN(), zone());
307 } 313 }
308 if (lhs->Maybe(Type::MinusZero()) && rhs->Maybe(Type::MinusZero())) { 314 if (lhs->Maybe(Type::MinusZero()) && rhs->Maybe(Type::MinusZero())) {
309 result = Type::Union(result, Type::MinusZero(), zone()); 315 result = Type::Union(result, Type::MinusZero(), zone());
310 } 316 }
311 return result; 317 return result;
312 } 318 }
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 return NumberAdd(lhs, rhs); 476 return NumberAdd(lhs, rhs);
471 } 477 }
472 478
473 Type* OperationTyper::TypeJSSubtract(Type* lhs, Type* rhs) { 479 Type* OperationTyper::TypeJSSubtract(Type* lhs, Type* rhs) {
474 return NumberSubtract(ToNumber(lhs), ToNumber(rhs)); 480 return NumberSubtract(ToNumber(lhs), ToNumber(rhs));
475 } 481 }
476 482
477 } // namespace compiler 483 } // namespace compiler
478 } // namespace internal 484 } // namespace internal
479 } // namespace v8 485 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/regress/regress-crbug-629435.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698