Upgrade V8 to version 4.9.385.28
https://chromium.googlesource.com/v8/v8/+/4.9.385.28
FPIIM-449
Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/test/unittests/compiler/js-operator-unittest.cc b/test/unittests/compiler/js-operator-unittest.cc
index 7aa0c64..e0db771 100644
--- a/test/unittests/compiler/js-operator-unittest.cc
+++ b/test/unittests/compiler/js-operator-unittest.cc
@@ -12,9 +12,34 @@
namespace internal {
namespace compiler {
-// -----------------------------------------------------------------------------
-// Shared operators.
+namespace {
+const LanguageMode kLanguageModes[] = {SLOPPY, STRICT, STRONG};
+
+
+#if GTEST_HAS_COMBINE
+
+template <typename T>
+class JSOperatorTestWithLanguageModeAndParam
+ : public TestWithZone,
+ public ::testing::WithParamInterface<::testing::tuple<LanguageMode, T>> {
+ protected:
+ LanguageMode language_mode() const {
+ return ::testing::get<0>(B::GetParam());
+ }
+ const T& GetParam() const { return ::testing::get<1>(B::GetParam()); }
+
+ private:
+ typedef ::testing::WithParamInterface<::testing::tuple<LanguageMode, T>> B;
+};
+
+#endif // GTEST_HAS_COMBINE
+
+} // namespace
+
+
+// -----------------------------------------------------------------------------
+// Shared operators without language mode.
namespace {
@@ -28,6 +53,36 @@
int control_input_count;
int value_output_count;
int effect_output_count;
+ int control_output_count;
+};
+
+
+const SharedOperator kSharedOperators[] = {
+#define SHARED(Name, properties, value_input_count, frame_state_input_count, \
+ effect_input_count, control_input_count, value_output_count, \
+ effect_output_count, control_output_count) \
+ { \
+ &JSOperatorBuilder::Name, IrOpcode::kJS##Name, properties, \
+ value_input_count, frame_state_input_count, effect_input_count, \
+ control_input_count, value_output_count, effect_output_count, \
+ control_output_count \
+ }
+ SHARED(Equal, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2),
+ SHARED(NotEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2),
+ SHARED(StrictEqual, Operator::kNoThrow, 2, 0, 1, 1, 1, 1, 0),
+ SHARED(StrictNotEqual, Operator::kNoThrow, 2, 0, 1, 1, 1, 1, 0),
+ SHARED(ToNumber, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2),
+ SHARED(ToString, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2),
+ SHARED(ToName, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2),
+ SHARED(ToObject, Operator::kNoProperties, 1, 1, 1, 1, 1, 1, 2),
+ SHARED(Yield, Operator::kNoProperties, 1, 0, 1, 1, 1, 1, 2),
+ SHARED(Create, Operator::kEliminatable, 2, 1, 1, 0, 1, 1, 0),
+ SHARED(HasProperty, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2),
+ SHARED(TypeOf, Operator::kEliminatable, 1, 0, 1, 0, 1, 1, 0),
+ SHARED(InstanceOf, Operator::kNoProperties, 2, 1, 1, 1, 1, 1, 2),
+ SHARED(CreateWithContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1, 2),
+ SHARED(CreateModuleContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1, 2),
+#undef SHARED
};
@@ -35,55 +90,6 @@
return os << IrOpcode::Mnemonic(sop.opcode);
}
-
-const SharedOperator kSharedOperators[] = {
-#define SHARED(Name, properties, value_input_count, frame_state_input_count, \
- effect_input_count, control_input_count, value_output_count, \
- effect_output_count) \
- { \
- &JSOperatorBuilder::Name, IrOpcode::kJS##Name, properties, \
- value_input_count, frame_state_input_count, effect_input_count, \
- control_input_count, value_output_count, effect_output_count \
- }
- SHARED(Equal, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(NotEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(StrictEqual, Operator::kPure, 2, 0, 0, 0, 1, 0),
- SHARED(StrictNotEqual, Operator::kPure, 2, 0, 0, 0, 1, 0),
- SHARED(LessThan, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(GreaterThan, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(LessThanOrEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(GreaterThanOrEqual, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(BitwiseOr, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(BitwiseXor, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(BitwiseAnd, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(ShiftLeft, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(ShiftRight, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(ShiftRightLogical, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(Add, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(Subtract, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(Multiply, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(Divide, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(Modulus, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(UnaryNot, Operator::kPure, 1, 0, 0, 0, 1, 0),
- SHARED(ToBoolean, Operator::kPure, 1, 0, 0, 0, 1, 0),
- SHARED(ToNumber, Operator::kNoProperties, 1, 0, 1, 1, 1, 1),
- SHARED(ToString, Operator::kNoProperties, 1, 0, 1, 1, 1, 1),
- SHARED(ToName, Operator::kNoProperties, 1, 0, 1, 1, 1, 1),
- SHARED(ToObject, Operator::kNoProperties, 1, 1, 1, 1, 1, 1),
- SHARED(Yield, Operator::kNoProperties, 1, 0, 1, 1, 1, 1),
- SHARED(Create, Operator::kEliminatable, 0, 0, 1, 1, 1, 1),
- SHARED(HasProperty, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(TypeOf, Operator::kPure, 1, 0, 0, 0, 1, 0),
- SHARED(InstanceOf, Operator::kNoProperties, 2, 1, 1, 1, 1, 1),
- SHARED(Debugger, Operator::kNoProperties, 0, 0, 1, 1, 0, 1),
- SHARED(CreateFunctionContext, Operator::kNoProperties, 1, 0, 1, 1, 1, 1),
- SHARED(CreateWithContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1),
- SHARED(CreateBlockContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1),
- SHARED(CreateModuleContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1),
- SHARED(CreateScriptContext, Operator::kNoProperties, 2, 0, 1, 1, 1, 1)
-#undef SHARED
-};
-
} // namespace
@@ -106,23 +112,20 @@
const Operator* op = (javascript.*sop.constructor)();
const int context_input_count = 1;
- // TODO(jarin): Get rid of this hack.
- const int frame_state_input_count =
- FLAG_turbo_deoptimization ? sop.frame_state_input_count : 0;
EXPECT_EQ(sop.value_input_count, op->ValueInputCount());
EXPECT_EQ(context_input_count, OperatorProperties::GetContextInputCount(op));
- EXPECT_EQ(frame_state_input_count,
+ EXPECT_EQ(sop.frame_state_input_count,
OperatorProperties::GetFrameStateInputCount(op));
EXPECT_EQ(sop.effect_input_count, op->EffectInputCount());
EXPECT_EQ(sop.control_input_count, op->ControlInputCount());
EXPECT_EQ(sop.value_input_count + context_input_count +
- frame_state_input_count + sop.effect_input_count +
+ sop.frame_state_input_count + sop.effect_input_count +
sop.control_input_count,
OperatorProperties::GetTotalInputCount(op));
EXPECT_EQ(sop.value_output_count, op->ValueOutputCount());
EXPECT_EQ(sop.effect_output_count, op->EffectOutputCount());
- EXPECT_EQ(0, op->ControlOutputCount());
+ EXPECT_EQ(sop.control_output_count, op->ControlOutputCount());
}
@@ -147,70 +150,120 @@
// -----------------------------------------------------------------------------
-// JSStoreProperty.
+// Shared operators with language mode.
-class JSStorePropertyOperatorTest
- : public TestWithZone,
- public ::testing::WithParamInterface<StrictMode> {};
+#if GTEST_HAS_COMBINE
+
+namespace {
+
+struct SharedOperatorWithLanguageMode {
+ const Operator* (JSOperatorBuilder::*constructor)(LanguageMode);
+ IrOpcode::Value opcode;
+ Operator::Properties properties;
+ int value_input_count;
+ int frame_state_input_count;
+ int effect_input_count;
+ int control_input_count;
+ int value_output_count;
+ int effect_output_count;
+ int control_output_count;
+};
-TEST_P(JSStorePropertyOperatorTest, InstancesAreGloballyShared) {
- const StrictMode mode = GetParam();
+const SharedOperatorWithLanguageMode kSharedOperatorsWithLanguageMode[] = {
+#define SHARED(Name, properties, value_input_count, frame_state_input_count, \
+ effect_input_count, control_input_count, value_output_count, \
+ effect_output_count, control_output_count) \
+ { \
+ &JSOperatorBuilder::Name, IrOpcode::kJS##Name, properties, \
+ value_input_count, frame_state_input_count, effect_input_count, \
+ control_input_count, value_output_count, effect_output_count, \
+ control_output_count \
+ }
+ SHARED(LessThan, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2),
+ SHARED(GreaterThan, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2),
+ SHARED(LessThanOrEqual, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2),
+ SHARED(GreaterThanOrEqual, Operator::kNoProperties, 2, 2, 1, 1, 1, 1, 2),
+#undef SHARED
+};
+
+
+std::ostream& operator<<(std::ostream& os,
+ const SharedOperatorWithLanguageMode& sop) {
+ return os << IrOpcode::Mnemonic(sop.opcode);
+}
+
+} // namespace
+
+
+class JSSharedOperatorWithLanguageModeTest
+ : public JSOperatorTestWithLanguageModeAndParam<
+ SharedOperatorWithLanguageMode> {};
+
+
+TEST_P(JSSharedOperatorWithLanguageModeTest, InstancesAreGloballyShared) {
+ const SharedOperatorWithLanguageMode& sop = GetParam();
JSOperatorBuilder javascript1(zone());
JSOperatorBuilder javascript2(zone());
- EXPECT_EQ(javascript1.StoreProperty(mode), javascript2.StoreProperty(mode));
+ EXPECT_EQ((javascript1.*sop.constructor)(language_mode()),
+ (javascript2.*sop.constructor)(language_mode()));
}
-TEST_P(JSStorePropertyOperatorTest, NumberOfInputsAndOutputs) {
+TEST_P(JSSharedOperatorWithLanguageModeTest, NumberOfInputsAndOutputs) {
JSOperatorBuilder javascript(zone());
- const StrictMode mode = GetParam();
- const Operator* op = javascript.StoreProperty(mode);
+ const SharedOperatorWithLanguageMode& sop = GetParam();
+ const Operator* op = (javascript.*sop.constructor)(language_mode());
- // TODO(jarin): Get rid of this hack.
- const int frame_state_input_count = FLAG_turbo_deoptimization ? 1 : 0;
- EXPECT_EQ(3, op->ValueInputCount());
- EXPECT_EQ(1, OperatorProperties::GetContextInputCount(op));
- EXPECT_EQ(frame_state_input_count,
+ const int context_input_count = 1;
+ EXPECT_EQ(sop.value_input_count, op->ValueInputCount());
+ EXPECT_EQ(context_input_count, OperatorProperties::GetContextInputCount(op));
+ EXPECT_EQ(sop.frame_state_input_count,
OperatorProperties::GetFrameStateInputCount(op));
- EXPECT_EQ(1, op->EffectInputCount());
- EXPECT_EQ(1, op->ControlInputCount());
- EXPECT_EQ(6 + frame_state_input_count,
+ EXPECT_EQ(sop.effect_input_count, op->EffectInputCount());
+ EXPECT_EQ(sop.control_input_count, op->ControlInputCount());
+ EXPECT_EQ(sop.value_input_count + context_input_count +
+ sop.frame_state_input_count + sop.effect_input_count +
+ sop.control_input_count,
OperatorProperties::GetTotalInputCount(op));
- EXPECT_EQ(0, op->ValueOutputCount());
- EXPECT_EQ(1, op->EffectOutputCount());
- EXPECT_EQ(0, op->ControlOutputCount());
+ EXPECT_EQ(sop.value_output_count, op->ValueOutputCount());
+ EXPECT_EQ(sop.effect_output_count, op->EffectOutputCount());
+ EXPECT_EQ(sop.control_output_count, op->ControlOutputCount());
}
-TEST_P(JSStorePropertyOperatorTest, OpcodeIsCorrect) {
+TEST_P(JSSharedOperatorWithLanguageModeTest, OpcodeIsCorrect) {
JSOperatorBuilder javascript(zone());
- const StrictMode mode = GetParam();
- const Operator* op = javascript.StoreProperty(mode);
- EXPECT_EQ(IrOpcode::kJSStoreProperty, op->opcode());
+ const SharedOperatorWithLanguageMode& sop = GetParam();
+ const Operator* op = (javascript.*sop.constructor)(language_mode());
+ EXPECT_EQ(sop.opcode, op->opcode());
}
-TEST_P(JSStorePropertyOperatorTest, OpParameter) {
+TEST_P(JSSharedOperatorWithLanguageModeTest, Parameter) {
JSOperatorBuilder javascript(zone());
- const StrictMode mode = GetParam();
- const Operator* op = javascript.StoreProperty(mode);
- EXPECT_EQ(mode, OpParameter<StrictMode>(op));
+ const SharedOperatorWithLanguageMode& sop = GetParam();
+ const Operator* op = (javascript.*sop.constructor)(language_mode());
+ EXPECT_EQ(language_mode(), OpParameter<LanguageMode>(op));
}
-TEST_P(JSStorePropertyOperatorTest, Properties) {
+TEST_P(JSSharedOperatorWithLanguageModeTest, Properties) {
JSOperatorBuilder javascript(zone());
- const StrictMode mode = GetParam();
- const Operator* op = javascript.StoreProperty(mode);
- EXPECT_EQ(Operator::kNoProperties, op->properties());
+ const SharedOperatorWithLanguageMode& sop = GetParam();
+ const Operator* op = (javascript.*sop.constructor)(language_mode());
+ EXPECT_EQ(sop.properties, op->properties());
}
-INSTANTIATE_TEST_CASE_P(JSOperatorTest, JSStorePropertyOperatorTest,
- ::testing::Values(SLOPPY, STRICT));
+INSTANTIATE_TEST_CASE_P(
+ JSOperatorTest, JSSharedOperatorWithLanguageModeTest,
+ ::testing::Combine(::testing::ValuesIn(kLanguageModes),
+ ::testing::ValuesIn(kSharedOperatorsWithLanguageMode)));
+
+#endif // GTEST_HAS_COMBINE
} // namespace compiler
} // namespace internal