40a3e152b5c03c1bafdf5cede64b43327277ad5b
[platform/upstream/nodejs.git] / deps / v8 / src / compiler / change-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_CHANGE_LOWERING_H_
6 #define V8_COMPILER_CHANGE_LOWERING_H_
7
8 #include "src/compiler/graph-reducer.h"
9
10 namespace v8 {
11 namespace internal {
12 namespace compiler {
13
14 // Forward declarations.
15 class CommonOperatorBuilder;
16 class JSGraph;
17 class Linkage;
18 class MachineOperatorBuilder;
19
20 class ChangeLowering FINAL : public Reducer {
21  public:
22   explicit ChangeLowering(JSGraph* jsgraph) : jsgraph_(jsgraph) {}
23   ~ChangeLowering() FINAL;
24
25   Reduction Reduce(Node* node) FINAL;
26
27  private:
28   Node* HeapNumberValueIndexConstant();
29   Node* SmiMaxValueConstant();
30   Node* SmiShiftBitsConstant();
31
32   Node* AllocateHeapNumberWithValue(Node* value, Node* control);
33   Node* ChangeInt32ToFloat64(Node* value);
34   Node* ChangeSmiToFloat64(Node* value);
35   Node* ChangeSmiToInt32(Node* value);
36   Node* ChangeUint32ToFloat64(Node* value);
37   Node* ChangeUint32ToSmi(Node* value);
38   Node* LoadHeapNumberValue(Node* value, Node* control);
39   Node* TestNotSmi(Node* value);
40   Node* Uint32LessThanOrEqual(Node* lhs, Node* rhs);
41
42   Reduction ChangeBitToBool(Node* value, Node* control);
43   Reduction ChangeBoolToBit(Node* value);
44   Reduction ChangeFloat64ToTagged(Node* value, Node* control);
45   Reduction ChangeInt32ToTagged(Node* value, Node* control);
46   Reduction ChangeTaggedToFloat64(Node* value, Node* control);
47   Reduction ChangeTaggedToUI32(Node* value, Node* control,
48                                Signedness signedness);
49   Reduction ChangeUint32ToTagged(Node* value, Node* control);
50
51   Graph* graph() const;
52   Isolate* isolate() const;
53   JSGraph* jsgraph() const { return jsgraph_; }
54   CommonOperatorBuilder* common() const;
55   MachineOperatorBuilder* machine() const;
56
57   JSGraph* jsgraph_;
58 };
59
60 }  // namespace compiler
61 }  // namespace internal
62 }  // namespace v8
63
64 #endif  // V8_COMPILER_CHANGE_LOWERING_H_