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.
5 #ifndef V8_COMPILER_CHANGE_LOWERING_H_
6 #define V8_COMPILER_CHANGE_LOWERING_H_
8 #include "src/compiler/graph-reducer.h"
14 // Forward declarations.
15 class CommonOperatorBuilder;
18 class MachineOperatorBuilder;
20 class ChangeLowering FINAL : public Reducer {
22 explicit ChangeLowering(JSGraph* jsgraph) : jsgraph_(jsgraph) {}
23 ~ChangeLowering() FINAL;
25 Reduction Reduce(Node* node) FINAL;
28 Node* HeapNumberValueIndexConstant();
29 Node* SmiMaxValueConstant();
30 Node* SmiShiftBitsConstant();
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);
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);
52 Isolate* isolate() const;
53 JSGraph* jsgraph() const { return jsgraph_; }
54 CommonOperatorBuilder* common() const;
55 MachineOperatorBuilder* machine() const;
60 } // namespace compiler
61 } // namespace internal
64 #endif // V8_COMPILER_CHANGE_LOWERING_H_