| 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/js-operator.h" | 5 #include "src/compiler/js-operator.h" |
| 6 #include "src/compiler/opcodes.h" | 6 #include "src/compiler/opcodes.h" |
| 7 #include "src/compiler/operator.h" | 7 #include "src/compiler/operator.h" |
| 8 #include "src/compiler/operator-properties.h" | 8 #include "src/compiler/operator-properties.h" |
| 9 #include "test/unittests/test-utils.h" | 9 #include "test/unittests/test-utils.h" |
| 10 | 10 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 int value_input_count; | 29 int value_input_count; |
| 30 int frame_state_input_count; | 30 int frame_state_input_count; |
| 31 int effect_input_count; | 31 int effect_input_count; |
| 32 int control_input_count; | 32 int control_input_count; |
| 33 int value_output_count; | 33 int value_output_count; |
| 34 int effect_output_count; | 34 int effect_output_count; |
| 35 int control_output_count; | 35 int control_output_count; |
| 36 }; | 36 }; |
| 37 | 37 |
| 38 | 38 |
| 39 const SharedOperator<no_params_t> kSharedOperators[] = { | |
| 40 #define SHARED(Name, properties, value_input_count, frame_state_input_count, \ | 39 #define SHARED(Name, properties, value_input_count, frame_state_input_count, \ |
| 41 effect_input_count, control_input_count, value_output_count, \ | 40 effect_input_count, control_input_count, value_output_count, \ |
| 42 effect_output_count, control_output_count) \ | 41 effect_output_count, control_output_count) \ |
| 43 { \ | 42 { \ |
| 44 &JSOperatorBuilder::Name, IrOpcode::kJS##Name, properties, \ | 43 &JSOperatorBuilder::Name, IrOpcode::kJS##Name, properties, \ |
| 45 value_input_count, frame_state_input_count, effect_input_count, \ | 44 value_input_count, frame_state_input_count, effect_input_count, \ |
| 46 control_input_count, value_output_count, effect_output_count, \ | 45 control_input_count, value_output_count, effect_output_count, \ |
| 47 control_output_count \ | 46 control_output_count \ |
| 48 } | 47 } |
| 48 |
| 49 |
| 50 const SharedOperator<no_params_t> kSharedOperators[] = { |
| 49 SHARED(Equal, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 51 SHARED(Equal, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 50 SHARED(NotEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 52 SHARED(NotEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 51 SHARED(StrictEqual, Operator::kPure, 2, 0, 0, 0, 1, 0, 0), | 53 SHARED(StrictEqual, Operator::kPure, 2, 0, 0, 0, 1, 0, 0), |
| 52 SHARED(StrictNotEqual, Operator::kPure, 2, 0, 0, 0, 1, 0, 0), | 54 SHARED(StrictNotEqual, Operator::kPure, 2, 0, 0, 0, 1, 0, 0), |
| 53 SHARED(UnaryNot, Operator::kPure, 1, 0, 0, 0, 1, 0, 0), | 55 SHARED(UnaryNot, Operator::kPure, 1, 0, 0, 0, 1, 0, 0), |
| 54 SHARED(ToBoolean, Operator::kPure, 1, 0, 0, 0, 1, 0, 0), | 56 SHARED(ToBoolean, Operator::kPure, 1, 0, 0, 0, 1, 0, 0), |
| 55 SHARED(ToNumber, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2), | 57 SHARED(ToNumber, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2), |
| 56 SHARED(ToString, Operator::kNoProperties, 1, 0, 1, 1, 1, 1, 2), | 58 SHARED(ToString, Operator::kNoProperties, 1, 0, 1, 1, 1, 1, 2), |
| 57 SHARED(ToName, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2), | 59 SHARED(ToName, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2), |
| 58 SHARED(ToObject, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2), | 60 SHARED(ToObject, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2), |
| 59 SHARED(Yield, Operator::kNoProperties, 1, 0, 1, 1, 1, 1, 2), | 61 SHARED(Yield, Operator::kNoProperties, 1, 0, 1, 1, 1, 1, 2), |
| 60 SHARED(Create, Operator::kEliminatable, 0, 0, 1, 0, 1, 1, 0), | 62 SHARED(Create, Operator::kEliminatable, 0, 0, 1, 0, 1, 1, 0), |
| 61 SHARED(HasProperty, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 63 SHARED(HasProperty, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 62 SHARED(TypeOf, Operator::kPure, 1, 0, 0, 0, 1, 0, 0), | 64 SHARED(TypeOf, Operator::kPure, 1, 0, 0, 0, 1, 0, 0), |
| 63 SHARED(InstanceOf, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 65 SHARED(InstanceOf, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 64 SHARED(CreateFunctionContext, Operator::kNoProperties, 1, 0, 1, 1, 1, 1, 2), | 66 SHARED(CreateFunctionContext, Operator::kNoProperties, 1, 0, 1, 1, 1, 1, 2), |
| 65 SHARED(CreateWithContext, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 67 SHARED(CreateWithContext, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 66 SHARED(CreateBlockContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1, 2), | 68 SHARED(CreateBlockContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1, 2), |
| 67 SHARED(CreateModuleContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1, 2), | 69 SHARED(CreateModuleContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1, 2), |
| 68 SHARED(CreateScriptContext, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2) | 70 SHARED(CreateScriptContext, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2) |
| 69 #undef SHARED | |
| 70 }; | 71 }; |
| 71 | 72 |
| 72 | 73 |
| 73 const SharedOperator<with_language_mode_t> | 74 const SharedOperator<with_language_mode_t> |
| 74 kSharedOperatorsWithlanguageMode[] = { | 75 kSharedOperatorsWithlanguageMode[] = { |
| 75 #define SHARED(Name, properties, value_input_count, frame_state_input_count, \ | |
| 76 effect_input_count, control_input_count, value_output_count, \ | |
| 77 effect_output_count, control_output_count) \ | |
| 78 { \ | |
| 79 &JSOperatorBuilder::Name, IrOpcode::kJS##Name, properties, \ | |
| 80 value_input_count, frame_state_input_count, effect_input_count, \ | |
| 81 control_input_count, value_output_count, effect_output_count, \ | |
| 82 control_output_count \ | |
| 83 } | |
| 84 SHARED(LessThan, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 76 SHARED(LessThan, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 85 SHARED(GreaterThan, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 77 SHARED(GreaterThan, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 86 SHARED(LessThanOrEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 78 SHARED(LessThanOrEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 87 SHARED(GreaterThanOrEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), | 79 SHARED(GreaterThanOrEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2), |
| 88 SHARED(BitwiseOr, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 80 SHARED(BitwiseOr, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 89 SHARED(BitwiseXor, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 81 SHARED(BitwiseXor, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 90 SHARED(BitwiseAnd, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 82 SHARED(BitwiseAnd, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 91 SHARED(ShiftLeft, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 83 SHARED(ShiftLeft, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 92 SHARED(ShiftRight, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 84 SHARED(ShiftRight, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 93 SHARED(ShiftRightLogical, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 85 SHARED(ShiftRightLogical, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 94 SHARED(Add, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 86 SHARED(Add, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 95 SHARED(Subtract, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 87 SHARED(Subtract, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 96 SHARED(Multiply, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 88 SHARED(Multiply, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 97 SHARED(Divide, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 89 SHARED(Divide, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 98 SHARED(Modulus, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), | 90 SHARED(Modulus, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2), |
| 91 }; |
| 99 #undef SHARED | 92 #undef SHARED |
| 100 }; | |
| 101 | 93 |
| 102 | 94 |
| 103 template <typename T> | 95 template <typename T> |
| 104 void testNumberOfInputsAndOutputs(const SharedOperator<T>& sop, | 96 void testNumberOfInputsAndOutputs(const SharedOperator<T>& sop, |
| 105 const Operator* op) { | 97 const Operator* op) { |
| 106 const int context_input_count = 1; | 98 const int context_input_count = 1; |
| 107 EXPECT_EQ(sop.value_input_count, op->ValueInputCount()); | 99 EXPECT_EQ(sop.value_input_count, op->ValueInputCount()); |
| 108 EXPECT_EQ(context_input_count, OperatorProperties::GetContextInputCount(op)); | 100 EXPECT_EQ(context_input_count, OperatorProperties::GetContextInputCount(op)); |
| 109 EXPECT_EQ(sop.frame_state_input_count, | 101 EXPECT_EQ(sop.frame_state_input_count, |
| 110 OperatorProperties::GetFrameStateInputCount(op)); | 102 OperatorProperties::GetFrameStateInputCount(op)); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 EXPECT_EQ(Operator::kNoProperties, op->properties()); | 289 EXPECT_EQ(Operator::kNoProperties, op->properties()); |
| 298 } | 290 } |
| 299 | 291 |
| 300 | 292 |
| 301 INSTANTIATE_TEST_CASE_P(JSOperatorTest, JSStorePropertyOperatorTest, | 293 INSTANTIATE_TEST_CASE_P(JSOperatorTest, JSStorePropertyOperatorTest, |
| 302 ::testing::Values(SLOPPY, STRICT)); | 294 ::testing::Values(SLOPPY, STRICT)); |
| 303 | 295 |
| 304 } // namespace compiler | 296 } // namespace compiler |
| 305 } // namespace internal | 297 } // namespace internal |
| 306 } // namespace v8 | 298 } // namespace v8 |
| OLD | NEW |