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 ChangeLowering(JSGraph* jsgraph, Linkage* linkage)
23 : jsgraph_(jsgraph), linkage_(linkage) {}
24 virtual ~ChangeLowering();
26 virtual Reduction Reduce(Node* node) OVERRIDE;
29 Node* HeapNumberValueIndexConstant();
30 Node* SmiMaxValueConstant();
31 Node* SmiShiftBitsConstant();
33 Node* AllocateHeapNumberWithValue(Node* value, Node* control);
34 Node* ChangeSmiToInt32(Node* value);
35 Node* LoadHeapNumberValue(Node* value, Node* control);
37 Reduction ChangeBitToBool(Node* val, Node* control);
38 Reduction ChangeBoolToBit(Node* val);
39 Reduction ChangeFloat64ToTagged(Node* val, Node* control);
40 Reduction ChangeInt32ToTagged(Node* val, Node* control);
41 Reduction ChangeTaggedToFloat64(Node* val, Node* control);
42 Reduction ChangeTaggedToUI32(Node* val, Node* control, Signedness signedness);
43 Reduction ChangeUint32ToTagged(Node* val, Node* control);
46 Isolate* isolate() const;
47 JSGraph* jsgraph() const { return jsgraph_; }
48 Linkage* linkage() const { return linkage_; }
49 CommonOperatorBuilder* common() const;
50 MachineOperatorBuilder* machine() const;
56 } // namespace compiler
57 } // namespace internal
60 #endif // V8_COMPILER_CHANGE_LOWERING_H_