Chromium Code Reviews| Index: test/cctest/compiler/test-js-typed-lowering.cc |
| diff --git a/test/cctest/compiler/test-js-typed-lowering.cc b/test/cctest/compiler/test-js-typed-lowering.cc |
| index cc4b2bdef255b7b35231183f186e9b9847336970..c3c3cc6c13952cd16166ce948507c633d30bc315 100644 |
| --- a/test/cctest/compiler/test-js-typed-lowering.cc |
| +++ b/test/cctest/compiler/test-js-typed-lowering.cc |
| @@ -227,7 +227,7 @@ TEST(StringBinops) { |
| for (size_t j = 0; j < arraysize(kStringTypes); ++j) { |
| Node* p1 = R.Parameter(kStringTypes[j], 1); |
| - Node* add = R.Binop(R.javascript.Add(), p0, p1); |
| + Node* add = R.Binop(R.javascript.Add(language_mode), p0, p1); |
| Node* r = R.reduce(add); |
| R.CheckPureBinop(IrOpcode::kStringAdd, r); |
| @@ -239,12 +239,12 @@ TEST(StringBinops) { |
| #endif |
| -TEST(AddNumber1) { |
| +TEST_WITH_STRONG(AddNumber1) { |
| JSTypedLoweringTester R; |
| for (size_t i = 0; i < arraysize(kNumberTypes); ++i) { |
| Node* p0 = R.Parameter(kNumberTypes[i], 0); |
| Node* p1 = R.Parameter(kNumberTypes[i], 1); |
| - Node* add = R.Binop(R.javascript.Add(), p0, p1); |
| + Node* add = R.Binop(R.javascript.Add(language_mode), p0, p1); |
| Node* r = R.reduce(add); |
| R.CheckPureBinop(IrOpcode::kNumberAdd, r); |
| @@ -254,14 +254,14 @@ TEST(AddNumber1) { |
| } |
| -TEST(NumberBinops) { |
| +TEST_WITH_STRONG(NumberBinops) { |
| JSTypedLoweringTester R; |
| const Operator* ops[] = { |
| - R.javascript.Add(), R.simplified.NumberAdd(), |
| - R.javascript.Subtract(), R.simplified.NumberSubtract(), |
| - R.javascript.Multiply(), R.simplified.NumberMultiply(), |
| - R.javascript.Divide(), R.simplified.NumberDivide(), |
| - R.javascript.Modulus(), R.simplified.NumberModulus(), |
| + R.javascript.Add(language_mode), R.simplified.NumberAdd(), |
| + R.javascript.Subtract(language_mode), R.simplified.NumberSubtract(), |
| + R.javascript.Multiply(language_mode), R.simplified.NumberMultiply(), |
| + R.javascript.Divide(language_mode), R.simplified.NumberDivide(), |
| + R.javascript.Modulus(language_mode), R.simplified.NumberModulus(), |
| }; |
| for (size_t i = 0; i < arraysize(kNumberTypes); ++i) { |
| @@ -301,21 +301,22 @@ static void CheckToI32(Node* old_input, Node* new_input, bool is_signed) { |
| // A helper class for testing lowering of bitwise shift operators. |
| class JSBitwiseShiftTypedLoweringTester : public JSTypedLoweringTester { |
| public: |
| - static const int kNumberOps = 6; |
| - const Operator* ops[kNumberOps]; |
| - bool signedness[kNumberOps]; |
| - |
| - JSBitwiseShiftTypedLoweringTester() { |
| + explicit JSBitwiseShiftTypedLoweringTester(LanguageMode language_mode) |
| + : JSTypedLoweringTester(), language_mode_(language_mode) { |
| int i = 0; |
| - set(i++, javascript.ShiftLeft(), true); |
| + set(i++, javascript.ShiftLeft(language_mode_), true); |
| set(i++, machine.Word32Shl(), false); |
| - set(i++, javascript.ShiftRight(), true); |
| + set(i++, javascript.ShiftRight(language_mode_), true); |
| set(i++, machine.Word32Sar(), false); |
| - set(i++, javascript.ShiftRightLogical(), false); |
| + set(i++, javascript.ShiftRightLogical(language_mode_), false); |
| set(i++, machine.Word32Shr(), false); |
| } |
| + static const int kNumberOps = 6; |
| + const Operator* ops[kNumberOps]; |
| + bool signedness[kNumberOps]; |
| private: |
| + LanguageMode language_mode_; |
| void set(int idx, const Operator* op, bool s) { |
| ops[idx] = op; |
| signedness[idx] = s; |
| @@ -324,7 +325,7 @@ class JSBitwiseShiftTypedLoweringTester : public JSTypedLoweringTester { |
| TEST(Int32BitwiseShifts) { |
| - JSBitwiseShiftTypedLoweringTester R; |
| + JSBitwiseShiftTypedLoweringTester R(LanguageMode::SLOPPY); |
| Type* types[] = { |
| Type::SignedSmall(), Type::UnsignedSmall(), Type::Negative32(), |
| @@ -365,21 +366,22 @@ TEST(Int32BitwiseShifts) { |
| // A helper class for testing lowering of bitwise operators. |
| class JSBitwiseTypedLoweringTester : public JSTypedLoweringTester { |
| public: |
| - static const int kNumberOps = 6; |
| - const Operator* ops[kNumberOps]; |
| - bool signedness[kNumberOps]; |
| - |
| - JSBitwiseTypedLoweringTester() { |
| + explicit JSBitwiseTypedLoweringTester(LanguageMode language_mode) |
| + : JSTypedLoweringTester(), language_mode_(language_mode) { |
| int i = 0; |
| - set(i++, javascript.BitwiseOr(), true); |
| + set(i++, javascript.BitwiseOr(language_mode_), true); |
| set(i++, machine.Word32Or(), true); |
| - set(i++, javascript.BitwiseXor(), true); |
| + set(i++, javascript.BitwiseXor(language_mode_), true); |
| set(i++, machine.Word32Xor(), true); |
| - set(i++, javascript.BitwiseAnd(), true); |
| + set(i++, javascript.BitwiseAnd(language_mode_), true); |
| set(i++, machine.Word32And(), true); |
| } |
| + static const int kNumberOps = 6; |
| + const Operator* ops[kNumberOps]; |
| + bool signedness[kNumberOps]; |
| private: |
| + LanguageMode language_mode_; |
| void set(int idx, const Operator* op, bool s) { |
| ops[idx] = op; |
| signedness[idx] = s; |
| @@ -388,7 +390,7 @@ class JSBitwiseTypedLoweringTester : public JSTypedLoweringTester { |
| TEST(Int32BitwiseBinops) { |
| - JSBitwiseTypedLoweringTester R; |
| + JSBitwiseTypedLoweringTester R(LanguageMode::SLOPPY); |
| Type* types[] = { |
| Type::SignedSmall(), Type::UnsignedSmall(), Type::Unsigned32(), |
| @@ -579,14 +581,16 @@ TEST(JSToString_replacement) { |
| } |
| -TEST(StringComparison) { |
| +TEST_WITH_STRONG(StringComparison) { |
| JSTypedLoweringTester R; |
| const Operator* ops[] = { |
| - R.javascript.LessThan(), R.simplified.StringLessThan(), |
| - R.javascript.LessThanOrEqual(), R.simplified.StringLessThanOrEqual(), |
| - R.javascript.GreaterThan(), R.simplified.StringLessThan(), |
| - R.javascript.GreaterThanOrEqual(), R.simplified.StringLessThanOrEqual()}; |
| + R.javascript.LessThan(language_mode), R.simplified.StringLessThan(), |
| + R.javascript.LessThanOrEqual(language_mode), |
| + R.simplified.StringLessThanOrEqual(), |
| + R.javascript.GreaterThan(language_mode), R.simplified.StringLessThan(), |
| + R.javascript.GreaterThanOrEqual(language_mode), |
| + R.simplified.StringLessThanOrEqual()}; |
| for (size_t i = 0; i < arraysize(kStringTypes); i++) { |
| Node* p0 = R.Parameter(kStringTypes[i], 0); |
| @@ -627,14 +631,16 @@ static void CheckIsConvertedToNumber(Node* val, Node* converted) { |
| } |
| -TEST(NumberComparison) { |
| +TEST_WITH_STRONG(NumberComparison) { |
| JSTypedLoweringTester R; |
| const Operator* ops[] = { |
| - R.javascript.LessThan(), R.simplified.NumberLessThan(), |
| - R.javascript.LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(), |
| - R.javascript.GreaterThan(), R.simplified.NumberLessThan(), |
| - R.javascript.GreaterThanOrEqual(), R.simplified.NumberLessThanOrEqual()}; |
| + R.javascript.LessThan(language_mode), R.simplified.NumberLessThan(), |
| + R.javascript.LessThanOrEqual(language_mode), |
| + R.simplified.NumberLessThanOrEqual(), |
| + R.javascript.GreaterThan(language_mode), R.simplified.NumberLessThan(), |
| + R.javascript.GreaterThanOrEqual(language_mode), |
| + R.simplified.NumberLessThanOrEqual()}; |
| Node* const p0 = R.Parameter(Type::Number(), 0); |
| Node* const p1 = R.Parameter(Type::Number(), 1); |
| @@ -657,7 +663,7 @@ TEST(NumberComparison) { |
| } |
| -TEST(MixedComparison1) { |
| +TEST_WITH_STRONG(MixedComparison1) { |
| JSTypedLoweringTester R; |
| Type* types[] = {Type::Number(), Type::String(), |
| @@ -669,7 +675,7 @@ TEST(MixedComparison1) { |
| for (size_t j = 0; j < arraysize(types); j++) { |
| Node* p1 = R.Parameter(types[j], 1); |
| { |
| - Node* cmp = R.Binop(R.javascript.LessThan(), p0, p1); |
| + Node* cmp = R.Binop(R.javascript.LessThan(language_mode), p0, p1); |
| Node* r = R.reduce(cmp); |
| if (!types[i]->Maybe(Type::String()) || |
| @@ -688,7 +694,7 @@ TEST(MixedComparison1) { |
| } |
| -TEST(RemoveToNumberEffects) { |
| +TEST_WITH_STRONG(RemoveToNumberEffects) { |
| FLAG_turbo_deoptimization = true; |
| JSTypedLoweringTester R; |
| @@ -727,12 +733,14 @@ TEST(RemoveToNumberEffects) { |
| case 2: |
| effect_use = R.graph.NewNode(R.common.EffectPhi(1), ton, R.start()); |
| case 3: |
| - effect_use = R.graph.NewNode(R.javascript.Add(), ton, ton, R.context(), |
| - frame_state, frame_state, ton, R.start()); |
| + effect_use = R.graph.NewNode(R.javascript.Add(language_mode), ton, ton, |
| + R.context(), frame_state, frame_state, ton, |
| + R.start()); |
| break; |
| case 4: |
| - effect_use = R.graph.NewNode(R.javascript.Add(), p0, p0, R.context(), |
| - frame_state, frame_state, ton, R.start()); |
| + effect_use = R.graph.NewNode(R.javascript.Add(language_mode), p0, p0, |
| + R.context(), frame_state, frame_state, ton, |
| + R.start()); |
| break; |
| case 5: |
| effect_use = R.graph.NewNode(R.common.Return(), p0, ton, R.start()); |
| @@ -890,18 +898,19 @@ TEST(StringEquality) { |
| } |
| -TEST(RemovePureNumberBinopEffects) { |
| +TEST_WITH_STRONG(RemovePureNumberBinopEffects) { |
| JSTypedLoweringTester R; |
| const Operator* ops[] = { |
| R.javascript.Equal(), R.simplified.NumberEqual(), |
| - R.javascript.Add(), R.simplified.NumberAdd(), |
| - R.javascript.Subtract(), R.simplified.NumberSubtract(), |
| - R.javascript.Multiply(), R.simplified.NumberMultiply(), |
| - R.javascript.Divide(), R.simplified.NumberDivide(), |
| - R.javascript.Modulus(), R.simplified.NumberModulus(), |
| - R.javascript.LessThan(), R.simplified.NumberLessThan(), |
| - R.javascript.LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(), |
| + R.javascript.Add(language_mode), R.simplified.NumberAdd(), |
| + R.javascript.Subtract(language_mode), R.simplified.NumberSubtract(), |
| + R.javascript.Multiply(language_mode), R.simplified.NumberMultiply(), |
| + R.javascript.Divide(language_mode), R.simplified.NumberDivide(), |
| + R.javascript.Modulus(language_mode), R.simplified.NumberModulus(), |
| + R.javascript.LessThan(language_mode), R.simplified.NumberLessThan(), |
| + R.javascript.LessThanOrEqual(language_mode), |
| + R.simplified.NumberLessThanOrEqual(), |
| }; |
| for (size_t j = 0; j < arraysize(ops); j += 2) { |
| @@ -922,10 +931,14 @@ TEST(OrderNumberBinopEffects1) { |
| JSTypedLoweringTester R; |
| const Operator* ops[] = { |
| - R.javascript.Subtract(), R.simplified.NumberSubtract(), |
| - R.javascript.Multiply(), R.simplified.NumberMultiply(), |
| - R.javascript.Divide(), R.simplified.NumberDivide(), |
| - R.javascript.Modulus(), R.simplified.NumberModulus(), |
| + R.javascript.Subtract(LanguageMode::SLOPPY), |
| + R.simplified.NumberSubtract(), |
| + R.javascript.Multiply(LanguageMode::SLOPPY), |
| + R.simplified.NumberMultiply(), |
| + R.javascript.Divide(LanguageMode::SLOPPY), |
| + R.simplified.NumberDivide(), |
| + R.javascript.Modulus(LanguageMode::SLOPPY), |
| + R.simplified.NumberModulus(), |
| }; |
| for (size_t j = 0; j < arraysize(ops); j += 2) { |
| @@ -948,11 +961,16 @@ TEST(OrderNumberBinopEffects2) { |
| JSTypedLoweringTester R; |
| const Operator* ops[] = { |
| - R.javascript.Add(), R.simplified.NumberAdd(), |
| - R.javascript.Subtract(), R.simplified.NumberSubtract(), |
| - R.javascript.Multiply(), R.simplified.NumberMultiply(), |
| - R.javascript.Divide(), R.simplified.NumberDivide(), |
| - R.javascript.Modulus(), R.simplified.NumberModulus(), |
| + R.javascript.Add(LanguageMode::SLOPPY), |
| + R.simplified.NumberAdd(), |
| + R.javascript.Subtract(LanguageMode::SLOPPY), |
| + R.simplified.NumberSubtract(), |
| + R.javascript.Multiply(LanguageMode::SLOPPY), |
| + R.simplified.NumberMultiply(), |
| + R.javascript.Divide(LanguageMode::SLOPPY), |
| + R.simplified.NumberDivide(), |
| + R.javascript.Modulus(LanguageMode::SLOPPY), |
| + R.simplified.NumberModulus(), |
| }; |
| for (size_t j = 0; j < arraysize(ops); j += 2) { |
| @@ -987,8 +1005,10 @@ TEST(OrderCompareEffects) { |
| JSTypedLoweringTester R; |
| const Operator* ops[] = { |
| - R.javascript.GreaterThan(), R.simplified.NumberLessThan(), |
| - R.javascript.GreaterThanOrEqual(), R.simplified.NumberLessThanOrEqual(), |
| + R.javascript.GreaterThan(LanguageMode::SLOPPY), |
| + R.simplified.NumberLessThan(), |
| + R.javascript.GreaterThanOrEqual(LanguageMode::SLOPPY), |
| + R.simplified.NumberLessThanOrEqual(), |
| }; |
| for (size_t j = 0; j < arraysize(ops); j += 2) { |
| @@ -1035,11 +1055,11 @@ TEST(OrderCompareEffects) { |
| TEST(Int32BinopEffects) { |
| - JSBitwiseTypedLoweringTester R; |
| - |
| + JSBitwiseTypedLoweringTester R(LanguageMode::SLOPPY); |
| for (int j = 0; j < R.kNumberOps; j += 2) { |
| bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1]; |
| BinopEffectsTester B(R.ops[j], I32Type(signed_left), I32Type(signed_right)); |
| + printf("%s\n%s\n", R.ops[j + 1]->mnemonic(), B.result->op()->mnemonic()); |
|
rossberg
2015/04/23 13:29:37
Stray debug output?
conradw
2015/04/23 14:51:55
Oops, done.
|
| CHECK_EQ(R.ops[j + 1]->opcode(), B.result->op()->opcode()); |
| B.R.CheckPureBinop(B.result->opcode(), B.result); |
| @@ -1117,9 +1137,9 @@ TEST(Int32BinopEffects) { |
| } |
| -TEST(Int32AddNarrowing) { |
| +TEST_WITH_STRONG(Int32AddNarrowing) { |
| { |
| - JSBitwiseTypedLoweringTester R; |
| + JSBitwiseTypedLoweringTester R(language_mode); |
| for (int o = 0; o < R.kNumberOps; o += 2) { |
| for (size_t i = 0; i < arraysize(kInt32Types); i++) { |
| @@ -1142,7 +1162,7 @@ TEST(Int32AddNarrowing) { |
| } |
| } |
| { |
| - JSBitwiseShiftTypedLoweringTester R; |
| + JSBitwiseShiftTypedLoweringTester R(language_mode); |
| for (int o = 0; o < R.kNumberOps; o += 2) { |
| for (size_t i = 0; i < arraysize(kInt32Types); i++) { |
| @@ -1165,7 +1185,7 @@ TEST(Int32AddNarrowing) { |
| } |
| } |
| { |
| - JSBitwiseTypedLoweringTester R; |
| + JSBitwiseTypedLoweringTester R(language_mode); |
| for (int o = 0; o < R.kNumberOps; o += 2) { |
| Node* n0 = R.Parameter(I32Type(R.signedness[o])); |
| @@ -1189,7 +1209,7 @@ TEST(Int32AddNarrowing) { |
| } |
| -TEST(Int32Comparisons) { |
| +TEST_WITH_STRONG(Int32Comparisons) { |
| JSTypedLoweringTester R; |
| struct Entry { |
| @@ -1201,16 +1221,17 @@ TEST(Int32Comparisons) { |
| }; |
| Entry ops[] = { |
| - {R.javascript.LessThan(), R.machine.Uint32LessThan(), |
| + {R.javascript.LessThan(language_mode), R.machine.Uint32LessThan(), |
| R.machine.Int32LessThan(), R.simplified.NumberLessThan(), false}, |
| - {R.javascript.LessThanOrEqual(), R.machine.Uint32LessThanOrEqual(), |
| - R.machine.Int32LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(), |
| - false}, |
| - {R.javascript.GreaterThan(), R.machine.Uint32LessThan(), |
| + {R.javascript.LessThanOrEqual(language_mode), |
| + R.machine.Uint32LessThanOrEqual(), R.machine.Int32LessThanOrEqual(), |
| + R.simplified.NumberLessThanOrEqual(), false}, |
| + {R.javascript.GreaterThan(language_mode), R.machine.Uint32LessThan(), |
| R.machine.Int32LessThan(), R.simplified.NumberLessThan(), true}, |
| - {R.javascript.GreaterThanOrEqual(), R.machine.Uint32LessThanOrEqual(), |
| - R.machine.Int32LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(), |
| - true}}; |
| + {R.javascript.GreaterThanOrEqual(language_mode), |
| + R.machine.Uint32LessThanOrEqual(), R.machine.Int32LessThanOrEqual(), |
| + R.simplified.NumberLessThanOrEqual(), true} |
| + }; |
| for (size_t o = 0; o < arraysize(ops); o++) { |
| for (size_t i = 0; i < arraysize(kNumberTypes); i++) { |