| Index: src/compiler/common-operator.cc
|
| diff --git a/src/compiler/common-operator.cc b/src/compiler/common-operator.cc
|
| index bacaae980f918eddf24abbca60e2f16657a6a499..ca22bcbcf037d92ebdd1bef38b85c86c300eebcf 100644
|
| --- a/src/compiler/common-operator.cc
|
| +++ b/src/compiler/common-operator.cc
|
| @@ -123,12 +123,17 @@ std::ostream& operator<<(std::ostream& os, ParameterInfo const& i) {
|
| V(IfDefault, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
|
| V(Throw, Operator::kKontrol, 1, 1, 1, 0, 0, 1) \
|
| V(Deoptimize, Operator::kNoThrow, 1, 1, 1, 0, 0, 1) \
|
| - V(Return, Operator::kNoThrow, 1, 1, 1, 0, 0, 1) \
|
| V(Terminate, Operator::kKontrol, 0, 1, 1, 0, 0, 1) \
|
| V(OsrNormalEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \
|
| V(OsrLoopEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1)
|
|
|
|
|
| +#define CACHED_RETURN_LIST(V) \
|
| + V(1) \
|
| + V(2) \
|
| + V(3)
|
| +
|
| +
|
| #define CACHED_END_LIST(V) \
|
| V(1) \
|
| V(2) \
|
| @@ -249,6 +254,19 @@ struct CommonOperatorGlobalCache final {
|
| CACHED_END_LIST(CACHED_END)
|
| #undef CACHED_END
|
|
|
| + template <size_t kInputCount>
|
| + struct ReturnOperator final : public Operator {
|
| + ReturnOperator()
|
| + : Operator( // --
|
| + IrOpcode::kReturn, Operator::kNoThrow, // opcode
|
| + "Return", // name
|
| + kInputCount, 1, 1, 0, 0, 1) {} // counts
|
| + };
|
| +#define CACHED_RETURN(input_count) \
|
| + ReturnOperator<input_count> kReturn##input_count##Operator;
|
| + CACHED_RETURN_LIST(CACHED_RETURN)
|
| +#undef CACHED_RETURN
|
| +
|
| template <BranchHint kBranchHint>
|
| struct BranchOperator final : public Operator1<BranchHint> {
|
| BranchOperator()
|
| @@ -397,6 +415,24 @@ const Operator* CommonOperatorBuilder::End(size_t control_input_count) {
|
| }
|
|
|
|
|
| +const Operator* CommonOperatorBuilder::Return(int value_input_count) {
|
| + switch (value_input_count) {
|
| +#define CACHED_RETURN(input_count) \
|
| + case input_count: \
|
| + return &cache_.kReturn##input_count##Operator;
|
| + CACHED_RETURN_LIST(CACHED_RETURN)
|
| +#undef CACHED_RETURN
|
| + default:
|
| + break;
|
| + }
|
| + // Uncached.
|
| + return new (zone()) Operator( //--
|
| + IrOpcode::kReturn, Operator::kNoThrow, // opcode
|
| + "Return", // name
|
| + value_input_count, 1, 1, 0, 0, 1); // counts
|
| +}
|
| +
|
| +
|
| const Operator* CommonOperatorBuilder::Branch(BranchHint hint) {
|
| switch (hint) {
|
| case BranchHint::kNone:
|
|
|