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

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

Issue 2292463002: [turbofan] Remove invalid typing rules. (Closed)
Patch Set: Created 4 years, 3 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/cctest/cctest.gyp » ('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/compiler/typer.h" 5 #include "src/compiler/typer.h"
6 6
7 #include <iomanip> 7 #include <iomanip>
8 8
9 #include "src/base/flags.h" 9 #include "src/base/flags.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 #define DECLARE_CASE(x) \ 82 #define DECLARE_CASE(x) \
83 case IrOpcode::k##x: \ 83 case IrOpcode::k##x: \
84 return UpdateType(node, Type##x(node)); 84 return UpdateType(node, Type##x(node));
85 DECLARE_CASE(Start) 85 DECLARE_CASE(Start)
86 DECLARE_CASE(IfException) 86 DECLARE_CASE(IfException)
87 // VALUE_OP_LIST without JS_SIMPLE_BINOP_LIST: 87 // VALUE_OP_LIST without JS_SIMPLE_BINOP_LIST:
88 COMMON_OP_LIST(DECLARE_CASE) 88 COMMON_OP_LIST(DECLARE_CASE)
89 SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_CASE) 89 SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_CASE)
90 SIMPLIFIED_OTHER_OP_LIST(DECLARE_CASE) 90 SIMPLIFIED_OTHER_OP_LIST(DECLARE_CASE)
91 MACHINE_OP_LIST(DECLARE_CASE)
92 JS_SIMPLE_UNOP_LIST(DECLARE_CASE) 91 JS_SIMPLE_UNOP_LIST(DECLARE_CASE)
93 JS_OBJECT_OP_LIST(DECLARE_CASE) 92 JS_OBJECT_OP_LIST(DECLARE_CASE)
94 JS_CONTEXT_OP_LIST(DECLARE_CASE) 93 JS_CONTEXT_OP_LIST(DECLARE_CASE)
95 JS_OTHER_OP_LIST(DECLARE_CASE) 94 JS_OTHER_OP_LIST(DECLARE_CASE)
96 #undef DECLARE_CASE 95 #undef DECLARE_CASE
97 96
98 #define DECLARE_CASE(x) \ 97 #define DECLARE_CASE(x) \
99 case IrOpcode::k##x: \ 98 case IrOpcode::k##x: \
100 return UpdateType(node, TypeBinaryOp(node, x)); 99 return UpdateType(node, TypeBinaryOp(node, x));
101 SIMPLIFIED_NUMBER_BINOP_LIST(DECLARE_CASE) 100 SIMPLIFIED_NUMBER_BINOP_LIST(DECLARE_CASE)
(...skipping 22 matching lines...) Expand all
124 DECLARE_CASE(Return) 123 DECLARE_CASE(Return)
125 DECLARE_CASE(TailCall) 124 DECLARE_CASE(TailCall)
126 DECLARE_CASE(Terminate) 125 DECLARE_CASE(Terminate)
127 DECLARE_CASE(OsrNormalEntry) 126 DECLARE_CASE(OsrNormalEntry)
128 DECLARE_CASE(OsrLoopEntry) 127 DECLARE_CASE(OsrLoopEntry)
129 DECLARE_CASE(Throw) 128 DECLARE_CASE(Throw)
130 DECLARE_CASE(End) 129 DECLARE_CASE(End)
131 SIMPLIFIED_CHANGE_OP_LIST(DECLARE_CASE) 130 SIMPLIFIED_CHANGE_OP_LIST(DECLARE_CASE)
132 SIMPLIFIED_CHECKED_OP_LIST(DECLARE_CASE) 131 SIMPLIFIED_CHECKED_OP_LIST(DECLARE_CASE)
133 MACHINE_SIMD_OP_LIST(DECLARE_CASE) 132 MACHINE_SIMD_OP_LIST(DECLARE_CASE)
133 MACHINE_OP_LIST(DECLARE_CASE)
134 #undef DECLARE_CASE 134 #undef DECLARE_CASE
135 break; 135 break;
136 } 136 }
137 return NoChange(); 137 return NoChange();
138 } 138 }
139 139
140 Type* TypeNode(Node* node) { 140 Type* TypeNode(Node* node) {
141 switch (node->opcode()) { 141 switch (node->opcode()) {
142 #define DECLARE_CASE(x) \ 142 #define DECLARE_CASE(x) \
143 case IrOpcode::k##x: return TypeBinaryOp(node, x##Typer); 143 case IrOpcode::k##x: return TypeBinaryOp(node, x##Typer);
144 JS_SIMPLE_BINOP_LIST(DECLARE_CASE) 144 JS_SIMPLE_BINOP_LIST(DECLARE_CASE)
145 #undef DECLARE_CASE 145 #undef DECLARE_CASE
146 146
147 #define DECLARE_CASE(x) case IrOpcode::k##x: return Type##x(node); 147 #define DECLARE_CASE(x) case IrOpcode::k##x: return Type##x(node);
148 DECLARE_CASE(Start) 148 DECLARE_CASE(Start)
149 DECLARE_CASE(IfException) 149 DECLARE_CASE(IfException)
150 // VALUE_OP_LIST without JS_SIMPLE_BINOP_LIST: 150 // VALUE_OP_LIST without JS_SIMPLE_BINOP_LIST:
151 COMMON_OP_LIST(DECLARE_CASE) 151 COMMON_OP_LIST(DECLARE_CASE)
152 SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_CASE) 152 SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_CASE)
153 SIMPLIFIED_OTHER_OP_LIST(DECLARE_CASE) 153 SIMPLIFIED_OTHER_OP_LIST(DECLARE_CASE)
154 MACHINE_OP_LIST(DECLARE_CASE)
155 JS_SIMPLE_UNOP_LIST(DECLARE_CASE) 154 JS_SIMPLE_UNOP_LIST(DECLARE_CASE)
156 JS_OBJECT_OP_LIST(DECLARE_CASE) 155 JS_OBJECT_OP_LIST(DECLARE_CASE)
157 JS_CONTEXT_OP_LIST(DECLARE_CASE) 156 JS_CONTEXT_OP_LIST(DECLARE_CASE)
158 JS_OTHER_OP_LIST(DECLARE_CASE) 157 JS_OTHER_OP_LIST(DECLARE_CASE)
159 #undef DECLARE_CASE 158 #undef DECLARE_CASE
160 159
161 #define DECLARE_CASE(x) \ 160 #define DECLARE_CASE(x) \
162 case IrOpcode::k##x: \ 161 case IrOpcode::k##x: \
163 return TypeBinaryOp(node, x); 162 return TypeBinaryOp(node, x);
164 SIMPLIFIED_NUMBER_BINOP_LIST(DECLARE_CASE) 163 SIMPLIFIED_NUMBER_BINOP_LIST(DECLARE_CASE)
(...skipping 22 matching lines...) Expand all
187 DECLARE_CASE(Return) 186 DECLARE_CASE(Return)
188 DECLARE_CASE(TailCall) 187 DECLARE_CASE(TailCall)
189 DECLARE_CASE(Terminate) 188 DECLARE_CASE(Terminate)
190 DECLARE_CASE(OsrNormalEntry) 189 DECLARE_CASE(OsrNormalEntry)
191 DECLARE_CASE(OsrLoopEntry) 190 DECLARE_CASE(OsrLoopEntry)
192 DECLARE_CASE(Throw) 191 DECLARE_CASE(Throw)
193 DECLARE_CASE(End) 192 DECLARE_CASE(End)
194 SIMPLIFIED_CHANGE_OP_LIST(DECLARE_CASE) 193 SIMPLIFIED_CHANGE_OP_LIST(DECLARE_CASE)
195 SIMPLIFIED_CHECKED_OP_LIST(DECLARE_CASE) 194 SIMPLIFIED_CHECKED_OP_LIST(DECLARE_CASE)
196 MACHINE_SIMD_OP_LIST(DECLARE_CASE) 195 MACHINE_SIMD_OP_LIST(DECLARE_CASE)
196 MACHINE_OP_LIST(DECLARE_CASE)
197 #undef DECLARE_CASE 197 #undef DECLARE_CASE
198 break; 198 break;
199 } 199 }
200 UNREACHABLE(); 200 UNREACHABLE();
201 return nullptr; 201 return nullptr;
202 } 202 }
203 203
204 Type* TypeConstant(Handle<Object> value); 204 Type* TypeConstant(Handle<Object> value);
205 205
206 private: 206 private:
207 Typer* typer_; 207 Typer* typer_;
208 LoopVariableOptimizer* induction_vars_; 208 LoopVariableOptimizer* induction_vars_;
209 ZoneSet<NodeId> weakened_nodes_; 209 ZoneSet<NodeId> weakened_nodes_;
210 210
211 #define DECLARE_METHOD(x) inline Type* Type##x(Node* node); 211 #define DECLARE_METHOD(x) inline Type* Type##x(Node* node);
212 DECLARE_METHOD(Start) 212 DECLARE_METHOD(Start)
213 DECLARE_METHOD(IfException) 213 DECLARE_METHOD(IfException)
214 COMMON_OP_LIST(DECLARE_METHOD) 214 COMMON_OP_LIST(DECLARE_METHOD)
215 SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_METHOD) 215 SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_METHOD)
216 SIMPLIFIED_OTHER_OP_LIST(DECLARE_METHOD) 216 SIMPLIFIED_OTHER_OP_LIST(DECLARE_METHOD)
217 MACHINE_OP_LIST(DECLARE_METHOD)
218 JS_OP_LIST(DECLARE_METHOD) 217 JS_OP_LIST(DECLARE_METHOD)
219 #undef DECLARE_METHOD 218 #undef DECLARE_METHOD
220 219
221 Type* TypeOrNone(Node* node) { 220 Type* TypeOrNone(Node* node) {
222 return NodeProperties::IsTyped(node) ? NodeProperties::GetType(node) 221 return NodeProperties::IsTyped(node) ? NodeProperties::GetType(node)
223 : Type::None(); 222 : Type::None();
224 } 223 }
225 224
226 Type* Operand(Node* node, int i) { 225 Type* Operand(Node* node, int i) {
227 Node* operand_node = NodeProperties::GetValueInput(node, i); 226 Node* operand_node = NodeProperties::GetValueInput(node, i);
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 Type* Typer::Visitor::TypeIfException(Node* node) { 545 Type* Typer::Visitor::TypeIfException(Node* node) {
547 return Type::NonInternal(); 546 return Type::NonInternal();
548 } 547 }
549 548
550 // Common operators. 549 // Common operators.
551 550
552 Type* Typer::Visitor::TypeParameter(Node* node) { return Type::Any(); } 551 Type* Typer::Visitor::TypeParameter(Node* node) { return Type::Any(); }
553 552
554 Type* Typer::Visitor::TypeOsrValue(Node* node) { return Type::Any(); } 553 Type* Typer::Visitor::TypeOsrValue(Node* node) { return Type::Any(); }
555 554
555 Type* Typer::Visitor::TypeRetain(Node* node) {
556 UNREACHABLE();
557 return nullptr;
558 }
556 559
557 Type* Typer::Visitor::TypeInt32Constant(Node* node) { 560 Type* Typer::Visitor::TypeInt32Constant(Node* node) {
558 double number = OpParameter<int32_t>(node); 561 double number = OpParameter<int32_t>(node);
559 return Type::Intersect(Type::Range(number, number, zone()), 562 return Type::Intersect(Type::Range(number, number, zone()),
560 Type::UntaggedIntegral32(), zone()); 563 Type::UntaggedIntegral32(), zone());
561 } 564 }
562 565
563 566
564 Type* Typer::Visitor::TypeInt64Constant(Node* node) { 567 Type* Typer::Visitor::TypeInt64Constant(Node* node) {
565 // TODO(rossberg): This actually seems to be a PointerConstant so far... 568 // TODO(rossberg): This actually seems to be a PointerConstant so far...
566 return Type::Internal(); // TODO(rossberg): Add int64 bitset type? 569 return Type::Internal(); // TODO(rossberg): Add int64 bitset type?
567 } 570 }
568 571
569 // TODO(gdeepti) : Fix this to do something meaningful.
570 Type* Typer::Visitor::TypeRelocatableInt32Constant(Node* node) { 572 Type* Typer::Visitor::TypeRelocatableInt32Constant(Node* node) {
571 return Type::Internal(); 573 UNREACHABLE();
574 return nullptr;
572 } 575 }
573 576
574 Type* Typer::Visitor::TypeRelocatableInt64Constant(Node* node) { 577 Type* Typer::Visitor::TypeRelocatableInt64Constant(Node* node) {
575 return Type::Internal(); 578 UNREACHABLE();
579 return nullptr;
576 } 580 }
577 581
578 Type* Typer::Visitor::TypeFloat32Constant(Node* node) { 582 Type* Typer::Visitor::TypeFloat32Constant(Node* node) {
579 return Type::Intersect(Type::Of(OpParameter<float>(node), zone()), 583 return Type::Intersect(Type::Of(OpParameter<float>(node), zone()),
580 Type::UntaggedFloat32(), zone()); 584 Type::UntaggedFloat32(), zone());
581 } 585 }
582 586
583 587
584 Type* Typer::Visitor::TypeFloat64Constant(Node* node) { 588 Type* Typer::Visitor::TypeFloat64Constant(Node* node) {
585 return Type::Intersect(Type::Of(OpParameter<double>(node), zone()), 589 return Type::Intersect(Type::Of(OpParameter<double>(node), zone()),
(...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
1684 } 1688 }
1685 1689
1686 Type* Typer::Visitor::TypeObjectIsUndetectable(Node* node) { 1690 Type* Typer::Visitor::TypeObjectIsUndetectable(Node* node) {
1687 return TypeUnaryOp(node, ObjectIsUndetectable); 1691 return TypeUnaryOp(node, ObjectIsUndetectable);
1688 } 1692 }
1689 1693
1690 Type* Typer::Visitor::TypeArrayBufferWasNeutered(Node* node) { 1694 Type* Typer::Visitor::TypeArrayBufferWasNeutered(Node* node) {
1691 return Type::Boolean(); 1695 return Type::Boolean();
1692 } 1696 }
1693 1697
1694 // Machine operators.
1695
1696 Type* Typer::Visitor::TypeDebugBreak(Node* node) { return Type::None(); }
1697
1698 Type* Typer::Visitor::TypeComment(Node* node) { return Type::None(); }
1699
1700 Type* Typer::Visitor::TypeRetain(Node* node) {
1701 UNREACHABLE();
1702 return nullptr;
1703 }
1704
1705 Type* Typer::Visitor::TypeUnsafePointerAdd(Node* node) { return Type::None(); }
1706
1707 Type* Typer::Visitor::TypeLoad(Node* node) { return Type::Any(); }
1708
1709 Type* Typer::Visitor::TypeStackSlot(Node* node) { return Type::Any(); }
1710
1711 Type* Typer::Visitor::TypeStore(Node* node) {
1712 UNREACHABLE();
1713 return nullptr;
1714 }
1715
1716
1717 Type* Typer::Visitor::TypeWord32And(Node* node) { return Type::Integral32(); }
1718
1719
1720 Type* Typer::Visitor::TypeWord32Or(Node* node) { return Type::Integral32(); }
1721
1722
1723 Type* Typer::Visitor::TypeWord32Xor(Node* node) { return Type::Integral32(); }
1724
1725
1726 Type* Typer::Visitor::TypeWord32Shl(Node* node) { return Type::Integral32(); }
1727
1728
1729 Type* Typer::Visitor::TypeWord32Shr(Node* node) { return Type::Integral32(); }
1730
1731
1732 Type* Typer::Visitor::TypeWord32Sar(Node* node) { return Type::Integral32(); }
1733
1734
1735 Type* Typer::Visitor::TypeWord32Ror(Node* node) { return Type::Integral32(); }
1736
1737
1738 Type* Typer::Visitor::TypeWord32Equal(Node* node) { return Type::Boolean(); }
1739
1740
1741 Type* Typer::Visitor::TypeWord32Clz(Node* node) { return Type::Integral32(); }
1742
1743
1744 Type* Typer::Visitor::TypeWord32Ctz(Node* node) { return Type::Integral32(); }
1745
1746
1747 Type* Typer::Visitor::TypeWord32ReverseBits(Node* node) {
1748 return Type::Integral32();
1749 }
1750
1751 Type* Typer::Visitor::TypeWord32ReverseBytes(Node* node) {
1752 return Type::Integral32();
1753 }
1754
1755 Type* Typer::Visitor::TypeWord32Popcnt(Node* node) {
1756 return Type::Integral32();
1757 }
1758
1759
1760 Type* Typer::Visitor::TypeWord64And(Node* node) { return Type::Internal(); }
1761
1762
1763 Type* Typer::Visitor::TypeWord64Or(Node* node) { return Type::Internal(); }
1764
1765
1766 Type* Typer::Visitor::TypeWord64Xor(Node* node) { return Type::Internal(); }
1767
1768
1769 Type* Typer::Visitor::TypeWord64Shl(Node* node) { return Type::Internal(); }
1770
1771
1772 Type* Typer::Visitor::TypeWord64Shr(Node* node) { return Type::Internal(); }
1773
1774
1775 Type* Typer::Visitor::TypeWord64Sar(Node* node) { return Type::Internal(); }
1776
1777
1778 Type* Typer::Visitor::TypeWord64Ror(Node* node) { return Type::Internal(); }
1779
1780
1781 Type* Typer::Visitor::TypeWord64Clz(Node* node) { return Type::Internal(); }
1782
1783
1784 Type* Typer::Visitor::TypeWord64Ctz(Node* node) { return Type::Internal(); }
1785
1786
1787 Type* Typer::Visitor::TypeWord64ReverseBits(Node* node) {
1788 return Type::Internal();
1789 }
1790
1791 Type* Typer::Visitor::TypeWord64ReverseBytes(Node* node) {
1792 return Type::Internal();
1793 }
1794
1795 Type* Typer::Visitor::TypeWord64Popcnt(Node* node) { return Type::Internal(); }
1796
1797
1798 Type* Typer::Visitor::TypeWord64Equal(Node* node) { return Type::Boolean(); }
1799
1800
1801 Type* Typer::Visitor::TypeInt32Add(Node* node) { return Type::Integral32(); }
1802
1803
1804 Type* Typer::Visitor::TypeInt32AddWithOverflow(Node* node) {
1805 return Type::Internal();
1806 }
1807
1808
1809 Type* Typer::Visitor::TypeInt32Sub(Node* node) { return Type::Integral32(); }
1810
1811
1812 Type* Typer::Visitor::TypeInt32SubWithOverflow(Node* node) {
1813 return Type::Internal();
1814 }
1815
1816
1817 Type* Typer::Visitor::TypeInt32Mul(Node* node) { return Type::Integral32(); }
1818
1819 Type* Typer::Visitor::TypeInt32MulWithOverflow(Node* node) {
1820 return Type::Internal();
1821 }
1822
1823 Type* Typer::Visitor::TypeInt32MulHigh(Node* node) { return Type::Signed32(); }
1824
1825
1826 Type* Typer::Visitor::TypeInt32Div(Node* node) { return Type::Integral32(); }
1827
1828
1829 Type* Typer::Visitor::TypeInt32Mod(Node* node) { return Type::Integral32(); }
1830
1831
1832 Type* Typer::Visitor::TypeInt32LessThan(Node* node) { return Type::Boolean(); }
1833
1834
1835 Type* Typer::Visitor::TypeInt32LessThanOrEqual(Node* node) {
1836 return Type::Boolean();
1837 }
1838
1839
1840 Type* Typer::Visitor::TypeUint32Div(Node* node) { return Type::Unsigned32(); }
1841
1842
1843 Type* Typer::Visitor::TypeUint32LessThan(Node* node) { return Type::Boolean(); }
1844
1845
1846 Type* Typer::Visitor::TypeUint32LessThanOrEqual(Node* node) {
1847 return Type::Boolean();
1848 }
1849
1850
1851 Type* Typer::Visitor::TypeUint32Mod(Node* node) { return Type::Unsigned32(); }
1852
1853
1854 Type* Typer::Visitor::TypeUint32MulHigh(Node* node) {
1855 return Type::Unsigned32();
1856 }
1857
1858
1859 Type* Typer::Visitor::TypeInt64Add(Node* node) { return Type::Internal(); }
1860
1861
1862 Type* Typer::Visitor::TypeInt64AddWithOverflow(Node* node) {
1863 return Type::Internal();
1864 }
1865
1866
1867 Type* Typer::Visitor::TypeInt64Sub(Node* node) { return Type::Internal(); }
1868
1869
1870 Type* Typer::Visitor::TypeInt64SubWithOverflow(Node* node) {
1871 return Type::Internal();
1872 }
1873
1874
1875 Type* Typer::Visitor::TypeInt64Mul(Node* node) { return Type::Internal(); }
1876
1877 Type* Typer::Visitor::TypeInt64Div(Node* node) { return Type::Internal(); }
1878
1879
1880 Type* Typer::Visitor::TypeInt64Mod(Node* node) { return Type::Internal(); }
1881
1882
1883 Type* Typer::Visitor::TypeInt64LessThan(Node* node) { return Type::Boolean(); }
1884
1885
1886 Type* Typer::Visitor::TypeInt64LessThanOrEqual(Node* node) {
1887 return Type::Boolean();
1888 }
1889
1890
1891 Type* Typer::Visitor::TypeUint64Div(Node* node) { return Type::Internal(); }
1892
1893
1894 Type* Typer::Visitor::TypeUint64LessThan(Node* node) { return Type::Boolean(); }
1895
1896
1897 Type* Typer::Visitor::TypeUint64LessThanOrEqual(Node* node) {
1898 return Type::Boolean();
1899 }
1900
1901
1902 Type* Typer::Visitor::TypeUint64Mod(Node* node) { return Type::Internal(); }
1903
1904 Type* Typer::Visitor::TypeBitcastWordToTagged(Node* node) {
1905 return Type::TaggedPointer();
1906 }
1907
1908 Type* Typer::Visitor::TypeChangeFloat32ToFloat64(Node* node) {
1909 return Type::Intersect(Type::Number(), Type::UntaggedFloat64(), zone());
1910 }
1911
1912
1913 Type* Typer::Visitor::TypeChangeFloat64ToInt32(Node* node) {
1914 return Type::Intersect(Type::Signed32(), Type::UntaggedIntegral32(), zone());
1915 }
1916
1917 Type* Typer::Visitor::TypeChangeFloat64ToUint32(Node* node) {
1918 return Type::Intersect(Type::Unsigned32(), Type::UntaggedIntegral32(),
1919 zone());
1920 }
1921
1922 Type* Typer::Visitor::TypeTruncateFloat64ToUint32(Node* node) {
1923 return Type::Intersect(Type::Unsigned32(), Type::UntaggedIntegral32(),
1924 zone());
1925 }
1926
1927 Type* Typer::Visitor::TypeTruncateFloat32ToInt32(Node* node) {
1928 return Type::Intersect(Type::Signed32(), Type::UntaggedIntegral32(), zone());
1929 }
1930
1931
1932 Type* Typer::Visitor::TypeTruncateFloat32ToUint32(Node* node) {
1933 return Type::Intersect(Type::Unsigned32(), Type::UntaggedIntegral32(),
1934 zone());
1935 }
1936
1937
1938 Type* Typer::Visitor::TypeTryTruncateFloat32ToInt64(Node* node) {
1939 return Type::Internal();
1940 }
1941
1942
1943 Type* Typer::Visitor::TypeTryTruncateFloat64ToInt64(Node* node) {
1944 return Type::Internal();
1945 }
1946
1947
1948 Type* Typer::Visitor::TypeTryTruncateFloat32ToUint64(Node* node) {
1949 return Type::Internal();
1950 }
1951
1952
1953 Type* Typer::Visitor::TypeTryTruncateFloat64ToUint64(Node* node) {
1954 return Type::Internal();
1955 }
1956
1957
1958 Type* Typer::Visitor::TypeChangeInt32ToFloat64(Node* node) {
1959 return Type::Intersect(Type::Signed32(), Type::UntaggedFloat64(), zone());
1960 }
1961
1962 Type* Typer::Visitor::TypeFloat64SilenceNaN(Node* node) {
1963 return Type::UntaggedFloat64();
1964 }
1965
1966 Type* Typer::Visitor::TypeChangeInt32ToInt64(Node* node) {
1967 return Type::Internal();
1968 }
1969
1970 Type* Typer::Visitor::TypeChangeUint32ToFloat64(Node* node) {
1971 return Type::Intersect(Type::Unsigned32(), Type::UntaggedFloat64(), zone());
1972 }
1973
1974 Type* Typer::Visitor::TypeChangeUint32ToUint64(Node* node) {
1975 return Type::Internal();
1976 }
1977
1978 Type* Typer::Visitor::TypeTruncateFloat64ToFloat32(Node* node) {
1979 return Type::Intersect(Type::Number(), Type::UntaggedFloat32(), zone());
1980 }
1981
1982 Type* Typer::Visitor::TypeTruncateFloat64ToWord32(Node* node) {
1983 return Type::Intersect(Type::Integral32(), Type::UntaggedIntegral32(),
1984 zone());
1985 }
1986
1987 Type* Typer::Visitor::TypeTruncateInt64ToInt32(Node* node) {
1988 return Type::Intersect(Type::Signed32(), Type::UntaggedIntegral32(), zone());
1989 }
1990
1991 Type* Typer::Visitor::TypeRoundFloat64ToInt32(Node* node) {
1992 return Type::Intersect(Type::Signed32(), Type::UntaggedIntegral32(), zone());
1993 }
1994
1995 Type* Typer::Visitor::TypeRoundInt32ToFloat32(Node* node) {
1996 return Type::Intersect(Type::PlainNumber(), Type::UntaggedFloat32(), zone());
1997 }
1998
1999
2000 Type* Typer::Visitor::TypeRoundInt64ToFloat32(Node* node) {
2001 return Type::Intersect(Type::PlainNumber(), Type::UntaggedFloat32(), zone());
2002 }
2003
2004
2005 Type* Typer::Visitor::TypeRoundInt64ToFloat64(Node* node) {
2006 return Type::Intersect(Type::PlainNumber(), Type::UntaggedFloat64(), zone());
2007 }
2008
2009
2010 Type* Typer::Visitor::TypeRoundUint32ToFloat32(Node* node) {
2011 return Type::Intersect(Type::PlainNumber(), Type::UntaggedFloat32(), zone());
2012 }
2013
2014
2015 Type* Typer::Visitor::TypeRoundUint64ToFloat32(Node* node) {
2016 return Type::Intersect(Type::PlainNumber(), Type::UntaggedFloat32(), zone());
2017 }
2018
2019
2020 Type* Typer::Visitor::TypeRoundUint64ToFloat64(Node* node) {
2021 return Type::Intersect(Type::PlainNumber(), Type::UntaggedFloat64(), zone());
2022 }
2023
2024
2025 Type* Typer::Visitor::TypeBitcastFloat32ToInt32(Node* node) {
2026 return Type::Number();
2027 }
2028
2029
2030 Type* Typer::Visitor::TypeBitcastFloat64ToInt64(Node* node) {
2031 return Type::Number();
2032 }
2033
2034
2035 Type* Typer::Visitor::TypeBitcastInt32ToFloat32(Node* node) {
2036 return Type::Number();
2037 }
2038
2039
2040 Type* Typer::Visitor::TypeBitcastInt64ToFloat64(Node* node) {
2041 return Type::Number();
2042 }
2043
2044
2045 Type* Typer::Visitor::TypeFloat32Add(Node* node) { return Type::Number(); }
2046
2047
2048 Type* Typer::Visitor::TypeFloat32Sub(Node* node) { return Type::Number(); }
2049
2050 Type* Typer::Visitor::TypeFloat32Neg(Node* node) { return Type::Number(); }
2051
2052 Type* Typer::Visitor::TypeFloat32Mul(Node* node) { return Type::Number(); }
2053
2054
2055 Type* Typer::Visitor::TypeFloat32Div(Node* node) { return Type::Number(); }
2056
2057
2058 Type* Typer::Visitor::TypeFloat32Abs(Node* node) {
2059 // TODO(turbofan): We should be able to infer a better type here.
2060 return Type::Number();
2061 }
2062
2063
2064 Type* Typer::Visitor::TypeFloat32Sqrt(Node* node) { return Type::Number(); }
2065
2066
2067 Type* Typer::Visitor::TypeFloat32Equal(Node* node) { return Type::Boolean(); }
2068
2069
2070 Type* Typer::Visitor::TypeFloat32LessThan(Node* node) {
2071 return Type::Boolean();
2072 }
2073
2074
2075 Type* Typer::Visitor::TypeFloat32LessThanOrEqual(Node* node) {
2076 return Type::Boolean();
2077 }
2078
2079 Type* Typer::Visitor::TypeFloat32Max(Node* node) { return Type::Number(); }
2080
2081 Type* Typer::Visitor::TypeFloat32Min(Node* node) { return Type::Number(); }
2082
2083 Type* Typer::Visitor::TypeFloat64Add(Node* node) { return Type::Number(); }
2084
2085
2086 Type* Typer::Visitor::TypeFloat64Sub(Node* node) { return Type::Number(); }
2087
2088 Type* Typer::Visitor::TypeFloat64Neg(Node* node) { return Type::Number(); }
2089
2090 Type* Typer::Visitor::TypeFloat64Mul(Node* node) { return Type::Number(); }
2091
2092
2093 Type* Typer::Visitor::TypeFloat64Div(Node* node) { return Type::Number(); }
2094
2095
2096 Type* Typer::Visitor::TypeFloat64Mod(Node* node) { return Type::Number(); }
2097
2098
2099 Type* Typer::Visitor::TypeFloat64Max(Node* node) { return Type::Number(); }
2100
2101
2102 Type* Typer::Visitor::TypeFloat64Min(Node* node) { return Type::Number(); }
2103
2104
2105 Type* Typer::Visitor::TypeFloat64Abs(Node* node) {
2106 // TODO(turbofan): We should be able to infer a better type here.
2107 return Type::Number();
2108 }
2109
2110 Type* Typer::Visitor::TypeFloat64Acos(Node* node) { return Type::Number(); }
2111
2112 Type* Typer::Visitor::TypeFloat64Acosh(Node* node) { return Type::Number(); }
2113
2114 Type* Typer::Visitor::TypeFloat64Asin(Node* node) { return Type::Number(); }
2115
2116 Type* Typer::Visitor::TypeFloat64Asinh(Node* node) { return Type::Number(); }
2117
2118 Type* Typer::Visitor::TypeFloat64Atan(Node* node) { return Type::Number(); }
2119
2120 Type* Typer::Visitor::TypeFloat64Atanh(Node* node) { return Type::Number(); }
2121
2122 Type* Typer::Visitor::TypeFloat64Atan2(Node* node) { return Type::Number(); }
2123
2124 Type* Typer::Visitor::TypeFloat64Cbrt(Node* node) { return Type::Number(); }
2125
2126 Type* Typer::Visitor::TypeFloat64Cos(Node* node) { return Type::Number(); }
2127
2128 Type* Typer::Visitor::TypeFloat64Cosh(Node* node) { return Type::Number(); }
2129
2130 Type* Typer::Visitor::TypeFloat64Exp(Node* node) { return Type::Number(); }
2131
2132 Type* Typer::Visitor::TypeFloat64Expm1(Node* node) { return Type::Number(); }
2133
2134 Type* Typer::Visitor::TypeFloat64Log(Node* node) { return Type::Number(); }
2135
2136 Type* Typer::Visitor::TypeFloat64Log1p(Node* node) { return Type::Number(); }
2137
2138 Type* Typer::Visitor::TypeFloat64Log10(Node* node) { return Type::Number(); }
2139
2140 Type* Typer::Visitor::TypeFloat64Log2(Node* node) { return Type::Number(); }
2141
2142 Type* Typer::Visitor::TypeFloat64Pow(Node* node) { return Type::Number(); }
2143
2144 Type* Typer::Visitor::TypeFloat64Sin(Node* node) { return Type::Number(); }
2145
2146 Type* Typer::Visitor::TypeFloat64Sinh(Node* node) { return Type::Number(); }
2147
2148 Type* Typer::Visitor::TypeFloat64Sqrt(Node* node) { return Type::Number(); }
2149
2150 Type* Typer::Visitor::TypeFloat64Tan(Node* node) { return Type::Number(); }
2151
2152 Type* Typer::Visitor::TypeFloat64Tanh(Node* node) { return Type::Number(); }
2153
2154 Type* Typer::Visitor::TypeFloat64Equal(Node* node) { return Type::Boolean(); }
2155
2156
2157 Type* Typer::Visitor::TypeFloat64LessThan(Node* node) {
2158 return Type::Boolean();
2159 }
2160
2161
2162 Type* Typer::Visitor::TypeFloat64LessThanOrEqual(Node* node) {
2163 return Type::Boolean();
2164 }
2165
2166
2167 Type* Typer::Visitor::TypeFloat32RoundDown(Node* node) {
2168 // TODO(sigurds): We could have a tighter bound here.
2169 return Type::Number();
2170 }
2171
2172
2173 Type* Typer::Visitor::TypeFloat64RoundDown(Node* node) {
2174 // TODO(sigurds): We could have a tighter bound here.
2175 return Type::Number();
2176 }
2177
2178
2179 Type* Typer::Visitor::TypeFloat32RoundUp(Node* node) {
2180 // TODO(sigurds): We could have a tighter bound here.
2181 return Type::Number();
2182 }
2183
2184
2185 Type* Typer::Visitor::TypeFloat64RoundUp(Node* node) {
2186 // TODO(sigurds): We could have a tighter bound here.
2187 return Type::Number();
2188 }
2189
2190
2191 Type* Typer::Visitor::TypeFloat32RoundTruncate(Node* node) {
2192 // TODO(sigurds): We could have a tighter bound here.
2193 return Type::Number();
2194 }
2195
2196
2197 Type* Typer::Visitor::TypeFloat64RoundTruncate(Node* node) {
2198 // TODO(sigurds): We could have a tighter bound here.
2199 return Type::Number();
2200 }
2201
2202
2203 Type* Typer::Visitor::TypeFloat64RoundTiesAway(Node* node) {
2204 // TODO(sigurds): We could have a tighter bound here.
2205 return Type::Number();
2206 }
2207
2208
2209 Type* Typer::Visitor::TypeFloat32RoundTiesEven(Node* node) {
2210 // TODO(sigurds): We could have a tighter bound here.
2211 return Type::Number();
2212 }
2213
2214
2215 Type* Typer::Visitor::TypeFloat64RoundTiesEven(Node* node) {
2216 // TODO(sigurds): We could have a tighter bound here.
2217 return Type::Number();
2218 }
2219
2220
2221 Type* Typer::Visitor::TypeFloat64ExtractLowWord32(Node* node) {
2222 return Type::Signed32();
2223 }
2224
2225
2226 Type* Typer::Visitor::TypeFloat64ExtractHighWord32(Node* node) {
2227 return Type::Signed32();
2228 }
2229
2230
2231 Type* Typer::Visitor::TypeFloat64InsertLowWord32(Node* node) {
2232 return Type::Number();
2233 }
2234
2235
2236 Type* Typer::Visitor::TypeFloat64InsertHighWord32(Node* node) {
2237 return Type::Number();
2238 }
2239
2240
2241 Type* Typer::Visitor::TypeLoadStackPointer(Node* node) {
2242 return Type::Internal();
2243 }
2244
2245
2246 Type* Typer::Visitor::TypeLoadFramePointer(Node* node) {
2247 return Type::Internal();
2248 }
2249
2250 Type* Typer::Visitor::TypeLoadParentFramePointer(Node* node) {
2251 return Type::Internal();
2252 }
2253
2254 Type* Typer::Visitor::TypeUnalignedLoad(Node* node) { return Type::Any(); }
2255
2256 Type* Typer::Visitor::TypeUnalignedStore(Node* node) {
2257 UNREACHABLE();
2258 return nullptr;
2259 }
2260
2261 Type* Typer::Visitor::TypeCheckedLoad(Node* node) { return Type::Any(); }
2262
2263 Type* Typer::Visitor::TypeCheckedStore(Node* node) {
2264 UNREACHABLE();
2265 return nullptr;
2266 }
2267
2268 Type* Typer::Visitor::TypeAtomicLoad(Node* node) { return Type::Any(); }
2269
2270 Type* Typer::Visitor::TypeAtomicStore(Node* node) {
2271 UNREACHABLE();
2272 return nullptr;
2273 }
2274
2275 Type* Typer::Visitor::TypeInt32PairAdd(Node* node) { return Type::Internal(); }
2276
2277 Type* Typer::Visitor::TypeInt32PairSub(Node* node) { return Type::Internal(); }
2278
2279 Type* Typer::Visitor::TypeInt32PairMul(Node* node) { return Type::Internal(); }
2280
2281 Type* Typer::Visitor::TypeWord32PairShl(Node* node) { return Type::Internal(); }
2282
2283 Type* Typer::Visitor::TypeWord32PairShr(Node* node) { return Type::Internal(); }
2284
2285 Type* Typer::Visitor::TypeWord32PairSar(Node* node) { return Type::Internal(); }
2286
2287 // Heap constants. 1698 // Heap constants.
2288 1699
2289 Type* Typer::Visitor::TypeConstant(Handle<Object> value) { 1700 Type* Typer::Visitor::TypeConstant(Handle<Object> value) {
2290 if (Type::IsInteger(*value)) { 1701 if (Type::IsInteger(*value)) {
2291 return Type::Range(value->Number(), value->Number(), zone()); 1702 return Type::Range(value->Number(), value->Number(), zone());
2292 } 1703 }
2293 return Type::Constant(value, zone()); 1704 return Type::Constant(value, zone());
2294 } 1705 }
2295 1706
2296 } // namespace compiler 1707 } // namespace compiler
2297 } // namespace internal 1708 } // namespace internal
2298 } // namespace v8 1709 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/cctest/cctest.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698