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_INTRINSIC_LOWERING_H_
6 : #define V8_COMPILER_JS_INTRINSIC_LOWERING_H_
7 :
8 : #include "src/base/compiler-specific.h"
9 : #include "src/compiler/common-operator.h"
10 : #include "src/compiler/graph-reducer.h"
11 : #include "src/globals.h"
12 :
13 : namespace v8 {
14 : namespace internal {
15 :
16 : // Forward declarations.
17 : class Callable;
18 :
19 :
20 : namespace compiler {
21 :
22 : // Forward declarations.
23 : class CommonOperatorBuilder;
24 : struct FieldAccess;
25 : class JSOperatorBuilder;
26 : class JSGraph;
27 : class SimplifiedOperatorBuilder;
28 :
29 :
30 : // Lowers certain JS-level runtime calls.
31 : class V8_EXPORT_PRIVATE JSIntrinsicLowering final
32 : : public NON_EXPORTED_BASE(AdvancedReducer) {
33 : public:
34 : JSIntrinsicLowering(Editor* editor, JSGraph* jsgraph);
35 928234 : ~JSIntrinsicLowering() final = default;
36 :
37 18 : const char* reducer_name() const override { return "JSIntrinsicLowering"; }
38 :
39 : Reduction Reduce(Node* node) final;
40 :
41 : private:
42 : Reduction ReduceCreateIterResultObject(Node* node);
43 : Reduction ReduceDeoptimizeNow(Node* node);
44 : Reduction ReduceCreateJSGeneratorObject(Node* node);
45 : Reduction ReduceGeneratorClose(Node* node);
46 : Reduction ReduceAsyncFunctionAwaitCaught(Node* node);
47 : Reduction ReduceAsyncFunctionAwaitUncaught(Node* node);
48 : Reduction ReduceAsyncFunctionEnter(Node* node);
49 : Reduction ReduceAsyncFunctionReject(Node* node);
50 : Reduction ReduceAsyncFunctionResolve(Node* node);
51 : Reduction ReduceAsyncGeneratorAwaitCaught(Node* node);
52 : Reduction ReduceAsyncGeneratorAwaitUncaught(Node* node);
53 : Reduction ReduceAsyncGeneratorReject(Node* node);
54 : Reduction ReduceAsyncGeneratorResolve(Node* node);
55 : Reduction ReduceAsyncGeneratorYield(Node* node);
56 : Reduction ReduceGeneratorGetResumeMode(Node* node);
57 : Reduction ReduceIsInstanceType(Node* node, InstanceType instance_type);
58 : Reduction ReduceIsJSReceiver(Node* node);
59 : Reduction ReduceIsSmi(Node* node);
60 : Reduction ReduceToLength(Node* node);
61 : Reduction ReduceToObject(Node* node);
62 : Reduction ReduceToString(Node* node);
63 : Reduction ReduceCall(Node* node);
64 :
65 : Reduction Change(Node* node, const Operator* op);
66 : Reduction Change(Node* node, const Operator* op, Node* a, Node* b);
67 : Reduction Change(Node* node, const Operator* op, Node* a, Node* b, Node* c);
68 : Reduction Change(Node* node, const Operator* op, Node* a, Node* b, Node* c,
69 : Node* d);
70 : Reduction Change(Node* node, Callable const& callable,
71 : int stack_parameter_count);
72 :
73 : Graph* graph() const;
74 : JSGraph* jsgraph() const { return jsgraph_; }
75 : Isolate* isolate() const;
76 : CommonOperatorBuilder* common() const;
77 : JSOperatorBuilder* javascript() const;
78 : SimplifiedOperatorBuilder* simplified() const;
79 :
80 : JSGraph* const jsgraph_;
81 : };
82 :
83 : } // namespace compiler
84 : } // namespace internal
85 : } // namespace v8
86 :
87 : #endif // V8_COMPILER_JS_INTRINSIC_LOWERING_H_
|