v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
js-typed-lowering.h
Go to the documentation of this file.
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
3// found in the LICENSE file.
4
5#ifndef V8_COMPILER_JS_TYPED_LOWERING_H_
6#define V8_COMPILER_JS_TYPED_LOWERING_H_
7
10
11namespace v8 {
12namespace internal {
13
14// Forward declarations.
15class Factory;
16
17namespace compiler {
18
19// Forward declarations.
20class CommonOperatorBuilder;
21class CompilationDependencies;
22class JSGraph;
23class JSOperatorBuilder;
24class SimplifiedOperatorBuilder;
25class TypeCache;
26
28
29// Lowers JS-level operators to simplified operators based on types.
31 : public NON_EXPORTED_BASE(AdvancedReducer) {
32 public:
34 Zone* zone);
35 ~JSTypedLowering() final = default;
36
37 const char* reducer_name() const override { return "JSTypedLowering"; }
38
39 Reduction Reduce(Node* node) final;
40
41 private:
42 friend class JSBinopReduction;
43
44 Reduction ReduceJSAdd(Node* node);
45 Reduction ReduceJSBitwiseNot(Node* node);
46 Reduction ReduceJSDecrement(Node* node);
47 Reduction ReduceJSIncrement(Node* node);
48 Reduction ReduceJSNegate(Node* node);
49 Reduction ReduceJSComparison(Node* node);
50 Reduction ReduceJSLoadNamed(Node* node);
51 Reduction ReduceJSHasInPrototypeChain(Node* node);
52 Reduction ReduceJSOrdinaryHasInstance(Node* node);
53 Reduction ReduceJSHasContextExtension(Node* node);
54 Reduction ReduceJSLoadContext(Node* node);
55 Reduction ReduceJSLoadScriptContext(Node* node);
56 Reduction ReduceJSStoreContext(Node* node);
57 Reduction ReduceJSStoreScriptContext(Node* node);
58 Reduction ReduceJSLoadModule(Node* node);
59 Reduction ReduceJSStoreModule(Node* node);
60 Reduction ReduceJSEqual(Node* node);
61 Reduction ReduceJSStrictEqual(Node* node);
62 Reduction ReduceJSToLength(Node* node);
63 Reduction ReduceJSToName(Node* node);
64 Reduction ReduceJSToNumberInput(Node* input);
65 Reduction ReduceJSToNumber(Node* node);
66 Reduction ReduceJSToBigInt(Node* node);
67 Reduction ReduceJSToBigIntConvertNumber(Node* node);
68 Reduction ReduceJSToNumeric(Node* node);
69 Reduction ReduceJSToStringInput(Node* input);
70 Reduction ReduceJSToString(Node* node);
71 Reduction ReduceJSToObject(Node* node);
72 Reduction ReduceJSConstructForwardVarargs(Node* node);
73 Reduction ReduceJSConstruct(Node* node);
74 Reduction ReduceJSCallForwardVarargs(Node* node);
75 Reduction ReduceJSCall(Node* node);
76 Reduction ReduceJSForInNext(Node* node);
77 Reduction ReduceJSForInPrepare(Node* node);
78 Reduction ReduceJSLoadMessage(Node* node);
79 Reduction ReduceJSStoreMessage(Node* node);
80 Reduction ReduceJSGeneratorStore(Node* node);
81 Reduction ReduceJSGeneratorRestoreContinuation(Node* node);
82 Reduction ReduceJSGeneratorRestoreContext(Node* node);
83 Reduction ReduceJSGeneratorRestoreRegister(Node* node);
84 Reduction ReduceJSGeneratorRestoreInputOrDebugPos(Node* node);
85 Reduction ReduceNumberBinop(Node* node);
86 Reduction ReduceInt32Binop(Node* node);
87 Reduction ReduceUI32Shift(Node* node, Signedness signedness);
88 Reduction ReduceObjectIsArray(Node* node);
89 Reduction ReduceJSParseInt(Node* node);
90 Reduction ReduceJSResolvePromise(Node* node);
91
92 // Helper for ReduceJSLoadModule and ReduceJSStoreModule.
93 Node* BuildGetModuleCell(Node* node);
94
95 // Helpers for ReduceJSAdd.
96 Reduction GenerateStringAddition(Node* node, Node* left, Node* right,
97 Node* context, Node* frame_state,
98 Node** effect, Node** control,
99 bool should_create_cons_string);
100 Node* UnwrapStringWrapper(Node* string_or_wrapper, Node** effect,
101 Node** control);
102
103 Factory* factory() const;
104 TFGraph* graph() const;
105 JSGraph* jsgraph() const { return jsgraph_; }
106 JSHeapBroker* broker() const { return broker_; }
107 CompilationDependencies* dependencies() const;
108 Isolate* isolate() const;
109 JSOperatorBuilder* javascript() const;
110 CommonOperatorBuilder* common() const;
112
118};
119
120} // namespace compiler
121} // namespace internal
122} // namespace v8
123
124#endif // V8_COMPILER_JS_TYPED_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