V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
js-typed-lowering.h
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 
8 #include "src/base/compiler-specific.h"
9 #include "src/compiler/graph-reducer.h"
10 #include "src/compiler/opcodes.h"
11 #include "src/globals.h"
12 
13 namespace v8 {
14 namespace internal {
15 
16 // Forward declarations.
17 class Factory;
18 
19 namespace compiler {
20 
21 // Forward declarations.
22 class CommonOperatorBuilder;
23 class JSGraph;
24 class JSOperatorBuilder;
25 class SimplifiedOperatorBuilder;
26 class TypeCache;
27 
28 enum Signedness { kSigned, kUnsigned };
29 
30 // Lowers JS-level operators to simplified operators based on types.
31 class V8_EXPORT_PRIVATE JSTypedLowering final
32  : public NON_EXPORTED_BASE(AdvancedReducer) {
33  public:
34  JSTypedLowering(Editor* editor, JSGraph* jsgraph, JSHeapBroker* broker,
35  Zone* zone);
36  ~JSTypedLowering() final = default;
37 
38  const char* reducer_name() const override { return "JSTypedLowering"; }
39 
40  Reduction Reduce(Node* node) final;
41 
42  private:
43  friend class JSBinopReduction;
44 
45  Reduction ReduceJSAdd(Node* node);
46  Reduction ReduceJSBitwiseNot(Node* node);
47  Reduction ReduceJSDecrement(Node* node);
48  Reduction ReduceJSIncrement(Node* node);
49  Reduction ReduceJSNegate(Node* node);
50  Reduction ReduceJSComparison(Node* node);
51  Reduction ReduceJSLoadNamed(Node* node);
52  Reduction ReduceJSHasInPrototypeChain(Node* node);
53  Reduction ReduceJSOrdinaryHasInstance(Node* node);
54  Reduction ReduceJSLoadContext(Node* node);
55  Reduction ReduceJSStoreContext(Node* node);
56  Reduction ReduceJSLoadModule(Node* node);
57  Reduction ReduceJSStoreModule(Node* node);
58  Reduction ReduceJSEqual(Node* node);
59  Reduction ReduceJSStrictEqual(Node* node);
60  Reduction ReduceJSToLength(Node* node);
61  Reduction ReduceJSToName(Node* node);
62  Reduction ReduceJSToNumberInput(Node* input);
63  Reduction ReduceJSToNumber(Node* node);
64  Reduction ReduceJSToNumeric(Node* node);
65  Reduction ReduceJSToStringInput(Node* input);
66  Reduction ReduceJSToString(Node* node);
67  Reduction ReduceJSToObject(Node* node);
68  Reduction ReduceJSConstructForwardVarargs(Node* node);
69  Reduction ReduceJSConstruct(Node* node);
70  Reduction ReduceJSCallForwardVarargs(Node* node);
71  Reduction ReduceJSCall(Node* node);
72  Reduction ReduceJSForInNext(Node* node);
73  Reduction ReduceJSForInPrepare(Node* node);
74  Reduction ReduceJSLoadMessage(Node* node);
75  Reduction ReduceJSStoreMessage(Node* node);
76  Reduction ReduceJSGeneratorStore(Node* node);
77  Reduction ReduceJSGeneratorRestoreContinuation(Node* node);
78  Reduction ReduceJSGeneratorRestoreContext(Node* node);
79  Reduction ReduceJSGeneratorRestoreRegister(Node* node);
80  Reduction ReduceJSGeneratorRestoreInputOrDebugPos(Node* node);
81  Reduction ReduceNumberBinop(Node* node);
82  Reduction ReduceInt32Binop(Node* node);
83  Reduction ReduceUI32Shift(Node* node, Signedness signedness);
84  Reduction ReduceObjectIsArray(Node* node);
85  Reduction ReduceJSParseInt(Node* node);
86  Reduction ReduceJSResolvePromise(Node* node);
87 
88  // Helper for ReduceJSLoadModule and ReduceJSStoreModule.
89  Node* BuildGetModuleCell(Node* node);
90 
91  Factory* factory() const;
92  Graph* graph() const;
93  JSGraph* jsgraph() const { return jsgraph_; }
94  JSHeapBroker* broker() const { return broker_; }
95  Isolate* isolate() const;
96  JSOperatorBuilder* javascript() const;
97  CommonOperatorBuilder* common() const;
98  SimplifiedOperatorBuilder* simplified() const;
99 
100  JSGraph* jsgraph_;
101  JSHeapBroker* broker_;
102  Type empty_string_type_;
103  Type pointer_comparable_type_;
104  TypeCache const& type_cache_;
105 };
106 
107 } // namespace compiler
108 } // namespace internal
109 } // namespace v8
110 
111 #endif // V8_COMPILER_JS_TYPED_LOWERING_H_
Definition: libplatform.h:13