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: ChangeLowering(JSGraph * jsgraph,Linkage * linkage)22 ChangeLowering(JSGraph* jsgraph, Linkage* linkage) 23 : jsgraph_(jsgraph), linkage_(linkage) {} 24 virtual ~ChangeLowering(); 25 26 virtual Reduction Reduce(Node* node) OVERRIDE; 27 28 private: 29 Node* HeapNumberValueIndexConstant(); 30 Node* SmiMaxValueConstant(); 31 Node* SmiShiftBitsConstant(); 32 33 Node* AllocateHeapNumberWithValue(Node* value, Node* control); 34 Node* ChangeSmiToInt32(Node* value); 35 Node* LoadHeapNumberValue(Node* value, Node* control); 36 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); 44 45 Graph* graph() const; 46 Isolate* isolate() const; jsgraph()47 JSGraph* jsgraph() const { return jsgraph_; } linkage()48 Linkage* linkage() const { return linkage_; } 49 CommonOperatorBuilder* common() const; 50 MachineOperatorBuilder* machine() const; 51 52 JSGraph* jsgraph_; 53 Linkage* linkage_; 54 }; 55 56 } // namespace compiler 57 } // namespace internal 58 } // namespace v8 59 60 #endif // V8_COMPILER_CHANGE_LOWERING_H_ 61