Line data Source code
1 : // Copyright 2015 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_CALL_REDUCER_H_
6 : #define V8_COMPILER_JS_CALL_REDUCER_H_
7 :
8 : #include "src/base/flags.h"
9 : #include "src/compiler/graph-reducer.h"
10 :
11 : namespace v8 {
12 : namespace internal {
13 :
14 : // Forward declarations.
15 : class CompilationDependencies;
16 : class Factory;
17 :
18 : namespace compiler {
19 :
20 : // Forward declarations.
21 : class CommonOperatorBuilder;
22 : class JSGraph;
23 : class JSOperatorBuilder;
24 : class SimplifiedOperatorBuilder;
25 :
26 : // Performs strength reduction on {JSConstruct} and {JSCall} nodes,
27 : // which might allow inlining or other optimizations to be performed afterwards.
28 395343 : class JSCallReducer final : public AdvancedReducer {
29 : public:
30 : JSCallReducer(Editor* editor, JSGraph* jsgraph,
31 : Handle<Context> native_context,
32 : CompilationDependencies* dependencies)
33 : : AdvancedReducer(editor),
34 : jsgraph_(jsgraph),
35 : native_context_(native_context),
36 395343 : dependencies_(dependencies) {}
37 :
38 : Reduction Reduce(Node* node) final;
39 :
40 : private:
41 : Reduction ReduceArrayConstructor(Node* node);
42 : Reduction ReduceBooleanConstructor(Node* node);
43 : Reduction ReduceCallApiFunction(
44 : Node* node, Handle<FunctionTemplateInfo> function_template_info);
45 : Reduction ReduceNumberConstructor(Node* node);
46 : Reduction ReduceFunctionPrototypeApply(Node* node);
47 : Reduction ReduceFunctionPrototypeCall(Node* node);
48 : Reduction ReduceFunctionPrototypeHasInstance(Node* node);
49 : Reduction ReduceObjectGetPrototype(Node* node, Node* object);
50 : Reduction ReduceObjectGetPrototypeOf(Node* node);
51 : Reduction ReduceObjectPrototypeGetProto(Node* node);
52 : Reduction ReduceReflectGetPrototypeOf(Node* node);
53 : Reduction ReduceSpreadCall(Node* node, int arity);
54 : Reduction ReduceJSConstruct(Node* node);
55 : Reduction ReduceJSConstructWithSpread(Node* node);
56 : Reduction ReduceJSCall(Node* node);
57 : Reduction ReduceJSCallWithSpread(Node* node);
58 :
59 : Graph* graph() const;
60 : JSGraph* jsgraph() const { return jsgraph_; }
61 : Isolate* isolate() const;
62 : Factory* factory() const;
63 : Handle<Context> native_context() const { return native_context_; }
64 : Handle<JSGlobalProxy> global_proxy() const;
65 : CommonOperatorBuilder* common() const;
66 : JSOperatorBuilder* javascript() const;
67 : SimplifiedOperatorBuilder* simplified() const;
68 : CompilationDependencies* dependencies() const { return dependencies_; }
69 :
70 : JSGraph* const jsgraph_;
71 : Handle<Context> const native_context_;
72 : CompilationDependencies* const dependencies_;
73 : };
74 :
75 : } // namespace compiler
76 : } // namespace internal
77 : } // namespace v8
78 :
79 : #endif // V8_COMPILER_JS_CALL_REDUCER_H_
|