| 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 18 matching lines...) Expand all  Loading... | 
| 29   return os; | 29   return os; | 
| 30 } | 30 } | 
| 31 | 31 | 
| 32 | 32 | 
| 33 BranchHint BranchHintOf(const Operator* const op) { | 33 BranchHint BranchHintOf(const Operator* const op) { | 
| 34   DCHECK_EQ(IrOpcode::kBranch, op->opcode()); | 34   DCHECK_EQ(IrOpcode::kBranch, op->opcode()); | 
| 35   return OpParameter<BranchHint>(op); | 35   return OpParameter<BranchHint>(op); | 
| 36 } | 36 } | 
| 37 | 37 | 
| 38 | 38 | 
| 39 size_t CaseIndexOf(const Operator* const op) { |  | 
| 40   DCHECK_EQ(IrOpcode::kCase, op->opcode()); |  | 
| 41   return OpParameter<size_t>(op); |  | 
| 42 } |  | 
| 43 |  | 
| 44 |  | 
| 45 bool operator==(SelectParameters const& lhs, SelectParameters const& rhs) { | 39 bool operator==(SelectParameters const& lhs, SelectParameters const& rhs) { | 
| 46   return lhs.type() == rhs.type() && lhs.hint() == rhs.hint(); | 40   return lhs.type() == rhs.type() && lhs.hint() == rhs.hint(); | 
| 47 } | 41 } | 
| 48 | 42 | 
| 49 | 43 | 
| 50 bool operator!=(SelectParameters const& lhs, SelectParameters const& rhs) { | 44 bool operator!=(SelectParameters const& lhs, SelectParameters const& rhs) { | 
| 51   return !(lhs == rhs); | 45   return !(lhs == rhs); | 
| 52 } | 46 } | 
| 53 | 47 | 
| 54 | 48 | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 114   return OpParameter<size_t>(op); | 108   return OpParameter<size_t>(op); | 
| 115 } | 109 } | 
| 116 | 110 | 
| 117 | 111 | 
| 118 #define CACHED_OP_LIST(V)                                  \ | 112 #define CACHED_OP_LIST(V)                                  \ | 
| 119   V(Always, Operator::kPure, 0, 0, 0, 1, 0, 0)             \ | 113   V(Always, Operator::kPure, 0, 0, 0, 1, 0, 0)             \ | 
| 120   V(Dead, Operator::kFoldable, 0, 0, 0, 0, 0, 1)           \ | 114   V(Dead, Operator::kFoldable, 0, 0, 0, 0, 0, 1)           \ | 
| 121   V(End, Operator::kKontrol, 0, 0, 1, 0, 0, 0)             \ | 115   V(End, Operator::kKontrol, 0, 0, 1, 0, 0, 0)             \ | 
| 122   V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1)          \ | 116   V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1)          \ | 
| 123   V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1)         \ | 117   V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1)         \ | 
|  | 118   V(IfDefault, Operator::kKontrol, 0, 0, 1, 0, 0, 1)       \ | 
| 124   V(Throw, Operator::kFoldable, 1, 1, 1, 0, 0, 1)          \ | 119   V(Throw, Operator::kFoldable, 1, 1, 1, 0, 0, 1)          \ | 
| 125   V(Return, Operator::kNoThrow, 1, 1, 1, 0, 0, 1)          \ | 120   V(Return, Operator::kNoThrow, 1, 1, 1, 0, 0, 1)          \ | 
| 126   V(OsrNormalEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \ | 121   V(OsrNormalEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \ | 
| 127   V(OsrLoopEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) | 122   V(OsrLoopEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) | 
| 128 | 123 | 
| 129 | 124 | 
| 130 #define CACHED_LOOP_LIST(V) \ | 125 #define CACHED_LOOP_LIST(V) \ | 
| 131   V(1)                      \ | 126   V(1)                      \ | 
| 132   V(2) | 127   V(2) | 
| 133 | 128 | 
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 249       return &cache_.kBranchTrueOperator; | 244       return &cache_.kBranchTrueOperator; | 
| 250     case BranchHint::kFalse: | 245     case BranchHint::kFalse: | 
| 251       return &cache_.kBranchFalseOperator; | 246       return &cache_.kBranchFalseOperator; | 
| 252   } | 247   } | 
| 253   UNREACHABLE(); | 248   UNREACHABLE(); | 
| 254   return nullptr; | 249   return nullptr; | 
| 255 } | 250 } | 
| 256 | 251 | 
| 257 | 252 | 
| 258 const Operator* CommonOperatorBuilder::Switch(size_t control_output_count) { | 253 const Operator* CommonOperatorBuilder::Switch(size_t control_output_count) { | 
| 259   DCHECK_GE(control_output_count, 2u);        // Disallow trivial switches. | 254   DCHECK_GE(control_output_count, 3u);        // Disallow trivial switches. | 
| 260   return new (zone()) Operator(               // -- | 255   return new (zone()) Operator(               // -- | 
| 261       IrOpcode::kSwitch, Operator::kKontrol,  // opcode | 256       IrOpcode::kSwitch, Operator::kKontrol,  // opcode | 
| 262       "Switch",                               // name | 257       "Switch",                               // name | 
| 263       1, 0, 1, 0, 0, control_output_count);   // counts | 258       1, 0, 1, 0, 0, control_output_count);   // counts | 
| 264 } | 259 } | 
| 265 | 260 | 
| 266 | 261 | 
| 267 const Operator* CommonOperatorBuilder::Case(size_t index) { | 262 const Operator* CommonOperatorBuilder::IfValue(int32_t index) { | 
| 268   return new (zone()) Operator1<size_t>(    // -- | 263   return new (zone()) Operator1<int32_t>(      // -- | 
| 269       IrOpcode::kCase, Operator::kKontrol,  // opcode | 264       IrOpcode::kIfValue, Operator::kKontrol,  // opcode | 
| 270       "Case",                               // name | 265       "IfValue",                               // name | 
| 271       0, 0, 1, 0, 0, 1,                     // counts | 266       0, 0, 1, 0, 0, 1,                        // counts | 
| 272       index);                               // parameter | 267       index);                                  // parameter | 
| 273 } | 268 } | 
| 274 | 269 | 
| 275 | 270 | 
| 276 const Operator* CommonOperatorBuilder::Start(int num_formal_parameters) { | 271 const Operator* CommonOperatorBuilder::Start(int num_formal_parameters) { | 
| 277   // Outputs are formal parameters, plus context, receiver, and JSFunction. | 272   // Outputs are formal parameters, plus context, receiver, and JSFunction. | 
| 278   const int value_output_count = num_formal_parameters + 3; | 273   const int value_output_count = num_formal_parameters + 3; | 
| 279   return new (zone()) Operator(               // -- | 274   return new (zone()) Operator(               // -- | 
| 280       IrOpcode::kStart, Operator::kFoldable,  // opcode | 275       IrOpcode::kStart, Operator::kFoldable,  // opcode | 
| 281       "Start",                                // name | 276       "Start",                                // name | 
| 282       0, 0, 0, value_output_count, 1, 1);     // counts | 277       0, 0, 0, value_output_count, 1, 1);     // counts | 
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 533   } else { | 528   } else { | 
| 534     UNREACHABLE(); | 529     UNREACHABLE(); | 
| 535     return nullptr; | 530     return nullptr; | 
| 536   } | 531   } | 
| 537 } | 532 } | 
| 538 | 533 | 
| 539 | 534 | 
| 540 }  // namespace compiler | 535 }  // namespace compiler | 
| 541 }  // namespace internal | 536 }  // namespace internal | 
| 542 }  // namespace v8 | 537 }  // namespace v8 | 
| OLD | NEW | 
|---|