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

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

Issue 1921563002: [turbofan] Initial version of number type feedback. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add tests for the checks and fix check insertion Created 4 years, 6 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 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/compiler/typer.h" 5 #include "src/compiler/typer.h"
6 6
7 #include "src/base/flags.h" 7 #include "src/base/flags.h"
8 #include "src/bootstrapper.h" 8 #include "src/bootstrapper.h"
9 #include "src/compilation-dependencies.h" 9 #include "src/compilation-dependencies.h"
10 #include "src/compiler/common-operator.h" 10 #include "src/compiler/common-operator.h"
(...skipping 1683 matching lines...) Expand 10 before | Expand all | Expand 10 after
1694 Type* Typer::Visitor::TypeJSGeneratorRestoreContinuation(Node* node) { 1694 Type* Typer::Visitor::TypeJSGeneratorRestoreContinuation(Node* node) {
1695 return typer_->cache_.kSmi; 1695 return typer_->cache_.kSmi;
1696 } 1696 }
1697 1697
1698 Type* Typer::Visitor::TypeJSGeneratorRestoreRegister(Node* node) { 1698 Type* Typer::Visitor::TypeJSGeneratorRestoreRegister(Node* node) {
1699 return Type::Any(); 1699 return Type::Any();
1700 } 1700 }
1701 1701
1702 Type* Typer::Visitor::TypeJSStackCheck(Node* node) { return Type::Any(); } 1702 Type* Typer::Visitor::TypeJSStackCheck(Node* node) { return Type::Any(); }
1703 1703
1704
1705 // Simplified operators. 1704 // Simplified operators.
1706 1705
1707 Type* Typer::Visitor::TypeBooleanNot(Node* node) { return Type::Boolean(); } 1706 Type* Typer::Visitor::TypeBooleanNot(Node* node) { return Type::Boolean(); }
1708 1707
1709 Type* Typer::Visitor::TypeBooleanToNumber(Node* node) { 1708 Type* Typer::Visitor::TypeBooleanToNumber(Node* node) {
1710 return TypeUnaryOp(node, ToNumber); 1709 return TypeUnaryOp(node, ToNumber);
1711 } 1710 }
1712 1711
1713 Type* Typer::Visitor::TypeNumberEqual(Node* node) { return Type::Boolean(); } 1712 Type* Typer::Visitor::TypeNumberEqual(Node* node) { return Type::Boolean(); }
1714 1713
1715 Type* Typer::Visitor::TypeNumberLessThan(Node* node) { return Type::Boolean(); } 1714 Type* Typer::Visitor::TypeNumberLessThan(Node* node) { return Type::Boolean(); }
1716 1715
1717 Type* Typer::Visitor::TypeNumberLessThanOrEqual(Node* node) { 1716 Type* Typer::Visitor::TypeNumberLessThanOrEqual(Node* node) {
1718 return Type::Boolean(); 1717 return Type::Boolean();
1719 } 1718 }
1720 1719
1721 Type* Typer::Visitor::TypeNumberAdd(Node* node) { return Type::Number(); } 1720 Type* Typer::Visitor::TypeNumberAdd(Node* node) { return Type::Number(); }
1722 1721
1723 Type* Typer::Visitor::TypeNumberSubtract(Node* node) { return Type::Number(); } 1722 Type* Typer::Visitor::TypeNumberSubtract(Node* node) { return Type::Number(); }
1724 1723
1724 Type* Typer::Visitor::TypeSpeculativeNumberAdd(Node* node) {
1725 return Type::Number();
1726 }
1727
1728 Type* Typer::Visitor::TypeSpeculativeNumberSubtract(Node* node) {
1729 return Type::Number();
1730 }
1731
1725 Type* Typer::Visitor::TypeNumberMultiply(Node* node) { return Type::Number(); } 1732 Type* Typer::Visitor::TypeNumberMultiply(Node* node) { return Type::Number(); }
1726 1733
1727 Type* Typer::Visitor::TypeNumberDivide(Node* node) { return Type::Number(); } 1734 Type* Typer::Visitor::TypeNumberDivide(Node* node) { return Type::Number(); }
1728 1735
1729 Type* Typer::Visitor::TypeNumberModulus(Node* node) { return Type::Number(); } 1736 Type* Typer::Visitor::TypeNumberModulus(Node* node) { return Type::Number(); }
1730 1737
1731 Type* Typer::Visitor::TypeNumberBitwiseOr(Node* node) { 1738 Type* Typer::Visitor::TypeNumberBitwiseOr(Node* node) {
1732 return Type::Signed32(); 1739 return Type::Signed32();
1733 } 1740 }
1734 1741
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1888 // TODO(neis): DCHECK(arg.upper->Is(Type::Boolean())); 1895 // TODO(neis): DCHECK(arg.upper->Is(Type::Boolean()));
1889 return ChangeRepresentation(arg, Type::UntaggedBit(), zone()); 1896 return ChangeRepresentation(arg, Type::UntaggedBit(), zone());
1890 } 1897 }
1891 1898
1892 Type* Typer::Visitor::TypeChangeBitToTagged(Node* node) { 1899 Type* Typer::Visitor::TypeChangeBitToTagged(Node* node) {
1893 Type* arg = Operand(node, 0); 1900 Type* arg = Operand(node, 0);
1894 // TODO(neis): DCHECK(arg.upper->Is(Type::Boolean())); 1901 // TODO(neis): DCHECK(arg.upper->Is(Type::Boolean()));
1895 return ChangeRepresentation(arg, Type::TaggedPointer(), zone()); 1902 return ChangeRepresentation(arg, Type::TaggedPointer(), zone());
1896 } 1903 }
1897 1904
1905 Type* Typer::Visitor::TypeCheckedUint32ToInt32(Node* node) {
1906 return Type::Signed32();
1907 }
1908
1909 Type* Typer::Visitor::TypeCheckedFloat64ToInt32(Node* node) {
1910 return Type::Signed32();
1911 }
1912
1913 Type* Typer::Visitor::TypeCheckedTaggedToInt32(Node* node) {
1914 return Type::Signed32();
1915 }
1916
1917 Type* Typer::Visitor::TypeCheckedTaggedToFloat64(Node* node) {
1918 return Type::Number();
1919 }
1920
1898 Type* Typer::Visitor::TypeTruncateTaggedToWord32(Node* node) { 1921 Type* Typer::Visitor::TypeTruncateTaggedToWord32(Node* node) {
1899 Type* arg = Operand(node, 0); 1922 Type* arg = Operand(node, 0);
1900 // TODO(neis): DCHECK(arg->Is(Type::Number())); 1923 // TODO(neis): DCHECK(arg->Is(Type::Number()));
1901 return ChangeRepresentation(arg, Type::UntaggedIntegral32(), zone()); 1924 return ChangeRepresentation(arg, Type::UntaggedIntegral32(), zone());
1902 } 1925 }
1903 1926
1904 Type* Typer::Visitor::TypeAllocate(Node* node) { return Type::TaggedPointer(); } 1927 Type* Typer::Visitor::TypeAllocate(Node* node) { return Type::TaggedPointer(); }
1905 1928
1906 1929
1907 namespace { 1930 namespace {
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
2588 } 2611 }
2589 if (Type::IsInteger(*value)) { 2612 if (Type::IsInteger(*value)) {
2590 return Type::Range(value->Number(), value->Number(), zone()); 2613 return Type::Range(value->Number(), value->Number(), zone());
2591 } 2614 }
2592 return Type::Constant(value, zone()); 2615 return Type::Constant(value, zone());
2593 } 2616 }
2594 2617
2595 } // namespace compiler 2618 } // namespace compiler
2596 } // namespace internal 2619 } // namespace internal
2597 } // namespace v8 2620 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698