| OLD | NEW |
| (Empty) |
| 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_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ | |
| 6 #define V8_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ | |
| 7 | |
| 8 #include "src/compiler/common-operator.h" | |
| 9 #include "src/compiler/graph-builder.h" | |
| 10 #include "src/compiler/machine-operator.h" | |
| 11 #include "src/compiler/simplified-operator.h" | |
| 12 #include "test/cctest/cctest.h" | |
| 13 #include "test/cctest/compiler/call-tester.h" | |
| 14 | |
| 15 namespace v8 { | |
| 16 namespace internal { | |
| 17 namespace compiler { | |
| 18 | |
| 19 class SimplifiedGraphBuilder : public GraphBuilder { | |
| 20 public: | |
| 21 SimplifiedGraphBuilder(Isolate* isolate, Graph* graph, | |
| 22 CommonOperatorBuilder* common, | |
| 23 MachineOperatorBuilder* machine, | |
| 24 SimplifiedOperatorBuilder* simplified); | |
| 25 virtual ~SimplifiedGraphBuilder() {} | |
| 26 | |
| 27 Zone* zone() const { return graph()->zone(); } | |
| 28 CommonOperatorBuilder* common() const { return common_; } | |
| 29 MachineOperatorBuilder* machine() const { return machine_; } | |
| 30 SimplifiedOperatorBuilder* simplified() const { return simplified_; } | |
| 31 | |
| 32 // Initialize graph and builder. | |
| 33 void Begin(int num_parameters); | |
| 34 | |
| 35 void Return(Node* value); | |
| 36 | |
| 37 // Close the graph. | |
| 38 void End(); | |
| 39 | |
| 40 Node* PointerConstant(void* value) { | |
| 41 intptr_t intptr_value = reinterpret_cast<intptr_t>(value); | |
| 42 return kPointerSize == 8 ? NewNode(common()->Int64Constant(intptr_value)) | |
| 43 : Int32Constant(static_cast<int>(intptr_value)); | |
| 44 } | |
| 45 Node* Int32Constant(int32_t value) { | |
| 46 return NewNode(common()->Int32Constant(value)); | |
| 47 } | |
| 48 Node* HeapConstant(Handle<HeapObject> object) { | |
| 49 Unique<HeapObject> val = Unique<HeapObject>::CreateUninitialized(object); | |
| 50 return NewNode(common()->HeapConstant(val)); | |
| 51 } | |
| 52 | |
| 53 Node* BooleanNot(Node* a) { return NewNode(simplified()->BooleanNot(), a); } | |
| 54 | |
| 55 Node* NumberEqual(Node* a, Node* b) { | |
| 56 return NewNode(simplified()->NumberEqual(), a, b); | |
| 57 } | |
| 58 Node* NumberLessThan(Node* a, Node* b) { | |
| 59 return NewNode(simplified()->NumberLessThan(), a, b); | |
| 60 } | |
| 61 Node* NumberLessThanOrEqual(Node* a, Node* b) { | |
| 62 return NewNode(simplified()->NumberLessThanOrEqual(), a, b); | |
| 63 } | |
| 64 Node* NumberAdd(Node* a, Node* b) { | |
| 65 return NewNode(simplified()->NumberAdd(), a, b); | |
| 66 } | |
| 67 Node* NumberSubtract(Node* a, Node* b) { | |
| 68 return NewNode(simplified()->NumberSubtract(), a, b); | |
| 69 } | |
| 70 Node* NumberMultiply(Node* a, Node* b) { | |
| 71 return NewNode(simplified()->NumberMultiply(), a, b); | |
| 72 } | |
| 73 Node* NumberDivide(Node* a, Node* b) { | |
| 74 return NewNode(simplified()->NumberDivide(), a, b); | |
| 75 } | |
| 76 Node* NumberModulus(Node* a, Node* b) { | |
| 77 return NewNode(simplified()->NumberModulus(), a, b); | |
| 78 } | |
| 79 Node* NumberToInt32(Node* a) { | |
| 80 return NewNode(simplified()->NumberToInt32(), a); | |
| 81 } | |
| 82 Node* NumberToUint32(Node* a) { | |
| 83 return NewNode(simplified()->NumberToUint32(), a); | |
| 84 } | |
| 85 | |
| 86 Node* StringEqual(Node* a, Node* b) { | |
| 87 return NewNode(simplified()->StringEqual(), a, b); | |
| 88 } | |
| 89 Node* StringLessThan(Node* a, Node* b) { | |
| 90 return NewNode(simplified()->StringLessThan(), a, b); | |
| 91 } | |
| 92 Node* StringLessThanOrEqual(Node* a, Node* b) { | |
| 93 return NewNode(simplified()->StringLessThanOrEqual(), a, b); | |
| 94 } | |
| 95 | |
| 96 Node* ChangeTaggedToInt32(Node* a) { | |
| 97 return NewNode(simplified()->ChangeTaggedToInt32(), a); | |
| 98 } | |
| 99 Node* ChangeTaggedToUint32(Node* a) { | |
| 100 return NewNode(simplified()->ChangeTaggedToUint32(), a); | |
| 101 } | |
| 102 Node* ChangeTaggedToFloat64(Node* a) { | |
| 103 return NewNode(simplified()->ChangeTaggedToFloat64(), a); | |
| 104 } | |
| 105 Node* ChangeInt32ToTagged(Node* a) { | |
| 106 return NewNode(simplified()->ChangeInt32ToTagged(), a); | |
| 107 } | |
| 108 Node* ChangeUint32ToTagged(Node* a) { | |
| 109 return NewNode(simplified()->ChangeUint32ToTagged(), a); | |
| 110 } | |
| 111 Node* ChangeFloat64ToTagged(Node* a) { | |
| 112 return NewNode(simplified()->ChangeFloat64ToTagged(), a); | |
| 113 } | |
| 114 Node* ChangeBoolToBit(Node* a) { | |
| 115 return NewNode(simplified()->ChangeBoolToBit(), a); | |
| 116 } | |
| 117 Node* ChangeBitToBool(Node* a) { | |
| 118 return NewNode(simplified()->ChangeBitToBool(), a); | |
| 119 } | |
| 120 | |
| 121 Node* LoadField(const FieldAccess& access, Node* object) { | |
| 122 return NewNode(simplified()->LoadField(access), object); | |
| 123 } | |
| 124 Node* StoreField(const FieldAccess& access, Node* object, Node* value) { | |
| 125 return NewNode(simplified()->StoreField(access), object, value); | |
| 126 } | |
| 127 Node* LoadElement(const ElementAccess& access, Node* object, Node* index) { | |
| 128 return NewNode(simplified()->LoadElement(access), object, index); | |
| 129 } | |
| 130 Node* StoreElement(const ElementAccess& access, Node* object, Node* index, | |
| 131 Node* value) { | |
| 132 return NewNode(simplified()->StoreElement(access), object, index, value); | |
| 133 } | |
| 134 | |
| 135 protected: | |
| 136 virtual Node* MakeNode(const Operator* op, int value_input_count, | |
| 137 Node** value_inputs, bool incomplete) final; | |
| 138 | |
| 139 private: | |
| 140 Node* effect_; | |
| 141 Node* return_; | |
| 142 CommonOperatorBuilder* common_; | |
| 143 MachineOperatorBuilder* machine_; | |
| 144 SimplifiedOperatorBuilder* simplified_; | |
| 145 }; | |
| 146 | |
| 147 } // namespace compiler | |
| 148 } // namespace internal | |
| 149 } // namespace v8 | |
| 150 | |
| 151 #endif // V8_CCTEST_COMPILER_SIMPLIFIED_GRAPH_BUILDER_H_ | |
| OLD | NEW |