| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 603b1fa62b6ece1728037c045f9795fe37537072..29b6288e0cfdbec6d08254294068fb9628b9708b 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -10289,7 +10289,8 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement(
|
| HConstant* delta = (expr->op() == Token::INC)
|
| ? graph()->GetConstant1()
|
| : graph()->GetConstantMinus1();
|
| - HInstruction* instr = AddUncasted<HAdd>(Top(), delta);
|
| + HInstruction* instr = AddUncasted<HAdd>(Top(), delta,
|
| + function_language_mode());
|
| if (instr->IsAdd()) {
|
| HAdd* add = HAdd::cast(instr);
|
| add->set_observed_input_representation(1, rep);
|
| @@ -10637,7 +10638,7 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| if (!left_type->IsInhabited()) {
|
| Add<HDeoptimize>(
|
| Deoptimizer::kInsufficientTypeFeedbackForLHSOfBinaryOperation,
|
| - is_strong(language_mode) ? Deoptimizer::EAGER : Deoptimizer::SOFT);
|
| + Deoptimizer::SOFT);
|
| left_type = Type::Any(zone());
|
| left_rep = RepresentationFor(left_type);
|
| maybe_string_add = op == Token::ADD;
|
| @@ -10646,7 +10647,7 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| if (!right_type->IsInhabited()) {
|
| Add<HDeoptimize>(
|
| Deoptimizer::kInsufficientTypeFeedbackForRHSOfBinaryOperation,
|
| - is_strong(language_mode) ? Deoptimizer::EAGER : Deoptimizer::SOFT);
|
| + Deoptimizer::SOFT);
|
| right_type = Type::Any(zone());
|
| right_rep = RepresentationFor(right_type);
|
| maybe_string_add = op == Token::ADD;
|
| @@ -10709,7 +10710,7 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| if (!right_string.is_null() && right_string->length() == 0) return left;
|
| if (!left_string.is_null() && !right_string.is_null()) {
|
| return AddUncasted<HStringAdd>(
|
| - left, right, allocation_mode.GetPretenureMode(),
|
| + left, right, language_mode, allocation_mode.GetPretenureMode(),
|
| STRING_ADD_CHECK_NONE, allocation_mode.feedback_site());
|
| }
|
|
|
| @@ -10738,7 +10739,7 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
|
|
| // Fallback to using the string add stub.
|
| return AddUncasted<HStringAdd>(
|
| - left, right, allocation_mode.GetPretenureMode(),
|
| + left, right, language_mode, allocation_mode.GetPretenureMode(),
|
| STRING_ADD_CHECK_NONE, allocation_mode.feedback_site());
|
| }
|
|
|
| @@ -10764,13 +10765,13 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| } else {
|
| switch (op) {
|
| case Token::ADD:
|
| - instr = AddUncasted<HAdd>(left, right);
|
| + instr = AddUncasted<HAdd>(left, right, language_mode);
|
| break;
|
| case Token::SUB:
|
| - instr = AddUncasted<HSub>(left, right);
|
| + instr = AddUncasted<HSub>(left, right, language_mode);
|
| break;
|
| case Token::MUL:
|
| - instr = AddUncasted<HMul>(left, right);
|
| + instr = AddUncasted<HMul>(left, right, language_mode);
|
| break;
|
| case Token::MOD: {
|
| if (fixed_right_arg.IsJust() &&
|
| @@ -10783,38 +10784,38 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| if_same.ElseDeopt(Deoptimizer::kUnexpectedRHSOfBinaryOperation);
|
| right = fixed_right;
|
| }
|
| - instr = AddUncasted<HMod>(left, right);
|
| + instr = AddUncasted<HMod>(left, right, language_mode);
|
| break;
|
| }
|
| case Token::DIV:
|
| - instr = AddUncasted<HDiv>(left, right);
|
| + instr = AddUncasted<HDiv>(left, right, language_mode);
|
| break;
|
| case Token::BIT_XOR:
|
| case Token::BIT_AND:
|
| - instr = AddUncasted<HBitwise>(op, left, right);
|
| + instr = AddUncasted<HBitwise>(op, left, right, language_mode);
|
| break;
|
| case Token::BIT_OR: {
|
| HValue* operand, *shift_amount;
|
| if (left_type->Is(Type::Signed32()) &&
|
| right_type->Is(Type::Signed32()) &&
|
| MatchRotateRight(left, right, &operand, &shift_amount)) {
|
| - instr = AddUncasted<HRor>(operand, shift_amount);
|
| + instr = AddUncasted<HRor>(operand, shift_amount, language_mode);
|
| } else {
|
| - instr = AddUncasted<HBitwise>(op, left, right);
|
| + instr = AddUncasted<HBitwise>(op, left, right, language_mode);
|
| }
|
| break;
|
| }
|
| case Token::SAR:
|
| - instr = AddUncasted<HSar>(left, right);
|
| + instr = AddUncasted<HSar>(left, right, language_mode);
|
| break;
|
| case Token::SHR:
|
| - instr = AddUncasted<HShr>(left, right);
|
| + instr = AddUncasted<HShr>(left, right, language_mode);
|
| if (instr->IsShr() && CanBeZero(right)) {
|
| graph()->RecordUint32Instruction(instr);
|
| }
|
| break;
|
| case Token::SHL:
|
| - instr = AddUncasted<HShl>(left, right);
|
| + instr = AddUncasted<HShl>(left, right, language_mode);
|
| break;
|
| default:
|
| UNREACHABLE();
|
| @@ -12054,7 +12055,8 @@ void HOptimizedGraphBuilder::GenerateStringAdd(CallRuntime* call) {
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* right = Pop();
|
| HValue* left = Pop();
|
| - HInstruction* result = NewUncasted<HStringAdd>(left, right);
|
| + HInstruction* result = NewUncasted<HStringAdd>(left, right,
|
| + function_language_mode());
|
| return ast_context()->ReturnInstruction(result, call->id());
|
| }
|
|
|
|
|