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_SIMPLIFIED_LOWERING_H_ 6 #define V8_COMPILER_SIMPLIFIED_LOWERING_H_ 7 8 #include "src/compiler/js-graph.h" 9 #include "src/compiler/machine-operator.h" 10 #include "src/compiler/node.h" 11 #include "src/compiler/simplified-operator.h" 12 13 namespace v8 { 14 namespace internal { 15 namespace compiler { 16 17 class SimplifiedLowering { 18 public: SimplifiedLowering(JSGraph * jsgraph)19 explicit SimplifiedLowering(JSGraph* jsgraph) : jsgraph_(jsgraph) {} ~SimplifiedLowering()20 virtual ~SimplifiedLowering() {} 21 22 void LowerAllNodes(); 23 24 // TODO(titzer): These are exposed for direct testing. Use a friend class. 25 void DoLoadField(Node* node); 26 void DoStoreField(Node* node); 27 void DoLoadElement(Node* node); 28 void DoStoreElement(Node* node); 29 void DoStringAdd(Node* node); 30 void DoStringEqual(Node* node); 31 void DoStringLessThan(Node* node); 32 void DoStringLessThanOrEqual(Node* node); 33 34 private: 35 JSGraph* jsgraph_; 36 37 Node* SmiTag(Node* node); 38 Node* IsTagged(Node* node); 39 Node* Untag(Node* node); 40 Node* OffsetMinusTagConstant(int32_t offset); 41 Node* ComputeIndex(const ElementAccess& access, Node* index); 42 Node* StringComparison(Node* node, bool requires_ordering); 43 44 friend class RepresentationSelector; 45 zone()46 Zone* zone() { return jsgraph_->zone(); } jsgraph()47 JSGraph* jsgraph() { return jsgraph_; } graph()48 Graph* graph() { return jsgraph()->graph(); } common()49 CommonOperatorBuilder* common() { return jsgraph()->common(); } machine()50 MachineOperatorBuilder* machine() { return jsgraph()->machine(); } 51 }; 52 53 } // namespace compiler 54 } // namespace internal 55 } // namespace v8 56 57 #endif // V8_COMPILER_SIMPLIFIED_LOWERING_H_ 58