Line data Source code
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
3 : // found in the LICENSE file.
4 :
5 : #ifndef V8_COMPILER_JS_BUILTIN_REDUCER_H_
6 : #define V8_COMPILER_JS_BUILTIN_REDUCER_H_
7 :
8 : #include "src/base/compiler-specific.h"
9 : #include "src/compiler/graph-reducer.h"
10 : #include "src/globals.h"
11 :
12 : namespace v8 {
13 : namespace internal {
14 :
15 : // Forward declarations.
16 : class CompilationDependencies;
17 : class Factory;
18 :
19 : namespace compiler {
20 :
21 : // Forward declarations.
22 : class CommonOperatorBuilder;
23 : struct FieldAccess;
24 : class JSGraph;
25 : class JSOperatorBuilder;
26 : class SimplifiedOperatorBuilder;
27 : class TypeCache;
28 :
29 : class V8_EXPORT_PRIVATE JSBuiltinReducer final
30 : : public NON_EXPORTED_BASE(AdvancedReducer) {
31 : public:
32 : JSBuiltinReducer(Editor* editor, JSGraph* jsgraph,
33 : CompilationDependencies* dependencies,
34 : Handle<Context> native_context);
35 444101 : ~JSBuiltinReducer() final {}
36 :
37 0 : const char* reducer_name() const override { return "JSBuiltinReducer"; }
38 :
39 : Reduction Reduce(Node* node) final;
40 :
41 : private:
42 : enum class ArrayIteratorKind { kArray, kTypedArray };
43 :
44 : Reduction ReduceArrayIterator(Node* node, IterationKind kind);
45 : Reduction ReduceTypedArrayIterator(Node* node, IterationKind kind);
46 : Reduction ReduceArrayIterator(Handle<Map> receiver_map, Node* node,
47 : IterationKind kind,
48 : ArrayIteratorKind iter_kind);
49 : Reduction ReduceArrayIteratorNext(Node* node);
50 : Reduction ReduceFastArrayIteratorNext(Handle<Map> iterator_map, Node* node,
51 : IterationKind kind);
52 : Reduction ReduceTypedArrayIteratorNext(Handle<Map> iterator_map, Node* node,
53 : IterationKind kind);
54 : Reduction ReduceTypedArrayToStringTag(Node* node);
55 : Reduction ReduceArrayIsArray(Node* node);
56 : Reduction ReduceArrayPop(Node* node);
57 : Reduction ReduceArrayPush(Node* node);
58 : Reduction ReduceArrayShift(Node* node);
59 : Reduction ReduceCollectionIterator(Node* node,
60 : InstanceType collection_instance_type,
61 : int collection_iterator_map_index);
62 : Reduction ReduceCollectionSize(Node* node,
63 : InstanceType collection_instance_type);
64 : Reduction ReduceCollectionIteratorNext(
65 : Node* node, int entry_size,
66 : InstanceType collection_iterator_instance_type_first,
67 : InstanceType collection_iterator_instance_type_last);
68 : Reduction ReduceDateNow(Node* node);
69 : Reduction ReduceDateGetTime(Node* node);
70 : Reduction ReduceGlobalIsFinite(Node* node);
71 : Reduction ReduceGlobalIsNaN(Node* node);
72 : Reduction ReduceMapHas(Node* node);
73 : Reduction ReduceMapGet(Node* node);
74 : Reduction ReduceMathAbs(Node* node);
75 : Reduction ReduceMathAcos(Node* node);
76 : Reduction ReduceMathAcosh(Node* node);
77 : Reduction ReduceMathAsin(Node* node);
78 : Reduction ReduceMathAsinh(Node* node);
79 : Reduction ReduceMathAtan(Node* node);
80 : Reduction ReduceMathAtanh(Node* node);
81 : Reduction ReduceMathAtan2(Node* node);
82 : Reduction ReduceMathCbrt(Node* node);
83 : Reduction ReduceMathCeil(Node* node);
84 : Reduction ReduceMathClz32(Node* node);
85 : Reduction ReduceMathCos(Node* node);
86 : Reduction ReduceMathCosh(Node* node);
87 : Reduction ReduceMathExp(Node* node);
88 : Reduction ReduceMathExpm1(Node* node);
89 : Reduction ReduceMathFloor(Node* node);
90 : Reduction ReduceMathFround(Node* node);
91 : Reduction ReduceMathImul(Node* node);
92 : Reduction ReduceMathLog(Node* node);
93 : Reduction ReduceMathLog1p(Node* node);
94 : Reduction ReduceMathLog10(Node* node);
95 : Reduction ReduceMathLog2(Node* node);
96 : Reduction ReduceMathMax(Node* node);
97 : Reduction ReduceMathMin(Node* node);
98 : Reduction ReduceMathPow(Node* node);
99 : Reduction ReduceMathRound(Node* node);
100 : Reduction ReduceMathSign(Node* node);
101 : Reduction ReduceMathSin(Node* node);
102 : Reduction ReduceMathSinh(Node* node);
103 : Reduction ReduceMathSqrt(Node* node);
104 : Reduction ReduceMathTan(Node* node);
105 : Reduction ReduceMathTanh(Node* node);
106 : Reduction ReduceMathTrunc(Node* node);
107 : Reduction ReduceNumberIsFinite(Node* node);
108 : Reduction ReduceNumberIsInteger(Node* node);
109 : Reduction ReduceNumberIsNaN(Node* node);
110 : Reduction ReduceNumberIsSafeInteger(Node* node);
111 : Reduction ReduceNumberParseInt(Node* node);
112 : Reduction ReduceObjectCreate(Node* node);
113 : Reduction ReduceObjectIs(Node* node);
114 : Reduction ReduceStringCharAt(Node* node);
115 : Reduction ReduceStringCharCodeAt(Node* node);
116 : Reduction ReduceStringConcat(Node* node);
117 : Reduction ReduceStringFromCharCode(Node* node);
118 : Reduction ReduceStringIndexOf(Node* node);
119 : Reduction ReduceStringIterator(Node* node);
120 : Reduction ReduceStringIteratorNext(Node* node);
121 : Reduction ReduceStringToLowerCaseIntl(Node* node);
122 : Reduction ReduceStringToUpperCaseIntl(Node* node);
123 : Reduction ReduceArrayBufferIsView(Node* node);
124 : Reduction ReduceArrayBufferViewAccessor(Node* node,
125 : InstanceType instance_type,
126 : FieldAccess const& access);
127 :
128 : Node* ToNumber(Node* value);
129 : Node* ToUint32(Node* value);
130 :
131 : Graph* graph() const;
132 : Factory* factory() const;
133 : JSGraph* jsgraph() const { return jsgraph_; }
134 : Isolate* isolate() const;
135 : Handle<Context> native_context() const { return native_context_; }
136 : CommonOperatorBuilder* common() const;
137 : SimplifiedOperatorBuilder* simplified() const;
138 : JSOperatorBuilder* javascript() const;
139 : CompilationDependencies* dependencies() const { return dependencies_; }
140 :
141 : CompilationDependencies* const dependencies_;
142 : JSGraph* const jsgraph_;
143 : Handle<Context> const native_context_;
144 : TypeCache const& type_cache_;
145 : };
146 :
147 : } // namespace compiler
148 : } // namespace internal
149 : } // namespace v8
150 :
151 : #endif // V8_COMPILER_JS_BUILTIN_REDUCER_H_
|