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 10namespace v8 { 11namespace internal { 12namespace compiler { 13 14// Forward declarations. 15class CommonOperatorBuilder; 16class JSGraph; 17class Linkage; 18class MachineOperatorBuilder; 19 20class ChangeLowering FINAL : public Reducer { 21 public: 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; 47 JSGraph* jsgraph() const { return jsgraph_; } 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