Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 1773653002: [strong] Remove all remainders of strong mode (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast/ast-numbering.h" 10 #include "src/ast/ast-numbering.h"
(...skipping 6541 matching lines...) Expand 10 before | Expand all | Expand 10 after
6552 } 6552 }
6553 6553
6554 HValue* checked_holder = checked_object; 6554 HValue* checked_holder = checked_object;
6555 if (info->has_holder()) { 6555 if (info->has_holder()) {
6556 Handle<JSObject> prototype(JSObject::cast(info->map()->prototype())); 6556 Handle<JSObject> prototype(JSObject::cast(info->map()->prototype()));
6557 checked_holder = BuildCheckPrototypeMaps(prototype, info->holder()); 6557 checked_holder = BuildCheckPrototypeMaps(prototype, info->holder());
6558 } 6558 }
6559 6559
6560 if (!info->IsFound()) { 6560 if (!info->IsFound()) {
6561 DCHECK(info->IsLoad()); 6561 DCHECK(info->IsLoad());
6562 if (is_strong(function_language_mode())) { 6562 return graph()->GetConstantUndefined();
6563 return New<HCallRuntime>(
6564 Runtime::FunctionForId(Runtime::kThrowStrongModeImplicitConversion),
6565 0);
6566 } else {
6567 return graph()->GetConstantUndefined();
6568 }
6569 } 6563 }
6570 6564
6571 if (info->IsData()) { 6565 if (info->IsData()) {
6572 if (info->IsLoad()) { 6566 if (info->IsLoad()) {
6573 return BuildLoadNamedField(info, checked_holder); 6567 return BuildLoadNamedField(info, checked_holder);
6574 } else { 6568 } else {
6575 return BuildStoreNamedField(info, checked_object, value); 6569 return BuildStoreNamedField(info, checked_object, value);
6576 } 6570 }
6577 } 6571 }
6578 6572
(...skipping 1883 matching lines...) Expand 10 before | Expand all | Expand 10 after
8462 // All declarations must be inlineable. 8456 // All declarations must be inlineable.
8463 ZoneList<Declaration*>* decls = target_info.scope()->declarations(); 8457 ZoneList<Declaration*>* decls = target_info.scope()->declarations();
8464 int decl_count = decls->length(); 8458 int decl_count = decls->length();
8465 for (int i = 0; i < decl_count; ++i) { 8459 for (int i = 0; i < decl_count; ++i) {
8466 if (!decls->at(i)->IsInlineable()) { 8460 if (!decls->at(i)->IsInlineable()) {
8467 TraceInline(target, caller, "target has non-trivial declaration"); 8461 TraceInline(target, caller, "target has non-trivial declaration");
8468 return false; 8462 return false;
8469 } 8463 }
8470 } 8464 }
8471 8465
8472 // In strong mode it is an error to call a function with too few arguments.
8473 // In that case do not inline because then the arity check would be skipped.
8474 if (is_strong(function->language_mode()) &&
8475 arguments_count < function->parameter_count()) {
8476 TraceInline(target, caller,
8477 "too few arguments passed to a strong function");
8478 return false;
8479 }
8480
8481 // Generate the deoptimization data for the unoptimized version of 8466 // Generate the deoptimization data for the unoptimized version of
8482 // the target function if we don't already have it. 8467 // the target function if we don't already have it.
8483 if (!Compiler::EnsureDeoptimizationSupport(&target_info)) { 8468 if (!Compiler::EnsureDeoptimizationSupport(&target_info)) {
8484 TraceInline(target, caller, "could not generate deoptimization info"); 8469 TraceInline(target, caller, "could not generate deoptimization info");
8485 return false; 8470 return false;
8486 } 8471 }
8487 // Remember that we inlined this function. This needs to be called right 8472 // Remember that we inlined this function. This needs to be called right
8488 // after the EnsureDeoptimizationSupport call so that the code flusher 8473 // after the EnsureDeoptimizationSupport call so that the code flusher
8489 // does not remove the code with the deoptimization support. 8474 // does not remove the code with the deoptimization support.
8490 top_info()->AddInlinedFunction(target_info.shared_info()); 8475 top_info()->AddInlinedFunction(target_info.shared_info());
(...skipping 2172 matching lines...) Expand 10 before | Expand all | Expand 10 after
10663 10648
10664 HInstruction* HOptimizedGraphBuilder::BuildIncrement( 10649 HInstruction* HOptimizedGraphBuilder::BuildIncrement(
10665 bool returns_original_input, 10650 bool returns_original_input,
10666 CountOperation* expr) { 10651 CountOperation* expr) {
10667 // The input to the count operation is on top of the expression stack. 10652 // The input to the count operation is on top of the expression stack.
10668 Representation rep = RepresentationFor(expr->type()); 10653 Representation rep = RepresentationFor(expr->type());
10669 if (rep.IsNone() || rep.IsTagged()) { 10654 if (rep.IsNone() || rep.IsTagged()) {
10670 rep = Representation::Smi(); 10655 rep = Representation::Smi();
10671 } 10656 }
10672 10657
10673 if (returns_original_input && !is_strong(function_language_mode())) { 10658 if (returns_original_input) {
10674 // We need an explicit HValue representing ToNumber(input). The 10659 // We need an explicit HValue representing ToNumber(input). The
10675 // actual HChange instruction we need is (sometimes) added in a later 10660 // actual HChange instruction we need is (sometimes) added in a later
10676 // phase, so it is not available now to be used as an input to HAdd and 10661 // phase, so it is not available now to be used as an input to HAdd and
10677 // as the return value. 10662 // as the return value.
10678 HInstruction* number_input = AddUncasted<HForceRepresentation>(Pop(), rep); 10663 HInstruction* number_input = AddUncasted<HForceRepresentation>(Pop(), rep);
10679 if (!rep.IsDouble()) { 10664 if (!rep.IsDouble()) {
10680 number_input->SetFlag(HInstruction::kFlexibleRepresentation); 10665 number_input->SetFlag(HInstruction::kFlexibleRepresentation);
10681 number_input->SetFlag(HInstruction::kCannotBeTagged); 10666 number_input->SetFlag(HInstruction::kCannotBeTagged);
10682 } 10667 }
10683 Push(number_input); 10668 Push(number_input);
10684 } 10669 }
10685 10670
10686 // The addition has no side effects, so we do not need 10671 // The addition has no side effects, so we do not need
10687 // to simulate the expression stack after this instruction. 10672 // to simulate the expression stack after this instruction.
10688 // Any later failures deopt to the load of the input or earlier. 10673 // Any later failures deopt to the load of the input or earlier.
10689 HConstant* delta = (expr->op() == Token::INC) 10674 HConstant* delta = (expr->op() == Token::INC)
10690 ? graph()->GetConstant1() 10675 ? graph()->GetConstant1()
10691 : graph()->GetConstantMinus1(); 10676 : graph()->GetConstantMinus1();
10692 HInstruction* instr = AddUncasted<HAdd>(Top(), delta); 10677 HInstruction* instr = AddUncasted<HAdd>(Top(), delta);
10693 if (instr->IsAdd()) { 10678 if (instr->IsAdd()) {
10694 HAdd* add = HAdd::cast(instr); 10679 HAdd* add = HAdd::cast(instr);
10695 add->set_observed_input_representation(1, rep); 10680 add->set_observed_input_representation(1, rep);
10696 add->set_observed_input_representation(2, Representation::Smi()); 10681 add->set_observed_input_representation(2, Representation::Smi());
10697 } 10682 }
10698 if (!is_strong(function_language_mode())) { 10683 instr->ClearAllSideEffects();
10699 instr->ClearAllSideEffects();
10700 } else {
10701 Add<HSimulate>(expr->ToNumberId(), REMOVABLE_SIMULATE);
10702 }
10703 instr->SetFlag(HInstruction::kCannotBeTagged); 10684 instr->SetFlag(HInstruction::kCannotBeTagged);
10704 return instr; 10685 return instr;
10705 } 10686 }
10706 10687
10707 10688
10708 void HOptimizedGraphBuilder::BuildStoreForEffect( 10689 void HOptimizedGraphBuilder::BuildStoreForEffect(
10709 Expression* expr, Property* prop, FeedbackVectorSlot slot, BailoutId ast_id, 10690 Expression* expr, Property* prop, FeedbackVectorSlot slot, BailoutId ast_id,
10710 BailoutId return_id, HValue* object, HValue* key, HValue* value) { 10691 BailoutId return_id, HValue* object, HValue* key, HValue* value) {
10711 EffectContext for_effect(this); 10692 EffectContext for_effect(this);
10712 Push(object); 10693 Push(object);
(...skipping 2813 matching lines...) Expand 10 before | Expand all | Expand 10 after
13526 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13507 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13527 } 13508 }
13528 13509
13529 #ifdef DEBUG 13510 #ifdef DEBUG
13530 graph_->Verify(false); // No full verify. 13511 graph_->Verify(false); // No full verify.
13531 #endif 13512 #endif
13532 } 13513 }
13533 13514
13534 } // namespace internal 13515 } // namespace internal
13535 } // namespace v8 13516 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-inlining.cc ('k') | src/d8.cc » ('j') | src/globals.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698