| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_COMPILER_REPRESENTATION_CHANGE_H_ | 5 #ifndef V8_COMPILER_REPRESENTATION_CHANGE_H_ |
| 6 #define V8_COMPILER_REPRESENTATION_CHANGE_H_ | 6 #define V8_COMPILER_REPRESENTATION_CHANGE_H_ |
| 7 | 7 |
| 8 #include "src/compiler/js-graph.h" | 8 #include "src/compiler/js-graph.h" |
| 9 #include "src/compiler/machine-operator.h" | 9 #include "src/compiler/machine-operator.h" |
| 10 #include "src/compiler/node-properties-inl.h" | 10 #include "src/compiler/node-properties-inl.h" |
| 11 #include "src/compiler/simplified-operator.h" | 11 #include "src/compiler/simplified-operator.h" |
| 12 | 12 |
| 13 namespace v8 { | 13 namespace v8 { |
| 14 namespace internal { | 14 namespace internal { |
| 15 namespace compiler { | 15 namespace compiler { |
| 16 | 16 |
| 17 // The types and representations tracked during representation inference | 17 // The types and representations tracked during representation inference |
| 18 // and change insertion. | 18 // and change insertion. |
| 19 // TODO(titzer): First, merge MachineRepresentation and RepType. | 19 // TODO(titzer): First, merge MachineType and RepType. |
| 20 // TODO(titzer): Second, Use the real type system instead of RepType. | 20 // TODO(titzer): Second, Use the real type system instead of RepType. |
| 21 enum RepType { | 21 enum RepType { |
| 22 // Representations. | 22 // Representations. |
| 23 rBit = 1 << 0, | 23 rBit = 1 << 0, |
| 24 rWord32 = 1 << 1, | 24 rWord32 = 1 << 1, |
| 25 rWord64 = 1 << 2, | 25 rWord64 = 1 << 2, |
| 26 rFloat64 = 1 << 3, | 26 rFloat64 = 1 << 3, |
| 27 rTagged = 1 << 4, | 27 rTagged = 1 << 4, |
| 28 | 28 |
| 29 // Types. | 29 // Types. |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 } | 258 } |
| 259 | 259 |
| 260 Node* GetWord64RepresentationFor(Node* node, RepTypeUnion output_type) { | 260 Node* GetWord64RepresentationFor(Node* node, RepTypeUnion output_type) { |
| 261 if (output_type & rBit) { | 261 if (output_type & rBit) { |
| 262 return node; // Sloppy comparison -> word64 | 262 return node; // Sloppy comparison -> word64 |
| 263 } | 263 } |
| 264 // Can't really convert Word64 to anything else. Purported to be internal. | 264 // Can't really convert Word64 to anything else. Purported to be internal. |
| 265 return TypeError(node, output_type, rWord64); | 265 return TypeError(node, output_type, rWord64); |
| 266 } | 266 } |
| 267 | 267 |
| 268 static RepType TypeForMachineRepresentation(MachineRepresentation rep) { | 268 static RepType TypeForMachineType(MachineType rep) { |
| 269 // TODO(titzer): merge MachineRepresentation and RepType. | 269 // TODO(titzer): merge MachineType and RepType. |
| 270 switch (rep) { | 270 switch (rep) { |
| 271 case kMachineWord8: | 271 case kMachineWord8: |
| 272 return rWord32; | 272 return rWord32; |
| 273 case kMachineWord16: | 273 case kMachineWord16: |
| 274 return rWord32; | 274 return rWord32; |
| 275 case kMachineWord32: | 275 case kMachineWord32: |
| 276 return rWord32; | 276 return rWord32; |
| 277 case kMachineWord64: | 277 case kMachineWord64: |
| 278 return rWord64; | 278 return rWord64; |
| 279 case kMachineFloat64: | 279 case kMachineFloat64: |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 case IrOpcode::kNumberLessThanOrEqual: | 341 case IrOpcode::kNumberLessThanOrEqual: |
| 342 return machine()->Float64LessThanOrEqual(); | 342 return machine()->Float64LessThanOrEqual(); |
| 343 default: | 343 default: |
| 344 UNREACHABLE(); | 344 UNREACHABLE(); |
| 345 return NULL; | 345 return NULL; |
| 346 } | 346 } |
| 347 } | 347 } |
| 348 | 348 |
| 349 RepType TypeForField(const FieldAccess& access) { | 349 RepType TypeForField(const FieldAccess& access) { |
| 350 RepType tElement = static_cast<RepType>(0); // TODO(titzer) | 350 RepType tElement = static_cast<RepType>(0); // TODO(titzer) |
| 351 RepType rElement = TypeForMachineRepresentation(access.representation); | 351 RepType rElement = TypeForMachineType(access.representation); |
| 352 return static_cast<RepType>(tElement | rElement); | 352 return static_cast<RepType>(tElement | rElement); |
| 353 } | 353 } |
| 354 | 354 |
| 355 RepType TypeForElement(const ElementAccess& access) { | 355 RepType TypeForElement(const ElementAccess& access) { |
| 356 RepType tElement = static_cast<RepType>(0); // TODO(titzer) | 356 RepType tElement = static_cast<RepType>(0); // TODO(titzer) |
| 357 RepType rElement = TypeForMachineRepresentation(access.representation); | 357 RepType rElement = TypeForMachineType(access.representation); |
| 358 return static_cast<RepType>(tElement | rElement); | 358 return static_cast<RepType>(tElement | rElement); |
| 359 } | 359 } |
| 360 | 360 |
| 361 RepType TypeForBasePointer(const FieldAccess& access) { | 361 RepType TypeForBasePointer(const FieldAccess& access) { |
| 362 if (access.tag() != 0) return static_cast<RepType>(tAny | rTagged); | 362 if (access.tag() != 0) return static_cast<RepType>(tAny | rTagged); |
| 363 return kPointerSize == 8 ? rWord64 : rWord32; | 363 return kPointerSize == 8 ? rWord64 : rWord32; |
| 364 } | 364 } |
| 365 | 365 |
| 366 RepType TypeForBasePointer(const ElementAccess& access) { | 366 RepType TypeForBasePointer(const ElementAccess& access) { |
| 367 if (access.tag() != 0) return static_cast<RepType>(tAny | rTagged); | 367 if (access.tag() != 0) return static_cast<RepType>(tAny | rTagged); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 JSGraph* jsgraph() { return jsgraph_; } | 407 JSGraph* jsgraph() { return jsgraph_; } |
| 408 Isolate* isolate() { return isolate_; } | 408 Isolate* isolate() { return isolate_; } |
| 409 SimplifiedOperatorBuilder* simplified() { return simplified_; } | 409 SimplifiedOperatorBuilder* simplified() { return simplified_; } |
| 410 MachineOperatorBuilder* machine() { return machine_; } | 410 MachineOperatorBuilder* machine() { return machine_; } |
| 411 }; | 411 }; |
| 412 } | 412 } |
| 413 } | 413 } |
| 414 } // namespace v8::internal::compiler | 414 } // namespace v8::internal::compiler |
| 415 | 415 |
| 416 #endif // V8_COMPILER_REPRESENTATION_CHANGE_H_ | 416 #endif // V8_COMPILER_REPRESENTATION_CHANGE_H_ |
| OLD | NEW |