V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
simplified-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_SIMPLIFIED_LOWERING_H_
6 #define V8_COMPILER_SIMPLIFIED_LOWERING_H_
7 
8 #include "src/compiler/js-graph.h"
9 #include "src/compiler/machine-operator.h"
10 #include "src/compiler/node.h"
11 #include "src/compiler/simplified-operator.h"
12 
13 namespace v8 {
14 namespace internal {
15 namespace compiler {
16 
17 // Forward declarations.
18 class NodeOriginTable;
19 class RepresentationChanger;
20 class RepresentationSelector;
21 class SourcePositionTable;
22 class TypeCache;
23 
24 class V8_EXPORT_PRIVATE SimplifiedLowering final {
25  public:
26  SimplifiedLowering(JSGraph* jsgraph, JSHeapBroker* broker, Zone* zone,
27  SourcePositionTable* source_position,
28  NodeOriginTable* node_origins,
29  PoisoningMitigationLevel poisoning_level);
30  ~SimplifiedLowering() = default;
31 
32  void LowerAllNodes();
33 
34  void DoMax(Node* node, Operator const* op, MachineRepresentation rep);
35  void DoMin(Node* node, Operator const* op, MachineRepresentation rep);
36  void DoJSToNumberOrNumericTruncatesToFloat64(
37  Node* node, RepresentationSelector* selector);
38  void DoJSToNumberOrNumericTruncatesToWord32(Node* node,
39  RepresentationSelector* selector);
40  void DoShift(Node* node, Operator const* op, Type rhs_type);
41  void DoIntegral32ToBit(Node* node);
42  void DoOrderedNumberToBit(Node* node);
43  void DoNumberToBit(Node* node);
44  void DoIntegerToUint8Clamped(Node* node);
45  void DoNumberToUint8Clamped(Node* node);
46  void DoSigned32ToUint8Clamped(Node* node);
47  void DoUnsigned32ToUint8Clamped(Node* node);
48 
49  private:
50  JSGraph* const jsgraph_;
51  JSHeapBroker* broker_;
52  Zone* const zone_;
53  TypeCache const& type_cache_;
54  SetOncePointer<Node> to_number_code_;
55  SetOncePointer<Node> to_number_convert_big_int_code_;
56  SetOncePointer<Node> to_numeric_code_;
57  SetOncePointer<Operator const> to_number_operator_;
58  SetOncePointer<Operator const> to_number_convert_big_int_operator_;
59  SetOncePointer<Operator const> to_numeric_operator_;
60 
61  // TODO(danno): SimplifiedLowering shouldn't know anything about the source
62  // positions table, but must for now since there currently is no other way to
63  // pass down source position information to nodes created during
64  // lowering. Once this phase becomes a vanilla reducer, it should get source
65  // position information via the SourcePositionWrapper like all other reducers.
66  SourcePositionTable* source_positions_;
67  NodeOriginTable* node_origins_;
68 
69  PoisoningMitigationLevel poisoning_level_;
70 
71  Node* Float64Round(Node* const node);
72  Node* Float64Sign(Node* const node);
73  Node* Int32Abs(Node* const node);
74  Node* Int32Div(Node* const node);
75  Node* Int32Mod(Node* const node);
76  Node* Int32Sign(Node* const node);
77  Node* Uint32Div(Node* const node);
78  Node* Uint32Mod(Node* const node);
79 
80  Node* ToNumberCode();
81  Node* ToNumberConvertBigIntCode();
82  Node* ToNumericCode();
83  Operator const* ToNumberOperator();
84  Operator const* ToNumberConvertBigIntOperator();
85  Operator const* ToNumericOperator();
86 
87  friend class RepresentationSelector;
88 
89  Isolate* isolate() { return jsgraph_->isolate(); }
90  Zone* zone() { return jsgraph_->zone(); }
91  JSGraph* jsgraph() { return jsgraph_; }
92  Graph* graph() { return jsgraph()->graph(); }
93  CommonOperatorBuilder* common() { return jsgraph()->common(); }
94  MachineOperatorBuilder* machine() { return jsgraph()->machine(); }
95  SimplifiedOperatorBuilder* simplified() { return jsgraph()->simplified(); }
96 };
97 
98 } // namespace compiler
99 } // namespace internal
100 } // namespace v8
101 
102 #endif // V8_COMPILER_SIMPLIFIED_LOWERING_H_
Definition: libplatform.h:13