v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
js-intrinsic-lowering.h
Go to the documentation of this file.
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
11
12namespace v8 {
13namespace internal {
14
15// Forward declarations.
16class Callable;
17
18
19namespace compiler {
20
21// Forward declarations.
22class CommonOperatorBuilder;
23struct FieldAccess;
24class JSOperatorBuilder;
25class JSGraph;
26class SimplifiedOperatorBuilder;
27
28
29// Lowers certain JS-level runtime calls.
31 : public NON_EXPORTED_BASE(AdvancedReducer) {
32 public:
34 ~JSIntrinsicLowering() final = default;
35
36 const char* reducer_name() const override { return "JSIntrinsicLowering"; }
37
38 Reduction Reduce(Node* node) final;
39
40 private:
41 Reduction ReduceCopyDataProperties(Node* node);
42 Reduction ReduceCopyDataPropertiesWithExcludedPropertiesOnStack(Node* node);
43 Reduction ReduceCreateIterResultObject(Node* node);
44 Reduction ReduceDeoptimizeNow(Node* node);
45 Reduction ReduceCreateJSGeneratorObject(Node* node);
46 Reduction ReduceGeneratorClose(Node* node);
47 Reduction ReduceAsyncFunctionAwait(Node* node);
48 Reduction ReduceAsyncFunctionEnter(Node* node);
49 Reduction ReduceAsyncFunctionReject(Node* node);
50 Reduction ReduceAsyncFunctionResolve(Node* node);
51 Reduction ReduceAsyncGeneratorAwait(Node* node);
52 Reduction ReduceAsyncGeneratorReject(Node* node);
53 Reduction ReduceAsyncGeneratorResolve(Node* node);
54 Reduction ReduceAsyncGeneratorYieldWithAwait(Node* node);
55 Reduction ReduceGeneratorGetResumeMode(Node* node);
56 Reduction ReduceIsInstanceType(Node* node, InstanceType instance_type);
57 Reduction ReduceIsJSReceiver(Node* node);
58 Reduction ReduceIsBeingInterpreted(Node* node);
59 Reduction ReduceTurbofanStaticAssert(Node* node);
60 Reduction ReduceVerifyType(Node* node);
61 Reduction ReduceCheckTurboshaftTypeOf(Node* node);
62 Reduction ReduceToLength(Node* node);
63 Reduction ReduceToObject(Node* node);
64 Reduction ReduceToString(Node* node);
65 Reduction ReduceCall(Node* node);
66 Reduction ReduceIncBlockCounter(Node* node);
67 Reduction ReduceGetImportMetaObject(Node* node);
68
69 Reduction Change(Node* node, const Operator* op);
70 Reduction Change(Node* node, const Operator* op, Node* a, Node* b);
71 Reduction Change(Node* node, const Operator* op, Node* a, Node* b, Node* c);
72 Reduction Change(Node* node, const Operator* op, Node* a, Node* b, Node* c,
73 Node* d);
74
79 Reduction Change(Node* node, Callable const& callable,
80 int stack_parameter_count,
81 enum FrameStateFlag frame_state_flag = kNeedsFrameState);
82
83 TFGraph* graph() const;
84 JSGraph* jsgraph() const { return jsgraph_; }
85 JSHeapBroker* broker() const { return broker_; }
86 Isolate* isolate() const;
87 CommonOperatorBuilder* common() const;
88 JSOperatorBuilder* javascript() const;
90
93};
94
95} // namespace compiler
96} // namespace internal
97} // namespace v8
98
99#endif // V8_COMPILER_JS_INTRINSIC_LOWERING_H_
TFGraph * graph
JSGraph * jsgraph
SimplifiedOperatorBuilder * simplified
JSHeapBroker *const broker_
Isolate * isolate
JSHeapBroker * broker
#define NON_EXPORTED_BASE(code)
#define V8_EXPORT_PRIVATE
Definition macros.h:460