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 #include "src/compiler/common-operator.h" | 5 #include "src/compiler/common-operator.h" |
6 | 6 |
7 #include "src/assembler.h" | 7 #include "src/assembler.h" |
8 #include "src/base/lazy-instance.h" | 8 #include "src/base/lazy-instance.h" |
9 #include "src/compiler/linkage.h" | 9 #include "src/compiler/linkage.h" |
10 #include "src/compiler/opcodes.h" | 10 #include "src/compiler/opcodes.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 << info.state_combine(); | 102 << info.state_combine(); |
103 } | 103 } |
104 | 104 |
105 | 105 |
106 size_t ProjectionIndexOf(const Operator* const op) { | 106 size_t ProjectionIndexOf(const Operator* const op) { |
107 DCHECK_EQ(IrOpcode::kProjection, op->opcode()); | 107 DCHECK_EQ(IrOpcode::kProjection, op->opcode()); |
108 return OpParameter<size_t>(op); | 108 return OpParameter<size_t>(op); |
109 } | 109 } |
110 | 110 |
111 | 111 |
| 112 int ParameterIndexOf(const Operator* const op) { |
| 113 DCHECK_EQ(IrOpcode::kParameter, op->opcode()); |
| 114 return OpParameter<ParameterInfo>(op).index(); |
| 115 } |
| 116 |
| 117 |
| 118 const ParameterInfo& ParameterInfoOf(const Operator* const op) { |
| 119 DCHECK_EQ(IrOpcode::kParameter, op->opcode()); |
| 120 return OpParameter<ParameterInfo>(op); |
| 121 } |
| 122 |
| 123 |
| 124 bool operator==(ParameterInfo const& lhs, ParameterInfo const& rhs) { |
| 125 return lhs.index() == rhs.index(); |
| 126 } |
| 127 |
| 128 |
| 129 bool operator!=(ParameterInfo const& lhs, ParameterInfo const& rhs) { |
| 130 return !(lhs == rhs); |
| 131 } |
| 132 |
| 133 |
| 134 size_t hash_value(ParameterInfo const& p) { return p.index(); } |
| 135 |
| 136 |
| 137 std::ostream& operator<<(std::ostream& os, ParameterInfo const& i) { |
| 138 if (i.debug_name()) os << i.debug_name() << '#'; |
| 139 os << i.index(); |
| 140 return os; |
| 141 } |
| 142 |
| 143 |
112 #define CACHED_OP_LIST(V) \ | 144 #define CACHED_OP_LIST(V) \ |
113 V(Always, Operator::kPure, 0, 0, 0, 1, 0, 0) \ | 145 V(Always, Operator::kPure, 0, 0, 0, 1, 0, 0) \ |
114 V(Dead, Operator::kFoldable, 0, 0, 0, 0, 0, 1) \ | 146 V(Dead, Operator::kFoldable, 0, 0, 0, 0, 0, 1) \ |
115 V(End, Operator::kKontrol, 0, 0, 1, 0, 0, 0) \ | 147 V(End, Operator::kKontrol, 0, 0, 1, 0, 0, 0) \ |
116 V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ | 148 V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ |
117 V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ | 149 V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ |
118 V(IfSuccess, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ | 150 V(IfSuccess, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ |
119 V(IfException, Operator::kKontrol, 0, 0, 1, 1, 0, 1) \ | 151 V(IfException, Operator::kKontrol, 0, 0, 1, 1, 0, 1) \ |
120 V(IfDefault, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ | 152 V(IfDefault, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ |
121 V(Throw, Operator::kKontrol, 1, 1, 1, 0, 0, 1) \ | 153 V(Throw, Operator::kKontrol, 1, 1, 1, 0, 0, 1) \ |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 "Phi", // name | 301 "Phi", // name |
270 kInputCount, 0, 1, 1, 0, 0, // counts | 302 kInputCount, 0, 1, 1, 0, 0, // counts |
271 kType) {} // parameter | 303 kType) {} // parameter |
272 }; | 304 }; |
273 #define CACHED_PHI(type, input_count) \ | 305 #define CACHED_PHI(type, input_count) \ |
274 PhiOperator<type, input_count> kPhi##type##input_count##Operator; | 306 PhiOperator<type, input_count> kPhi##type##input_count##Operator; |
275 CACHED_PHI_LIST(CACHED_PHI) | 307 CACHED_PHI_LIST(CACHED_PHI) |
276 #undef CACHED_PHI | 308 #undef CACHED_PHI |
277 | 309 |
278 template <int kIndex> | 310 template <int kIndex> |
279 struct ParameterOperator final : public Operator1<int> { | 311 struct ParameterOperator final : public Operator1<ParameterInfo> { |
280 ParameterOperator() | 312 ParameterOperator() |
281 : Operator1<int>( // -- | 313 : Operator1<ParameterInfo>( // -- |
282 IrOpcode::kParameter, Operator::kPure, // opcode | 314 IrOpcode::kParameter, Operator::kPure, // opcode |
283 "Parameter", // name | 315 "Parameter", // name |
284 1, 0, 0, 1, 0, 0, // counts, | 316 1, 0, 0, 1, 0, 0, // counts, |
285 kIndex) {} // parameter | 317 ParameterInfo(kIndex, nullptr)) {} // parameter and name |
286 }; | 318 }; |
287 #define CACHED_PARAMETER(index) \ | 319 #define CACHED_PARAMETER(index) \ |
288 ParameterOperator<index> kParameter##index##Operator; | 320 ParameterOperator<index> kParameter##index##Operator; |
289 CACHED_PARAMETER_LIST(CACHED_PARAMETER) | 321 CACHED_PARAMETER_LIST(CACHED_PARAMETER) |
290 #undef CACHED_PARAMETER | 322 #undef CACHED_PARAMETER |
291 | 323 |
292 template <size_t kIndex> | 324 template <size_t kIndex> |
293 struct ProjectionOperator final : public Operator1<size_t> { | 325 struct ProjectionOperator final : public Operator1<size_t> { |
294 ProjectionOperator() | 326 ProjectionOperator() |
295 : Operator1<size_t>( // -- | 327 : Operator1<size_t>( // -- |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 break; | 441 break; |
410 } | 442 } |
411 // Uncached. | 443 // Uncached. |
412 return new (zone()) Operator( // -- | 444 return new (zone()) Operator( // -- |
413 IrOpcode::kMerge, Operator::kKontrol, // opcode | 445 IrOpcode::kMerge, Operator::kKontrol, // opcode |
414 "Merge", // name | 446 "Merge", // name |
415 0, 0, control_input_count, 0, 0, 1); // counts | 447 0, 0, control_input_count, 0, 0, 1); // counts |
416 } | 448 } |
417 | 449 |
418 | 450 |
419 const Operator* CommonOperatorBuilder::Parameter(int index) { | 451 const Operator* CommonOperatorBuilder::Parameter(int index, |
420 switch (index) { | 452 const char* debug_name) { |
| 453 if (!debug_name) { |
| 454 switch (index) { |
421 #define CACHED_PARAMETER(index) \ | 455 #define CACHED_PARAMETER(index) \ |
422 case index: \ | 456 case index: \ |
423 return &cache_.kParameter##index##Operator; | 457 return &cache_.kParameter##index##Operator; |
424 CACHED_PARAMETER_LIST(CACHED_PARAMETER) | 458 CACHED_PARAMETER_LIST(CACHED_PARAMETER) |
425 #undef CACHED_PARAMETER | 459 #undef CACHED_PARAMETER |
426 default: | 460 default: |
427 break; | 461 break; |
| 462 } |
428 } | 463 } |
429 // Uncached. | 464 // Uncached. |
430 return new (zone()) Operator1<int>( // -- | 465 return new (zone()) Operator1<ParameterInfo>( // -- |
431 IrOpcode::kParameter, Operator::kPure, // opcode | 466 IrOpcode::kParameter, Operator::kPure, // opcode |
432 "Parameter", // name | 467 "Parameter", // name |
433 1, 0, 0, 1, 0, 0, // counts | 468 1, 0, 0, 1, 0, 0, // counts |
434 index); // parameter | 469 ParameterInfo(index, debug_name)); // parameter info |
435 } | 470 } |
436 | 471 |
437 | 472 |
438 const Operator* CommonOperatorBuilder::OsrValue(int index) { | 473 const Operator* CommonOperatorBuilder::OsrValue(int index) { |
439 return new (zone()) Operator1<int>( // -- | 474 return new (zone()) Operator1<int>( // -- |
440 IrOpcode::kOsrValue, Operator::kNoProperties, // opcode | 475 IrOpcode::kOsrValue, Operator::kNoProperties, // opcode |
441 "OsrValue", // name | 476 "OsrValue", // name |
442 0, 0, 1, 1, 0, 0, // counts | 477 0, 0, 1, 1, 0, 0, // counts |
443 index); // parameter | 478 index); // parameter |
444 } | 479 } |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
678 } else { | 713 } else { |
679 UNREACHABLE(); | 714 UNREACHABLE(); |
680 return nullptr; | 715 return nullptr; |
681 } | 716 } |
682 } | 717 } |
683 | 718 |
684 | 719 |
685 } // namespace compiler | 720 } // namespace compiler |
686 } // namespace internal | 721 } // namespace internal |
687 } // namespace v8 | 722 } // namespace v8 |
OLD | NEW |