V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
js-intrinsic-lowering.h
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  ~JSIntrinsicLowering() final = default;
36 
37  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_
Definition: libplatform.h:13