OLD | NEW |
---|---|
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 #ifndef V8_COMPILER_JS_BUILTIN_REDUCER_H_ | 5 #ifndef V8_COMPILER_JS_BUILTIN_REDUCER_H_ |
6 #define V8_COMPILER_JS_BUILTIN_REDUCER_H_ | 6 #define V8_COMPILER_JS_BUILTIN_REDUCER_H_ |
7 | 7 |
8 #include "src/base/compiler-specific.h" | 8 #include "src/base/compiler-specific.h" |
9 #include "src/base/flags.h" | 9 #include "src/base/flags.h" |
10 #include "src/compiler/graph-reducer.h" | 10 #include "src/compiler/graph-reducer.h" |
11 #include "src/globals.h" | 11 #include "src/globals.h" |
12 | 12 |
13 namespace v8 { | 13 namespace v8 { |
14 namespace internal { | 14 namespace internal { |
15 | 15 |
16 // Forward declarations. | 16 // Forward declarations. |
17 class CompilationDependencies; | 17 class CompilationDependencies; |
18 class Factory; | 18 class Factory; |
19 | 19 |
20 namespace compiler { | 20 namespace compiler { |
21 | 21 |
22 // Forward declarations. | 22 // Forward declarations. |
23 class CommonOperatorBuilder; | 23 class CommonOperatorBuilder; |
24 struct FieldAccess; | 24 struct FieldAccess; |
25 class JSGraph; | 25 class JSGraph; |
26 class JSOperatorBuilder; | 26 class JSOperatorBuilder; |
27 class MachineOperatorBuilder; | |
Benedikt Meurer
2016/11/08 05:29:49
Remove this unused forward declaration.
| |
27 class SimplifiedOperatorBuilder; | 28 class SimplifiedOperatorBuilder; |
28 class TypeCache; | 29 class TypeCache; |
29 | 30 |
30 class V8_EXPORT_PRIVATE JSBuiltinReducer final | 31 class V8_EXPORT_PRIVATE JSBuiltinReducer final |
31 : public NON_EXPORTED_BASE(AdvancedReducer) { | 32 : public NON_EXPORTED_BASE(AdvancedReducer) { |
32 public: | 33 public: |
33 // Flags that control the mode of operation. | 34 // Flags that control the mode of operation. |
34 enum Flag { | 35 enum Flag { |
35 kNoFlags = 0u, | 36 kNoFlags = 0u, |
36 kDeoptimizationEnabled = 1u << 0, | 37 kDeoptimizationEnabled = 1u << 0, |
37 }; | 38 }; |
38 typedef base::Flags<Flag> Flags; | 39 typedef base::Flags<Flag> Flags; |
39 | 40 |
40 JSBuiltinReducer(Editor* editor, JSGraph* jsgraph, Flags flags, | 41 JSBuiltinReducer(Editor* editor, JSGraph* jsgraph, Flags flags, |
41 CompilationDependencies* dependencies, | 42 CompilationDependencies* dependencies, |
42 Handle<Context> native_context); | 43 Handle<Context> native_context); |
43 ~JSBuiltinReducer() final {} | 44 ~JSBuiltinReducer() final {} |
44 | 45 |
45 Reduction Reduce(Node* node) final; | 46 Reduction Reduce(Node* node) final; |
46 | 47 |
47 private: | 48 private: |
49 Reduction ReduceArrayIterator(Node* node, IterationKind kind); | |
50 Reduction ReduceArrayIteratorNext(Node* node); | |
51 Reduction ReduceFastArrayIteratorNext(Handle<Map> iterator_map, Node* node, | |
52 IterationKind kind); | |
53 Reduction ReduceTypedArrayIteratorNext(Handle<Map> iterator_map, Node* node, | |
54 IterationKind kind); | |
48 Reduction ReduceArrayPop(Node* node); | 55 Reduction ReduceArrayPop(Node* node); |
49 Reduction ReduceArrayPush(Node* node); | 56 Reduction ReduceArrayPush(Node* node); |
50 Reduction ReduceDateGetTime(Node* node); | 57 Reduction ReduceDateGetTime(Node* node); |
51 Reduction ReduceGlobalIsFinite(Node* node); | 58 Reduction ReduceGlobalIsFinite(Node* node); |
52 Reduction ReduceGlobalIsNaN(Node* node); | 59 Reduction ReduceGlobalIsNaN(Node* node); |
53 Reduction ReduceMathAbs(Node* node); | 60 Reduction ReduceMathAbs(Node* node); |
54 Reduction ReduceMathAcos(Node* node); | 61 Reduction ReduceMathAcos(Node* node); |
55 Reduction ReduceMathAcosh(Node* node); | 62 Reduction ReduceMathAcosh(Node* node); |
56 Reduction ReduceMathAsin(Node* node); | 63 Reduction ReduceMathAsin(Node* node); |
57 Reduction ReduceMathAsinh(Node* node); | 64 Reduction ReduceMathAsinh(Node* node); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
93 Reduction ReduceStringFromCharCode(Node* node); | 100 Reduction ReduceStringFromCharCode(Node* node); |
94 Reduction ReduceStringIterator(Node* node); | 101 Reduction ReduceStringIterator(Node* node); |
95 Reduction ReduceStringIteratorNext(Node* node); | 102 Reduction ReduceStringIteratorNext(Node* node); |
96 Reduction ReduceArrayBufferViewAccessor(Node* node, | 103 Reduction ReduceArrayBufferViewAccessor(Node* node, |
97 InstanceType instance_type, | 104 InstanceType instance_type, |
98 FieldAccess const& access); | 105 FieldAccess const& access); |
99 | 106 |
100 Node* ToNumber(Node* value); | 107 Node* ToNumber(Node* value); |
101 Node* ToUint32(Node* value); | 108 Node* ToUint32(Node* value); |
102 | 109 |
110 bool CanTreatHoleAsUndefined(Handle<Map> receiver_map); | |
Benedikt Meurer
2016/11/08 05:29:49
These helpers are unnecessary, see comments in .cc
| |
111 bool CanTreatHoleAsUndefined(std::vector<Handle<Map>> const& receiver_maps); | |
112 | |
103 Flags flags() const { return flags_; } | 113 Flags flags() const { return flags_; } |
104 Graph* graph() const; | 114 Graph* graph() const; |
105 Factory* factory() const; | 115 Factory* factory() const; |
106 JSGraph* jsgraph() const { return jsgraph_; } | 116 JSGraph* jsgraph() const { return jsgraph_; } |
107 Isolate* isolate() const; | 117 Isolate* isolate() const; |
108 Handle<Context> native_context() const { return native_context_; } | 118 Handle<Context> native_context() const { return native_context_; } |
109 CommonOperatorBuilder* common() const; | 119 CommonOperatorBuilder* common() const; |
110 SimplifiedOperatorBuilder* simplified() const; | 120 SimplifiedOperatorBuilder* simplified() const; |
111 JSOperatorBuilder* javascript() const; | 121 JSOperatorBuilder* javascript() const; |
112 CompilationDependencies* dependencies() const { return dependencies_; } | 122 CompilationDependencies* dependencies() const { return dependencies_; } |
113 | 123 |
114 CompilationDependencies* const dependencies_; | 124 CompilationDependencies* const dependencies_; |
115 Flags const flags_; | 125 Flags const flags_; |
116 JSGraph* const jsgraph_; | 126 JSGraph* const jsgraph_; |
117 Handle<Context> const native_context_; | 127 Handle<Context> const native_context_; |
118 TypeCache const& type_cache_; | 128 TypeCache const& type_cache_; |
119 }; | 129 }; |
120 | 130 |
121 DEFINE_OPERATORS_FOR_FLAGS(JSBuiltinReducer::Flags) | 131 DEFINE_OPERATORS_FOR_FLAGS(JSBuiltinReducer::Flags) |
122 | 132 |
123 } // namespace compiler | 133 } // namespace compiler |
124 } // namespace internal | 134 } // namespace internal |
125 } // namespace v8 | 135 } // namespace v8 |
126 | 136 |
127 #endif // V8_COMPILER_JS_BUILTIN_REDUCER_H_ | 137 #endif // V8_COMPILER_JS_BUILTIN_REDUCER_H_ |
OLD | NEW |