Index: src/compiler/common-operator.cc |
diff --git a/src/compiler/common-operator.cc b/src/compiler/common-operator.cc |
index b0af2fd002598a7c1931a90aae6656a4a2ec61c8..58f62c88ee9b2479061ab2c020454e9e9672b864 100644 |
--- a/src/compiler/common-operator.cc |
+++ b/src/compiler/common-operator.cc |
@@ -124,6 +124,19 @@ struct CommonOperatorGlobalCache FINAL { |
Name##Operator k##Name##Operator; |
CACHED_OP_LIST(CACHED) |
#undef CACHED |
+ |
+ template <BranchHint kBranchHint> |
+ struct BranchOperator FINAL : public Operator1<BranchHint> { |
+ BranchOperator() |
+ : Operator1<BranchHint>( // -- |
+ IrOpcode::kBranch, Operator::kFoldable, // opcode |
+ "Branch", // name |
+ 1, 0, 1, 0, 0, 2, // counts |
+ kBranchHint) {} // parameter |
+ }; |
+ BranchOperator<BranchHint::kNone> kBranchNoneOperator; |
+ BranchOperator<BranchHint::kTrue> kBranchTrueOperator; |
+ BranchOperator<BranchHint::kFalse> kBranchFalseOperator; |
}; |
@@ -145,8 +158,16 @@ CACHED_OP_LIST(CACHED) |
const Operator* CommonOperatorBuilder::Branch(BranchHint hint) { |
- return new (zone()) Operator1<BranchHint>( |
- IrOpcode::kBranch, Operator::kFoldable, "Branch", 1, 0, 1, 0, 0, 2, hint); |
+ switch (hint) { |
+ case BranchHint::kNone: |
+ return &cache_.kBranchNoneOperator; |
+ case BranchHint::kTrue: |
+ return &cache_.kBranchTrueOperator; |
+ case BranchHint::kFalse: |
+ return &cache_.kBranchFalseOperator; |
+ } |
+ UNREACHABLE(); |
+ return nullptr; |
} |