| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 622e37a1959eab9ee845d6a637046fdc1a19a48d..fb127ec4faee25ce8a4df62d7460f796e70fec0f 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -99,27 +99,27 @@ void HBasicBlock::MarkUnreachable() {
|
|
|
|
|
| void HBasicBlock::AttachLoopInformation() {
|
| - ASSERT(!IsLoopHeader());
|
| + DCHECK(!IsLoopHeader());
|
| loop_information_ = new(zone()) HLoopInformation(this, zone());
|
| }
|
|
|
|
|
| void HBasicBlock::DetachLoopInformation() {
|
| - ASSERT(IsLoopHeader());
|
| + DCHECK(IsLoopHeader());
|
| loop_information_ = NULL;
|
| }
|
|
|
|
|
| void HBasicBlock::AddPhi(HPhi* phi) {
|
| - ASSERT(!IsStartBlock());
|
| + DCHECK(!IsStartBlock());
|
| phis_.Add(phi, zone());
|
| phi->SetBlock(this);
|
| }
|
|
|
|
|
| void HBasicBlock::RemovePhi(HPhi* phi) {
|
| - ASSERT(phi->block() == this);
|
| - ASSERT(phis_.Contains(phi));
|
| + DCHECK(phi->block() == this);
|
| + DCHECK(phis_.Contains(phi));
|
| phi->Kill();
|
| phis_.RemoveElement(phi);
|
| phi->SetBlock(NULL);
|
| @@ -128,22 +128,22 @@ void HBasicBlock::RemovePhi(HPhi* phi) {
|
|
|
| void HBasicBlock::AddInstruction(HInstruction* instr,
|
| HSourcePosition position) {
|
| - ASSERT(!IsStartBlock() || !IsFinished());
|
| - ASSERT(!instr->IsLinked());
|
| - ASSERT(!IsFinished());
|
| + DCHECK(!IsStartBlock() || !IsFinished());
|
| + DCHECK(!instr->IsLinked());
|
| + DCHECK(!IsFinished());
|
|
|
| if (!position.IsUnknown()) {
|
| instr->set_position(position);
|
| }
|
| if (first_ == NULL) {
|
| - ASSERT(last_environment() != NULL);
|
| - ASSERT(!last_environment()->ast_id().IsNone());
|
| + DCHECK(last_environment() != NULL);
|
| + DCHECK(!last_environment()->ast_id().IsNone());
|
| HBlockEntry* entry = new(zone()) HBlockEntry();
|
| entry->InitializeAsFirst(this);
|
| if (!position.IsUnknown()) {
|
| entry->set_position(position);
|
| } else {
|
| - ASSERT(!FLAG_hydrogen_track_positions ||
|
| + DCHECK(!FLAG_hydrogen_track_positions ||
|
| !graph()->info()->IsOptimizing());
|
| }
|
| first_ = last_ = entry;
|
| @@ -164,9 +164,9 @@ HPhi* HBasicBlock::AddNewPhi(int merged_index) {
|
|
|
| HSimulate* HBasicBlock::CreateSimulate(BailoutId ast_id,
|
| RemovableSimulate removable) {
|
| - ASSERT(HasEnvironment());
|
| + DCHECK(HasEnvironment());
|
| HEnvironment* environment = last_environment();
|
| - ASSERT(ast_id.IsNone() ||
|
| + DCHECK(ast_id.IsNone() ||
|
| ast_id == BailoutId::StubEntry() ||
|
| environment->closure()->shared()->VerifyBailoutId(ast_id));
|
|
|
| @@ -197,7 +197,7 @@ HSimulate* HBasicBlock::CreateSimulate(BailoutId ast_id,
|
|
|
|
|
| void HBasicBlock::Finish(HControlInstruction* end, HSourcePosition position) {
|
| - ASSERT(!IsFinished());
|
| + DCHECK(!IsFinished());
|
| AddInstruction(end, position);
|
| end_ = end;
|
| for (HSuccessorIterator it(end); !it.Done(); it.Advance()) {
|
| @@ -234,8 +234,8 @@ void HBasicBlock::AddLeaveInlined(HValue* return_value,
|
| HBasicBlock* target = state->function_return();
|
| bool drop_extra = state->inlining_kind() == NORMAL_RETURN;
|
|
|
| - ASSERT(target->IsInlineReturnTarget());
|
| - ASSERT(return_value != NULL);
|
| + DCHECK(target->IsInlineReturnTarget());
|
| + DCHECK(return_value != NULL);
|
| HEnvironment* env = last_environment();
|
| int argument_count = env->arguments_environment()->parameter_count();
|
| AddInstruction(new(zone()) HLeaveInlined(state->entry(), argument_count),
|
| @@ -249,8 +249,8 @@ void HBasicBlock::AddLeaveInlined(HValue* return_value,
|
|
|
|
|
| void HBasicBlock::SetInitialEnvironment(HEnvironment* env) {
|
| - ASSERT(!HasEnvironment());
|
| - ASSERT(first() == NULL);
|
| + DCHECK(!HasEnvironment());
|
| + DCHECK(first() == NULL);
|
| UpdateEnvironment(env);
|
| }
|
|
|
| @@ -263,12 +263,12 @@ void HBasicBlock::UpdateEnvironment(HEnvironment* env) {
|
|
|
| void HBasicBlock::SetJoinId(BailoutId ast_id) {
|
| int length = predecessors_.length();
|
| - ASSERT(length > 0);
|
| + DCHECK(length > 0);
|
| for (int i = 0; i < length; i++) {
|
| HBasicBlock* predecessor = predecessors_[i];
|
| - ASSERT(predecessor->end()->IsGoto());
|
| + DCHECK(predecessor->end()->IsGoto());
|
| HSimulate* simulate = HSimulate::cast(predecessor->end()->previous());
|
| - ASSERT(i != 0 ||
|
| + DCHECK(i != 0 ||
|
| (predecessor->last_environment()->closure().is_null() ||
|
| predecessor->last_environment()->closure()->shared()
|
| ->VerifyBailoutId(ast_id)));
|
| @@ -306,7 +306,7 @@ int HBasicBlock::LoopNestingDepth() const {
|
|
|
|
|
| void HBasicBlock::PostProcessLoopHeader(IterationStatement* stmt) {
|
| - ASSERT(IsLoopHeader());
|
| + DCHECK(IsLoopHeader());
|
|
|
| SetJoinId(stmt->EntryId());
|
| if (predecessors()->length() == 1) {
|
| @@ -324,10 +324,10 @@ void HBasicBlock::PostProcessLoopHeader(IterationStatement* stmt) {
|
|
|
|
|
| void HBasicBlock::MarkSuccEdgeUnreachable(int succ) {
|
| - ASSERT(IsFinished());
|
| + DCHECK(IsFinished());
|
| HBasicBlock* succ_block = end()->SuccessorAt(succ);
|
|
|
| - ASSERT(succ_block->predecessors()->length() == 1);
|
| + DCHECK(succ_block->predecessors()->length() == 1);
|
| succ_block->MarkUnreachable();
|
| }
|
|
|
| @@ -337,10 +337,10 @@ void HBasicBlock::RegisterPredecessor(HBasicBlock* pred) {
|
| // Only loop header blocks can have a predecessor added after
|
| // instructions have been added to the block (they have phis for all
|
| // values in the environment, these phis may be eliminated later).
|
| - ASSERT(IsLoopHeader() || first_ == NULL);
|
| + DCHECK(IsLoopHeader() || first_ == NULL);
|
| HEnvironment* incoming_env = pred->last_environment();
|
| if (IsLoopHeader()) {
|
| - ASSERT(phis()->length() == incoming_env->length());
|
| + DCHECK(phis()->length() == incoming_env->length());
|
| for (int i = 0; i < phis_.length(); ++i) {
|
| phis_[i]->AddInput(incoming_env->values()->at(i));
|
| }
|
| @@ -348,7 +348,7 @@ void HBasicBlock::RegisterPredecessor(HBasicBlock* pred) {
|
| last_environment()->AddIncomingEdge(this, pred->last_environment());
|
| }
|
| } else if (!HasEnvironment() && !IsFinished()) {
|
| - ASSERT(!IsLoopHeader());
|
| + DCHECK(!IsLoopHeader());
|
| SetInitialEnvironment(pred->last_environment()->Copy());
|
| }
|
|
|
| @@ -357,7 +357,7 @@ void HBasicBlock::RegisterPredecessor(HBasicBlock* pred) {
|
|
|
|
|
| void HBasicBlock::AddDominatedBlock(HBasicBlock* block) {
|
| - ASSERT(!dominated_blocks_.Contains(block));
|
| + DCHECK(!dominated_blocks_.Contains(block));
|
| // Keep the list of dominated blocks sorted such that if there is two
|
| // succeeding block in this list, the predecessor is before the successor.
|
| int index = 0;
|
| @@ -383,11 +383,11 @@ void HBasicBlock::AssignCommonDominator(HBasicBlock* other) {
|
| } else {
|
| second = second->dominator();
|
| }
|
| - ASSERT(first != NULL && second != NULL);
|
| + DCHECK(first != NULL && second != NULL);
|
| }
|
|
|
| if (dominator_ != first) {
|
| - ASSERT(dominator_->dominated_blocks_.Contains(this));
|
| + DCHECK(dominator_->dominated_blocks_.Contains(this));
|
| dominator_->dominated_blocks_.RemoveElement(this);
|
| dominator_ = first;
|
| first->AddDominatedBlock(this);
|
| @@ -429,7 +429,7 @@ void HBasicBlock::AssignLoopSuccessorDominators() {
|
| // dominator information about the current loop that's being processed,
|
| // and not nested loops, which will be processed when
|
| // AssignLoopSuccessorDominators gets called on their header.
|
| - ASSERT(outstanding_successors >= 0);
|
| + DCHECK(outstanding_successors >= 0);
|
| HBasicBlock* parent_loop_header = dominator_candidate->parent_loop_header();
|
| if (outstanding_successors == 0 &&
|
| (parent_loop_header == this && !dominator_candidate->IsLoopHeader())) {
|
| @@ -443,7 +443,7 @@ void HBasicBlock::AssignLoopSuccessorDominators() {
|
| if (successor->block_id() > dominator_candidate->block_id() &&
|
| successor->block_id() <= last->block_id()) {
|
| // Backwards edges must land on loop headers.
|
| - ASSERT(successor->block_id() > dominator_candidate->block_id() ||
|
| + DCHECK(successor->block_id() > dominator_candidate->block_id() ||
|
| successor->IsLoopHeader());
|
| outstanding_successors++;
|
| }
|
| @@ -464,13 +464,13 @@ int HBasicBlock::PredecessorIndexOf(HBasicBlock* predecessor) const {
|
| #ifdef DEBUG
|
| void HBasicBlock::Verify() {
|
| // Check that every block is finished.
|
| - ASSERT(IsFinished());
|
| - ASSERT(block_id() >= 0);
|
| + DCHECK(IsFinished());
|
| + DCHECK(block_id() >= 0);
|
|
|
| // Check that the incoming edges are in edge split form.
|
| if (predecessors_.length() > 1) {
|
| for (int i = 0; i < predecessors_.length(); ++i) {
|
| - ASSERT(predecessors_[i]->end()->SecondSuccessor() == NULL);
|
| + DCHECK(predecessors_[i]->end()->SecondSuccessor() == NULL);
|
| }
|
| }
|
| }
|
| @@ -573,10 +573,10 @@ void HGraph::Verify(bool do_full_verify) const {
|
| // Check that every block contains at least one node and that only the last
|
| // node is a control instruction.
|
| HInstruction* current = block->first();
|
| - ASSERT(current != NULL && current->IsBlockEntry());
|
| + DCHECK(current != NULL && current->IsBlockEntry());
|
| while (current != NULL) {
|
| - ASSERT((current->next() == NULL) == current->IsControlInstruction());
|
| - ASSERT(current->block() == block);
|
| + DCHECK((current->next() == NULL) == current->IsControlInstruction());
|
| + DCHECK(current->block() == block);
|
| current->Verify();
|
| current = current->next();
|
| }
|
| @@ -584,13 +584,13 @@ void HGraph::Verify(bool do_full_verify) const {
|
| // Check that successors are correctly set.
|
| HBasicBlock* first = block->end()->FirstSuccessor();
|
| HBasicBlock* second = block->end()->SecondSuccessor();
|
| - ASSERT(second == NULL || first != NULL);
|
| + DCHECK(second == NULL || first != NULL);
|
|
|
| // Check that the predecessor array is correct.
|
| if (first != NULL) {
|
| - ASSERT(first->predecessors()->Contains(block));
|
| + DCHECK(first->predecessors()->Contains(block));
|
| if (second != NULL) {
|
| - ASSERT(second->predecessors()->Contains(block));
|
| + DCHECK(second->predecessors()->Contains(block));
|
| }
|
| }
|
|
|
| @@ -607,36 +607,36 @@ void HGraph::Verify(bool do_full_verify) const {
|
| block->predecessors()->first()->last_environment()->ast_id();
|
| for (int k = 0; k < block->predecessors()->length(); k++) {
|
| HBasicBlock* predecessor = block->predecessors()->at(k);
|
| - ASSERT(predecessor->end()->IsGoto() ||
|
| + DCHECK(predecessor->end()->IsGoto() ||
|
| predecessor->end()->IsDeoptimize());
|
| - ASSERT(predecessor->last_environment()->ast_id() == id);
|
| + DCHECK(predecessor->last_environment()->ast_id() == id);
|
| }
|
| }
|
| }
|
|
|
| // Check special property of first block to have no predecessors.
|
| - ASSERT(blocks_.at(0)->predecessors()->is_empty());
|
| + DCHECK(blocks_.at(0)->predecessors()->is_empty());
|
|
|
| if (do_full_verify) {
|
| // Check that the graph is fully connected.
|
| ReachabilityAnalyzer analyzer(entry_block_, blocks_.length(), NULL);
|
| - ASSERT(analyzer.visited_count() == blocks_.length());
|
| + DCHECK(analyzer.visited_count() == blocks_.length());
|
|
|
| // Check that entry block dominator is NULL.
|
| - ASSERT(entry_block_->dominator() == NULL);
|
| + DCHECK(entry_block_->dominator() == NULL);
|
|
|
| // Check dominators.
|
| for (int i = 0; i < blocks_.length(); ++i) {
|
| HBasicBlock* block = blocks_.at(i);
|
| if (block->dominator() == NULL) {
|
| // Only start block may have no dominator assigned to.
|
| - ASSERT(i == 0);
|
| + DCHECK(i == 0);
|
| } else {
|
| // Assert that block is unreachable if dominator must not be visited.
|
| ReachabilityAnalyzer dominator_analyzer(entry_block_,
|
| blocks_.length(),
|
| block->dominator());
|
| - ASSERT(!dominator_analyzer.reachable()->Contains(block->block_id()));
|
| + DCHECK(!dominator_analyzer.reachable()->Contains(block->block_id()));
|
| }
|
| }
|
| }
|
| @@ -792,7 +792,7 @@ void HGraphBuilder::IfBuilder::Initialize(HGraphBuilder* builder) {
|
|
|
| HControlInstruction* HGraphBuilder::IfBuilder::AddCompare(
|
| HControlInstruction* compare) {
|
| - ASSERT(did_then_ == did_else_);
|
| + DCHECK(did_then_ == did_else_);
|
| if (did_else_) {
|
| // Handle if-then-elseif
|
| did_else_if_ = true;
|
| @@ -828,8 +828,8 @@ HControlInstruction* HGraphBuilder::IfBuilder::AddCompare(
|
|
|
|
|
| void HGraphBuilder::IfBuilder::Or() {
|
| - ASSERT(!needs_compare_);
|
| - ASSERT(!did_and_);
|
| + DCHECK(!needs_compare_);
|
| + DCHECK(!did_and_);
|
| did_or_ = true;
|
| HEnvironment* env = first_false_block_->last_environment();
|
| if (split_edge_merge_block_ == NULL) {
|
| @@ -843,8 +843,8 @@ void HGraphBuilder::IfBuilder::Or() {
|
|
|
|
|
| void HGraphBuilder::IfBuilder::And() {
|
| - ASSERT(!needs_compare_);
|
| - ASSERT(!did_or_);
|
| + DCHECK(!needs_compare_);
|
| + DCHECK(!did_or_);
|
| did_and_ = true;
|
| HEnvironment* env = first_false_block_->last_environment();
|
| if (split_edge_merge_block_ == NULL) {
|
| @@ -859,15 +859,15 @@ void HGraphBuilder::IfBuilder::And() {
|
|
|
| void HGraphBuilder::IfBuilder::CaptureContinuation(
|
| HIfContinuation* continuation) {
|
| - ASSERT(!did_else_if_);
|
| - ASSERT(!finished_);
|
| - ASSERT(!captured_);
|
| + DCHECK(!did_else_if_);
|
| + DCHECK(!finished_);
|
| + DCHECK(!captured_);
|
|
|
| HBasicBlock* true_block = NULL;
|
| HBasicBlock* false_block = NULL;
|
| Finish(&true_block, &false_block);
|
| - ASSERT(true_block != NULL);
|
| - ASSERT(false_block != NULL);
|
| + DCHECK(true_block != NULL);
|
| + DCHECK(false_block != NULL);
|
| continuation->Capture(true_block, false_block);
|
| captured_ = true;
|
| builder()->set_current_block(NULL);
|
| @@ -876,19 +876,19 @@ void HGraphBuilder::IfBuilder::CaptureContinuation(
|
|
|
|
|
| void HGraphBuilder::IfBuilder::JoinContinuation(HIfContinuation* continuation) {
|
| - ASSERT(!did_else_if_);
|
| - ASSERT(!finished_);
|
| - ASSERT(!captured_);
|
| + DCHECK(!did_else_if_);
|
| + DCHECK(!finished_);
|
| + DCHECK(!captured_);
|
| HBasicBlock* true_block = NULL;
|
| HBasicBlock* false_block = NULL;
|
| Finish(&true_block, &false_block);
|
| merge_at_join_blocks_ = NULL;
|
| if (true_block != NULL && !true_block->IsFinished()) {
|
| - ASSERT(continuation->IsTrueReachable());
|
| + DCHECK(continuation->IsTrueReachable());
|
| builder()->GotoNoSimulate(true_block, continuation->true_branch());
|
| }
|
| if (false_block != NULL && !false_block->IsFinished()) {
|
| - ASSERT(continuation->IsFalseReachable());
|
| + DCHECK(continuation->IsFalseReachable());
|
| builder()->GotoNoSimulate(false_block, continuation->false_branch());
|
| }
|
| captured_ = true;
|
| @@ -897,8 +897,8 @@ void HGraphBuilder::IfBuilder::JoinContinuation(HIfContinuation* continuation) {
|
|
|
|
|
| void HGraphBuilder::IfBuilder::Then() {
|
| - ASSERT(!captured_);
|
| - ASSERT(!finished_);
|
| + DCHECK(!captured_);
|
| + DCHECK(!finished_);
|
| did_then_ = true;
|
| if (needs_compare_) {
|
| // Handle if's without any expressions, they jump directly to the "else"
|
| @@ -918,9 +918,9 @@ void HGraphBuilder::IfBuilder::Then() {
|
|
|
|
|
| void HGraphBuilder::IfBuilder::Else() {
|
| - ASSERT(did_then_);
|
| - ASSERT(!captured_);
|
| - ASSERT(!finished_);
|
| + DCHECK(did_then_);
|
| + DCHECK(!captured_);
|
| + DCHECK(!finished_);
|
| AddMergeAtJoinBlock(false);
|
| builder()->set_current_block(first_false_block_);
|
| pending_merge_block_ = true;
|
| @@ -929,7 +929,7 @@ void HGraphBuilder::IfBuilder::Else() {
|
|
|
|
|
| void HGraphBuilder::IfBuilder::Deopt(const char* reason) {
|
| - ASSERT(did_then_);
|
| + DCHECK(did_then_);
|
| builder()->Add<HDeoptimize>(reason, Deoptimizer::EAGER);
|
| AddMergeAtJoinBlock(true);
|
| }
|
| @@ -946,12 +946,12 @@ void HGraphBuilder::IfBuilder::Return(HValue* value) {
|
| void HGraphBuilder::IfBuilder::AddMergeAtJoinBlock(bool deopt) {
|
| if (!pending_merge_block_) return;
|
| HBasicBlock* block = builder()->current_block();
|
| - ASSERT(block == NULL || !block->IsFinished());
|
| + DCHECK(block == NULL || !block->IsFinished());
|
| MergeAtJoinBlock* record = new (builder()->zone())
|
| MergeAtJoinBlock(block, deopt, merge_at_join_blocks_);
|
| merge_at_join_blocks_ = record;
|
| if (block != NULL) {
|
| - ASSERT(block->end() == NULL);
|
| + DCHECK(block->end() == NULL);
|
| if (deopt) {
|
| normal_merge_at_join_block_count_++;
|
| } else {
|
| @@ -964,7 +964,7 @@ void HGraphBuilder::IfBuilder::AddMergeAtJoinBlock(bool deopt) {
|
|
|
|
|
| void HGraphBuilder::IfBuilder::Finish() {
|
| - ASSERT(!finished_);
|
| + DCHECK(!finished_);
|
| if (!did_then_) {
|
| Then();
|
| }
|
| @@ -989,7 +989,7 @@ void HGraphBuilder::IfBuilder::Finish(HBasicBlock** then_continuation,
|
| if (then_continuation != NULL) {
|
| *then_continuation = then_record->block_;
|
| }
|
| - ASSERT(then_record->next_ == NULL);
|
| + DCHECK(then_record->next_ == NULL);
|
| }
|
|
|
|
|
| @@ -999,7 +999,7 @@ void HGraphBuilder::IfBuilder::End() {
|
|
|
| int total_merged_blocks = normal_merge_at_join_block_count_ +
|
| deopt_merge_at_join_block_count_;
|
| - ASSERT(total_merged_blocks >= 1);
|
| + DCHECK(total_merged_blocks >= 1);
|
| HBasicBlock* merge_block =
|
| total_merged_blocks == 1 ? NULL : builder()->graph()->CreateBasicBlock();
|
|
|
| @@ -1073,7 +1073,7 @@ HValue* HGraphBuilder::LoopBuilder::BeginBody(
|
| HValue* initial,
|
| HValue* terminating,
|
| Token::Value token) {
|
| - ASSERT(direction_ != kWhileTrue);
|
| + DCHECK(direction_ != kWhileTrue);
|
| HEnvironment* env = builder_->environment();
|
| phi_ = header_block_->AddNewPhi(env->values()->length());
|
| phi_->AddInput(initial);
|
| @@ -1111,7 +1111,7 @@ HValue* HGraphBuilder::LoopBuilder::BeginBody(
|
|
|
|
|
| void HGraphBuilder::LoopBuilder::BeginBody(int drop_count) {
|
| - ASSERT(direction_ == kWhileTrue);
|
| + DCHECK(direction_ == kWhileTrue);
|
| HEnvironment* env = builder_->environment();
|
| builder_->GotoNoSimulate(header_block_);
|
| builder_->set_current_block(header_block_);
|
| @@ -1138,7 +1138,7 @@ void HGraphBuilder::LoopBuilder::Break() {
|
|
|
|
|
| void HGraphBuilder::LoopBuilder::EndBody() {
|
| - ASSERT(!finished_);
|
| + DCHECK(!finished_);
|
|
|
| if (direction_ == kPostIncrement || direction_ == kPostDecrement) {
|
| if (direction_ == kPostIncrement) {
|
| @@ -1180,8 +1180,8 @@ HGraph* HGraphBuilder::CreateGraph() {
|
|
|
|
|
| HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) {
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(!FLAG_hydrogen_track_positions ||
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(!FLAG_hydrogen_track_positions ||
|
| !position_.IsUnknown() ||
|
| !info_->IsOptimizing());
|
| current_block()->AddInstruction(instr, source_position());
|
| @@ -1193,7 +1193,7 @@ HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) {
|
|
|
|
|
| void HGraphBuilder::FinishCurrentBlock(HControlInstruction* last) {
|
| - ASSERT(!FLAG_hydrogen_track_positions ||
|
| + DCHECK(!FLAG_hydrogen_track_positions ||
|
| !info_->IsOptimizing() ||
|
| !position_.IsUnknown());
|
| current_block()->Finish(last, source_position());
|
| @@ -1204,7 +1204,7 @@ void HGraphBuilder::FinishCurrentBlock(HControlInstruction* last) {
|
|
|
|
|
| void HGraphBuilder::FinishExitCurrentBlock(HControlInstruction* instruction) {
|
| - ASSERT(!FLAG_hydrogen_track_positions || !info_->IsOptimizing() ||
|
| + DCHECK(!FLAG_hydrogen_track_positions || !info_->IsOptimizing() ||
|
| !position_.IsUnknown());
|
| current_block()->FinishExit(instruction, source_position());
|
| if (instruction->IsReturn() || instruction->IsAbnormalExit()) {
|
| @@ -1228,8 +1228,8 @@ void HGraphBuilder::AddIncrementCounter(StatsCounter* counter) {
|
|
|
| void HGraphBuilder::AddSimulate(BailoutId id,
|
| RemovableSimulate removable) {
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(!graph()->IsInsideNoSideEffectsScope());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(!graph()->IsInsideNoSideEffectsScope());
|
| current_block()->AddNewSimulate(id, source_position(), removable);
|
| }
|
|
|
| @@ -1274,7 +1274,7 @@ void HGraphBuilder::FinishExitWithHardDeoptimization(const char* reason) {
|
|
|
| HValue* HGraphBuilder::BuildCheckString(HValue* string) {
|
| if (!string->type().IsString()) {
|
| - ASSERT(!string->IsConstant() ||
|
| + DCHECK(!string->IsConstant() ||
|
| !HConstant::cast(string)->HasStringValue());
|
| BuildCheckHeapObject(string);
|
| return Add<HCheckInstanceType>(string, HCheckInstanceType::IS_STRING);
|
| @@ -1393,7 +1393,7 @@ void HGraphBuilder::BuildTransitionElementsKind(HValue* object,
|
| ElementsKind from_kind,
|
| ElementsKind to_kind,
|
| bool is_jsarray) {
|
| - ASSERT(!IsFastHoleyElementsKind(from_kind) ||
|
| + DCHECK(!IsFastHoleyElementsKind(from_kind) ||
|
| IsFastHoleyElementsKind(to_kind));
|
|
|
| if (AllocationSite::GetMode(from_kind, to_kind) == TRACK_ALLOCATION_SITE) {
|
| @@ -2066,7 +2066,7 @@ HValue* HGraphBuilder::BuildCreateConsString(
|
| // pass CONS_STRING_TYPE or CONS_ASCII_STRING_TYPE here, so we just use
|
| // CONS_STRING_TYPE here. Below we decide whether the cons string is
|
| // one-byte or two-byte and set the appropriate map.
|
| - ASSERT(HAllocate::CompatibleInstanceTypes(CONS_STRING_TYPE,
|
| + DCHECK(HAllocate::CompatibleInstanceTypes(CONS_STRING_TYPE,
|
| CONS_ASCII_STRING_TYPE));
|
| HAllocate* result = BuildAllocate(Add<HConstant>(ConsString::kSize),
|
| HType::String(), CONS_STRING_TYPE,
|
| @@ -2144,7 +2144,7 @@ void HGraphBuilder::BuildCopySeqStringChars(HValue* src,
|
| HValue* dst_offset,
|
| String::Encoding dst_encoding,
|
| HValue* length) {
|
| - ASSERT(dst_encoding != String::ONE_BYTE_ENCODING ||
|
| + DCHECK(dst_encoding != String::ONE_BYTE_ENCODING ||
|
| src_encoding == String::ONE_BYTE_ENCODING);
|
| LoopBuilder loop(this, context(), LoopBuilder::kPostIncrement);
|
| HValue* index = loop.BeginBody(graph()->GetConstant0(), length, Token::LT);
|
| @@ -2161,7 +2161,7 @@ void HGraphBuilder::BuildCopySeqStringChars(HValue* src,
|
|
|
| HValue* HGraphBuilder::BuildObjectSizeAlignment(
|
| HValue* unaligned_size, int header_size) {
|
| - ASSERT((header_size & kObjectAlignmentMask) == 0);
|
| + DCHECK((header_size & kObjectAlignmentMask) == 0);
|
| HValue* size = AddUncasted<HAdd>(
|
| unaligned_size, Add<HConstant>(static_cast<int32_t>(
|
| header_size + kObjectAlignmentMask)));
|
| @@ -2186,14 +2186,14 @@ HValue* HGraphBuilder::BuildUncheckedStringAdd(
|
| // Do some manual constant folding here.
|
| if (left_length->IsConstant()) {
|
| HConstant* c_left_length = HConstant::cast(left_length);
|
| - ASSERT_NE(0, c_left_length->Integer32Value());
|
| + DCHECK_NE(0, c_left_length->Integer32Value());
|
| if (c_left_length->Integer32Value() + 1 >= ConsString::kMinLength) {
|
| // The right string contains at least one character.
|
| return BuildCreateConsString(length, left, right, allocation_mode);
|
| }
|
| } else if (right_length->IsConstant()) {
|
| HConstant* c_right_length = HConstant::cast(right_length);
|
| - ASSERT_NE(0, c_right_length->Integer32Value());
|
| + DCHECK_NE(0, c_right_length->Integer32Value());
|
| if (c_right_length->Integer32Value() + 1 >= ConsString::kMinLength) {
|
| // The left string contains at least one character.
|
| return BuildCreateConsString(length, left, right, allocation_mode);
|
| @@ -2399,7 +2399,7 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| PropertyAccessType access_type,
|
| LoadKeyedHoleMode load_mode,
|
| KeyedAccessStoreMode store_mode) {
|
| - ASSERT((!IsExternalArrayElementsKind(elements_kind) &&
|
| + DCHECK((!IsExternalArrayElementsKind(elements_kind) &&
|
| !IsFixedTypedArrayElementsKind(elements_kind)) ||
|
| !is_js_array);
|
| // No GVNFlag is necessary for ElementsKind if there is an explicit dependency
|
| @@ -2458,14 +2458,14 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| length_checker.End();
|
| return result;
|
| } else {
|
| - ASSERT(store_mode == STANDARD_STORE);
|
| + DCHECK(store_mode == STANDARD_STORE);
|
| checked_key = Add<HBoundsCheck>(key, length);
|
| return AddElementAccess(
|
| backing_store, checked_key, val,
|
| checked_object, elements_kind, access_type);
|
| }
|
| }
|
| - ASSERT(fast_smi_only_elements ||
|
| + DCHECK(fast_smi_only_elements ||
|
| fast_elements ||
|
| IsFastDoubleElementsKind(elements_kind));
|
|
|
| @@ -2672,7 +2672,7 @@ HInstruction* HGraphBuilder::AddElementAccess(
|
| PropertyAccessType access_type,
|
| LoadKeyedHoleMode load_mode) {
|
| if (access_type == STORE) {
|
| - ASSERT(val != NULL);
|
| + DCHECK(val != NULL);
|
| if (elements_kind == EXTERNAL_UINT8_CLAMPED_ELEMENTS ||
|
| elements_kind == UINT8_CLAMPED_ELEMENTS) {
|
| val = Add<HClampToUint8>(val);
|
| @@ -2681,8 +2681,8 @@ HInstruction* HGraphBuilder::AddElementAccess(
|
| STORE_TO_INITIALIZED_ENTRY);
|
| }
|
|
|
| - ASSERT(access_type == LOAD);
|
| - ASSERT(val == NULL);
|
| + DCHECK(access_type == LOAD);
|
| + DCHECK(val == NULL);
|
| HLoadKeyed* load = Add<HLoadKeyed>(
|
| elements, checked_key, dependency, elements_kind, load_mode);
|
| if (FLAG_opt_safe_uint32_operations &&
|
| @@ -3071,7 +3071,7 @@ void HGraphBuilder::BuildCreateAllocationMemento(
|
| HValue* previous_object,
|
| HValue* previous_object_size,
|
| HValue* allocation_site) {
|
| - ASSERT(allocation_site != NULL);
|
| + DCHECK(allocation_site != NULL);
|
| HInnerAllocatedObject* allocation_memento = Add<HInnerAllocatedObject>(
|
| previous_object, previous_object_size, HType::HeapObject());
|
| AddStoreMapConstant(
|
| @@ -3142,7 +3142,7 @@ HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder,
|
| kind_(kind),
|
| allocation_site_payload_(allocation_site_payload),
|
| constructor_function_(constructor_function) {
|
| - ASSERT(!allocation_site_payload->IsConstant() ||
|
| + DCHECK(!allocation_site_payload->IsConstant() ||
|
| HConstant::cast(allocation_site_payload)->handle(
|
| builder_->isolate())->IsAllocationSite());
|
| mode_ = override_mode == DISABLE_ALLOCATION_SITES
|
| @@ -3454,7 +3454,7 @@ HBasicBlock* HGraph::CreateBasicBlock() {
|
|
|
| void HGraph::FinalizeUniqueness() {
|
| DisallowHeapAllocation no_gc;
|
| - ASSERT(!OptimizingCompilerThread::IsOptimizerThread(isolate()));
|
| + DCHECK(!OptimizingCompilerThread::IsOptimizerThread(isolate()));
|
| for (int i = 0; i < blocks()->length(); ++i) {
|
| for (HInstructionIterator it(blocks()->at(i)); !it.Done(); it.Advance()) {
|
| it.Current()->FinalizeUniqueness();
|
| @@ -3641,7 +3641,7 @@ class PostorderProcessor : public ZoneObject {
|
| return result->SetupLoopMembers(zone, block, block->loop_information(),
|
| loop_header);
|
| } else {
|
| - ASSERT(block->IsFinished());
|
| + DCHECK(block->IsFinished());
|
| kind_ = SUCCESSORS;
|
| loop_header_ = loop_header;
|
| InitializeSuccessors();
|
| @@ -3683,10 +3683,10 @@ class PostorderProcessor : public ZoneObject {
|
| }
|
|
|
| void ClosePostorder(ZoneList<HBasicBlock*>* order, Zone* zone) {
|
| - ASSERT(block_->end()->FirstSuccessor() == NULL ||
|
| + DCHECK(block_->end()->FirstSuccessor() == NULL ||
|
| order->Contains(block_->end()->FirstSuccessor()) ||
|
| block_->end()->FirstSuccessor()->IsLoopHeader());
|
| - ASSERT(block_->end()->SecondSuccessor() == NULL ||
|
| + DCHECK(block_->end()->SecondSuccessor() == NULL ||
|
| order->Contains(block_->end()->SecondSuccessor()) ||
|
| block_->end()->SecondSuccessor()->IsLoopHeader());
|
| order->Add(block_, zone);
|
| @@ -3824,7 +3824,7 @@ void HGraph::OrderBlocks() {
|
| #ifdef DEBUG
|
| // Initially the blocks must not be ordered.
|
| for (int i = 0; i < blocks_.length(); ++i) {
|
| - ASSERT(!blocks_[i]->IsOrdered());
|
| + DCHECK(!blocks_[i]->IsOrdered());
|
| }
|
| #endif
|
|
|
| @@ -3838,7 +3838,7 @@ void HGraph::OrderBlocks() {
|
| #ifdef DEBUG
|
| // Now all blocks must be marked as ordered.
|
| for (int i = 0; i < blocks_.length(); ++i) {
|
| - ASSERT(blocks_[i]->IsOrdered());
|
| + DCHECK(blocks_[i]->IsOrdered());
|
| }
|
| #endif
|
|
|
| @@ -3985,7 +3985,7 @@ AstContext::AstContext(HOptimizedGraphBuilder* owner, Expression::Context kind)
|
| for_typeof_(false) {
|
| owner->set_ast_context(this); // Push.
|
| #ifdef DEBUG
|
| - ASSERT(owner->environment()->frame_type() == JS_FUNCTION);
|
| + DCHECK(owner->environment()->frame_type() == JS_FUNCTION);
|
| original_length_ = owner->environment()->length();
|
| #endif
|
| }
|
| @@ -3997,7 +3997,7 @@ AstContext::~AstContext() {
|
|
|
|
|
| EffectContext::~EffectContext() {
|
| - ASSERT(owner()->HasStackOverflow() ||
|
| + DCHECK(owner()->HasStackOverflow() ||
|
| owner()->current_block() == NULL ||
|
| (owner()->environment()->length() == original_length_ &&
|
| owner()->environment()->frame_type() == JS_FUNCTION));
|
| @@ -4005,7 +4005,7 @@ EffectContext::~EffectContext() {
|
|
|
|
|
| ValueContext::~ValueContext() {
|
| - ASSERT(owner()->HasStackOverflow() ||
|
| + DCHECK(owner()->HasStackOverflow() ||
|
| owner()->current_block() == NULL ||
|
| (owner()->environment()->length() == original_length_ + 1 &&
|
| owner()->environment()->frame_type() == JS_FUNCTION));
|
| @@ -4033,7 +4033,7 @@ void TestContext::ReturnValue(HValue* value) {
|
|
|
|
|
| void EffectContext::ReturnInstruction(HInstruction* instr, BailoutId ast_id) {
|
| - ASSERT(!instr->IsControlInstruction());
|
| + DCHECK(!instr->IsControlInstruction());
|
| owner()->AddInstruction(instr);
|
| if (instr->HasObservableSideEffects()) {
|
| owner()->Add<HSimulate>(ast_id, REMOVABLE_SIMULATE);
|
| @@ -4043,7 +4043,7 @@ void EffectContext::ReturnInstruction(HInstruction* instr, BailoutId ast_id) {
|
|
|
| void EffectContext::ReturnControl(HControlInstruction* instr,
|
| BailoutId ast_id) {
|
| - ASSERT(!instr->HasObservableSideEffects());
|
| + DCHECK(!instr->HasObservableSideEffects());
|
| HBasicBlock* empty_true = owner()->graph()->CreateBasicBlock();
|
| HBasicBlock* empty_false = owner()->graph()->CreateBasicBlock();
|
| instr->SetSuccessorAt(0, empty_true);
|
| @@ -4071,7 +4071,7 @@ void EffectContext::ReturnContinuation(HIfContinuation* continuation,
|
|
|
|
|
| void ValueContext::ReturnInstruction(HInstruction* instr, BailoutId ast_id) {
|
| - ASSERT(!instr->IsControlInstruction());
|
| + DCHECK(!instr->IsControlInstruction());
|
| if (!arguments_allowed() && instr->CheckFlag(HValue::kIsArguments)) {
|
| return owner()->Bailout(kBadValueContextForArgumentsObjectValue);
|
| }
|
| @@ -4084,7 +4084,7 @@ void ValueContext::ReturnInstruction(HInstruction* instr, BailoutId ast_id) {
|
|
|
|
|
| void ValueContext::ReturnControl(HControlInstruction* instr, BailoutId ast_id) {
|
| - ASSERT(!instr->HasObservableSideEffects());
|
| + DCHECK(!instr->HasObservableSideEffects());
|
| if (!arguments_allowed() && instr->CheckFlag(HValue::kIsArguments)) {
|
| return owner()->Bailout(kBadValueContextForArgumentsObjectValue);
|
| }
|
| @@ -4127,7 +4127,7 @@ void ValueContext::ReturnContinuation(HIfContinuation* continuation,
|
|
|
|
|
| void TestContext::ReturnInstruction(HInstruction* instr, BailoutId ast_id) {
|
| - ASSERT(!instr->IsControlInstruction());
|
| + DCHECK(!instr->IsControlInstruction());
|
| HOptimizedGraphBuilder* builder = owner();
|
| builder->AddInstruction(instr);
|
| // We expect a simulate after every expression with side effects, though
|
| @@ -4142,7 +4142,7 @@ void TestContext::ReturnInstruction(HInstruction* instr, BailoutId ast_id) {
|
|
|
|
|
| void TestContext::ReturnControl(HControlInstruction* instr, BailoutId ast_id) {
|
| - ASSERT(!instr->HasObservableSideEffects());
|
| + DCHECK(!instr->HasObservableSideEffects());
|
| HBasicBlock* empty_true = owner()->graph()->CreateBasicBlock();
|
| HBasicBlock* empty_false = owner()->graph()->CreateBasicBlock();
|
| instr->SetSuccessorAt(0, empty_true);
|
| @@ -4307,7 +4307,7 @@ bool HOptimizedGraphBuilder::BuildGraph() {
|
| // due to missing/inadequate type feedback, but rather too aggressive
|
| // optimization. Disable optimistic LICM in that case.
|
| Handle<Code> unoptimized_code(current_info()->shared_info()->code());
|
| - ASSERT(unoptimized_code->kind() == Code::FUNCTION);
|
| + DCHECK(unoptimized_code->kind() == Code::FUNCTION);
|
| Handle<TypeFeedbackInfo> type_info(
|
| TypeFeedbackInfo::cast(unoptimized_code->type_feedback_info()));
|
| int checksum = type_info->own_type_change_checksum();
|
| @@ -4421,7 +4421,7 @@ void HGraph::RestoreActualValues() {
|
| #ifdef DEBUG
|
| for (int i = 0; i < block->phis()->length(); i++) {
|
| HPhi* phi = block->phis()->at(i);
|
| - ASSERT(phi->ActualValue() == phi);
|
| + DCHECK(phi->ActualValue() == phi);
|
| }
|
| #endif
|
|
|
| @@ -4434,7 +4434,7 @@ void HGraph::RestoreActualValues() {
|
| // instructions.
|
| instruction->DeleteAndReplaceWith(instruction->ActualValue());
|
| } else {
|
| - ASSERT(instruction->IsInformativeDefinition());
|
| + DCHECK(instruction->IsInformativeDefinition());
|
| if (instruction->IsPurelyInformativeDefinition()) {
|
| instruction->DeleteAndReplaceWith(instruction->RedefinedOperand());
|
| } else {
|
| @@ -4474,7 +4474,7 @@ void HOptimizedGraphBuilder::SetUpScope(Scope* scope) {
|
|
|
| // Create an arguments object containing the initial parameters. Set the
|
| // initial values of parameters including "this" having parameter index 0.
|
| - ASSERT_EQ(scope->num_parameters() + 1, environment()->parameter_count());
|
| + DCHECK_EQ(scope->num_parameters() + 1, environment()->parameter_count());
|
| HArgumentsObject* arguments_object =
|
| New<HArgumentsObject>(environment()->parameter_count());
|
| for (int i = 0; i < environment()->parameter_count(); ++i) {
|
| @@ -4516,9 +4516,9 @@ void HOptimizedGraphBuilder::VisitStatements(ZoneList<Statement*>* statements) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitBlock(Block* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
|
|
| Scope* outer_scope = scope();
|
| Scope* scope = stmt->scope();
|
| @@ -4576,24 +4576,24 @@ void HOptimizedGraphBuilder::VisitBlock(Block* stmt) {
|
|
|
| void HOptimizedGraphBuilder::VisitExpressionStatement(
|
| ExpressionStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| VisitForEffect(stmt->expression());
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitEmptyStatement(EmptyStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitIfStatement(IfStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| if (stmt->condition()->ToBooleanIsTrue()) {
|
| Add<HSimulate>(stmt->ThenId());
|
| Visit(stmt->then_statement());
|
| @@ -4640,7 +4640,7 @@ HBasicBlock* HOptimizedGraphBuilder::BreakAndContinueScope::Get(
|
| *drop_extra += current->info()->drop_extra();
|
| current = current->next();
|
| }
|
| - ASSERT(current != NULL); // Always found (unless stack is malformed).
|
| + DCHECK(current != NULL); // Always found (unless stack is malformed).
|
| *scope = current->info()->scope();
|
|
|
| if (type == BREAK) {
|
| @@ -4672,9 +4672,9 @@ HBasicBlock* HOptimizedGraphBuilder::BreakAndContinueScope::Get(
|
|
|
| void HOptimizedGraphBuilder::VisitContinueStatement(
|
| ContinueStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| Scope* outer_scope = NULL;
|
| Scope* inner_scope = scope();
|
| int drop_extra = 0;
|
| @@ -4704,9 +4704,9 @@ void HOptimizedGraphBuilder::VisitContinueStatement(
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitBreakStatement(BreakStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| Scope* outer_scope = NULL;
|
| Scope* inner_scope = scope();
|
| int drop_extra = 0;
|
| @@ -4735,9 +4735,9 @@ void HOptimizedGraphBuilder::VisitBreakStatement(BreakStatement* stmt) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitReturnStatement(ReturnStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| FunctionState* state = function_state();
|
| AstContext* context = call_context();
|
| if (context == NULL) {
|
| @@ -4757,7 +4757,7 @@ void HOptimizedGraphBuilder::VisitReturnStatement(ReturnStatement* stmt) {
|
| CHECK_ALIVE(VisitForEffect(stmt->expression()));
|
| Goto(function_return(), state);
|
| } else {
|
| - ASSERT(context->IsValue());
|
| + DCHECK(context->IsValue());
|
| CHECK_ALIVE(VisitForValue(stmt->expression()));
|
| HValue* return_value = Pop();
|
| HValue* receiver = environment()->arguments_environment()->Lookup(0);
|
| @@ -4783,7 +4783,7 @@ void HOptimizedGraphBuilder::VisitReturnStatement(ReturnStatement* stmt) {
|
| } else if (context->IsEffect()) {
|
| Goto(function_return(), state);
|
| } else {
|
| - ASSERT(context->IsValue());
|
| + DCHECK(context->IsValue());
|
| HValue* rhs = environment()->arguments_environment()->Lookup(1);
|
| AddLeaveInlined(rhs, state);
|
| }
|
| @@ -4802,7 +4802,7 @@ void HOptimizedGraphBuilder::VisitReturnStatement(ReturnStatement* stmt) {
|
| Pop();
|
| Goto(function_return(), state);
|
| } else {
|
| - ASSERT(context->IsValue());
|
| + DCHECK(context->IsValue());
|
| CHECK_ALIVE(VisitForValue(stmt->expression()));
|
| AddLeaveInlined(Pop(), state);
|
| }
|
| @@ -4812,17 +4812,17 @@ void HOptimizedGraphBuilder::VisitReturnStatement(ReturnStatement* stmt) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitWithStatement(WithStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| return Bailout(kWithStatement);
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitSwitchStatement(SwitchStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
|
|
| // We only optimize switch statements with a bounded number of clauses.
|
| const int kCaseClauseLimit = 128;
|
| @@ -4934,17 +4934,17 @@ void HOptimizedGraphBuilder::VisitLoopBody(IterationStatement* stmt,
|
| Add<HSimulate>(stmt->StackCheckId());
|
| HStackCheck* stack_check =
|
| HStackCheck::cast(Add<HStackCheck>(HStackCheck::kBackwardsBranch));
|
| - ASSERT(loop_entry->IsLoopHeader());
|
| + DCHECK(loop_entry->IsLoopHeader());
|
| loop_entry->loop_information()->set_stack_check(stack_check);
|
| CHECK_BAILOUT(Visit(stmt->body()));
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitDoWhileStatement(DoWhileStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| - ASSERT(current_block() != NULL);
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| + DCHECK(current_block() != NULL);
|
| HBasicBlock* loop_entry = BuildLoopEntry(stmt);
|
|
|
| BreakAndContinueInfo break_info(stmt, scope());
|
| @@ -4989,10 +4989,10 @@ void HOptimizedGraphBuilder::VisitDoWhileStatement(DoWhileStatement* stmt) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitWhileStatement(WhileStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| - ASSERT(current_block() != NULL);
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| + DCHECK(current_block() != NULL);
|
| HBasicBlock* loop_entry = BuildLoopEntry(stmt);
|
|
|
| // If the condition is constant true, do not generate a branch.
|
| @@ -5029,13 +5029,13 @@ void HOptimizedGraphBuilder::VisitWhileStatement(WhileStatement* stmt) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitForStatement(ForStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| if (stmt->init() != NULL) {
|
| CHECK_ALIVE(Visit(stmt->init()));
|
| }
|
| - ASSERT(current_block() != NULL);
|
| + DCHECK(current_block() != NULL);
|
| HBasicBlock* loop_entry = BuildLoopEntry(stmt);
|
|
|
| HBasicBlock* loop_successor = NULL;
|
| @@ -5078,9 +5078,9 @@ void HOptimizedGraphBuilder::VisitForStatement(ForStatement* stmt) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
|
|
| if (!FLAG_optimize_for_in) {
|
| return Bailout(kForInStatementOptimizationIsDisabled);
|
| @@ -5184,34 +5184,34 @@ void HOptimizedGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitForOfStatement(ForOfStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| return Bailout(kForOfStatement);
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitTryCatchStatement(TryCatchStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| return Bailout(kTryCatchStatement);
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitTryFinallyStatement(
|
| TryFinallyStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| return Bailout(kTryFinallyStatement);
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitDebuggerStatement(DebuggerStatement* stmt) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| return Bailout(kDebuggerStatement);
|
| }
|
|
|
| @@ -5222,9 +5222,9 @@ void HOptimizedGraphBuilder::VisitCaseClause(CaseClause* clause) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitFunctionLiteral(FunctionLiteral* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| Handle<SharedFunctionInfo> shared_info = expr->shared_info();
|
| if (shared_info.is_null()) {
|
| shared_info =
|
| @@ -5240,17 +5240,17 @@ void HOptimizedGraphBuilder::VisitFunctionLiteral(FunctionLiteral* expr) {
|
|
|
| void HOptimizedGraphBuilder::VisitNativeFunctionLiteral(
|
| NativeFunctionLiteral* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| return Bailout(kNativeFunctionLiteral);
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitConditional(Conditional* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| HBasicBlock* cond_true = graph()->CreateBasicBlock();
|
| HBasicBlock* cond_false = graph()->CreateBasicBlock();
|
| CHECK_BAILOUT(VisitForControl(expr->condition(), cond_true, cond_false));
|
| @@ -5304,7 +5304,7 @@ HOptimizedGraphBuilder::GlobalPropertyAccess
|
|
|
|
|
| HValue* HOptimizedGraphBuilder::BuildContextChainWalk(Variable* var) {
|
| - ASSERT(var->IsContextSlot());
|
| + DCHECK(var->IsContextSlot());
|
| HValue* context = environment()->context();
|
| int length = scope()->ContextChainLength(var->scope());
|
| while (length-- > 0) {
|
| @@ -5321,14 +5321,14 @@ void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
|
| current_info()->set_this_has_uses(true);
|
| }
|
|
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| Variable* variable = expr->var();
|
| switch (variable->location()) {
|
| case Variable::UNALLOCATED: {
|
| if (IsLexicalVariableMode(variable->mode())) {
|
| - // TODO(rossberg): should this be an ASSERT?
|
| + // TODO(rossberg): should this be an DCHECK?
|
| return Bailout(kReferenceToGlobalLexicalVariable);
|
| }
|
| // Handle known global constants like 'undefined' specially to avoid a
|
| @@ -5388,7 +5388,7 @@ void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
|
| case Variable::LOCAL: {
|
| HValue* value = LookupAndMakeLive(variable);
|
| if (value == graph()->GetConstantHole()) {
|
| - ASSERT(IsDeclaredVariableMode(variable->mode()) &&
|
| + DCHECK(IsDeclaredVariableMode(variable->mode()) &&
|
| variable->mode() != VAR);
|
| return Bailout(kReferenceToUninitializedVariable);
|
| }
|
| @@ -5422,18 +5422,18 @@ void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitLiteral(Literal* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| HConstant* instr = New<HConstant>(expr->value());
|
| return ast_context()->ReturnInstruction(instr, expr->id());
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitRegExpLiteral(RegExpLiteral* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| Handle<JSFunction> closure = function_state()->compilation_info()->closure();
|
| Handle<FixedArray> literals(closure->literals());
|
| HRegExpLiteral* instr = New<HRegExpLiteral>(literals,
|
| @@ -5465,7 +5465,7 @@ static bool IsFastLiteral(Handle<JSObject> boilerplate,
|
| return false;
|
| }
|
|
|
| - ASSERT(max_depth >= 0 && *max_properties >= 0);
|
| + DCHECK(max_depth >= 0 && *max_properties >= 0);
|
| if (max_depth == 0) return false;
|
|
|
| Isolate* isolate = boilerplate->GetIsolate();
|
| @@ -5520,9 +5520,9 @@ static bool IsFastLiteral(Handle<JSObject> boilerplate,
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| expr->BuildConstantProperties(isolate());
|
| Handle<JSFunction> closure = function_state()->compilation_info()->closure();
|
| HInstruction* literal;
|
| @@ -5585,7 +5585,7 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
|
|
| switch (property->kind()) {
|
| case ObjectLiteral::Property::MATERIALIZED_LITERAL:
|
| - ASSERT(!CompileTimeValue::IsCompileTimeValue(value));
|
| + DCHECK(!CompileTimeValue::IsCompileTimeValue(value));
|
| // Fall through.
|
| case ObjectLiteral::Property::COMPUTED:
|
| if (key->value()->IsInternalizedString()) {
|
| @@ -5603,7 +5603,7 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| PropertyAccessInfo info(this, STORE, ToType(map), name);
|
| if (info.CanAccessMonomorphic()) {
|
| HValue* checked_literal = Add<HCheckMaps>(literal, map);
|
| - ASSERT(!info.lookup()->IsPropertyCallbacks());
|
| + DCHECK(!info.lookup()->IsPropertyCallbacks());
|
| store = BuildMonomorphicAccess(
|
| &info, literal, checked_literal, value,
|
| BailoutId::None(), BailoutId::None());
|
| @@ -5645,9 +5645,9 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| expr->BuildConstantElements(isolate());
|
| ZoneList<Expression*>* subexprs = expr->values();
|
| int length = subexprs->length();
|
| @@ -5682,14 +5682,14 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
|
| isolate()->counters()->cow_arrays_created_runtime()->Increment();
|
| }
|
| } else {
|
| - ASSERT(literals_cell->IsAllocationSite());
|
| + DCHECK(literals_cell->IsAllocationSite());
|
| site = Handle<AllocationSite>::cast(literals_cell);
|
| boilerplate_object = Handle<JSObject>(
|
| JSObject::cast(site->transition_info()), isolate());
|
| }
|
|
|
| - ASSERT(!boilerplate_object.is_null());
|
| - ASSERT(site->SitePointsToLiteral());
|
| + DCHECK(!boilerplate_object.is_null());
|
| + DCHECK(site->SitePointsToLiteral());
|
|
|
| ElementsKind boilerplate_elements_kind =
|
| boilerplate_object->GetElementsKind();
|
| @@ -5801,7 +5801,7 @@ HInstruction* HOptimizedGraphBuilder::BuildLoadNamedField(
|
| Handle<JSObject>::cast(object)->Lookup(info->name(), &lookup);
|
| Handle<Object> value(lookup.GetLazyValue(), isolate());
|
|
|
| - ASSERT(!value->IsTheHole());
|
| + DCHECK(!value->IsTheHole());
|
| return New<HConstant>(value);
|
| }
|
| }
|
| @@ -5873,7 +5873,7 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
|
| }
|
|
|
| if (!info->field_maps()->is_empty()) {
|
| - ASSERT(field_access.representation().IsHeapObject());
|
| + DCHECK(field_access.representation().IsHeapObject());
|
| value = Add<HCheckMaps>(value, info->field_maps());
|
| }
|
|
|
| @@ -5885,7 +5885,7 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
|
|
|
| if (transition_to_field) {
|
| Handle<Map> transition(info->transition());
|
| - ASSERT(!transition->is_deprecated());
|
| + DCHECK(!transition->is_deprecated());
|
| instr->SetTransition(Add<HConstant>(transition));
|
| }
|
| return instr;
|
| @@ -5929,7 +5929,7 @@ bool HOptimizedGraphBuilder::PropertyAccessInfo::IsCompatible(
|
| return constant_.is_identical_to(info->constant_);
|
| }
|
|
|
| - ASSERT(lookup_.IsField());
|
| + DCHECK(lookup_.IsField());
|
| if (!info->lookup_.IsField()) return false;
|
|
|
| Representation r = access_.representation();
|
| @@ -6022,7 +6022,7 @@ void HOptimizedGraphBuilder::PropertyAccessInfo::LoadFieldMaps(
|
| // Collect the (stable) maps from the field type.
|
| int num_field_maps = field_type->NumClasses();
|
| if (num_field_maps == 0) return;
|
| - ASSERT(access_.representation().IsHeapObject());
|
| + DCHECK(access_.representation().IsHeapObject());
|
| field_maps_.Reserve(num_field_maps, zone());
|
| HeapType::Iterator<Map> it = field_type->Classes();
|
| while (!it.Done()) {
|
| @@ -6035,11 +6035,11 @@ void HOptimizedGraphBuilder::PropertyAccessInfo::LoadFieldMaps(
|
| it.Advance();
|
| }
|
| field_maps_.Sort();
|
| - ASSERT_EQ(num_field_maps, field_maps_.length());
|
| + DCHECK_EQ(num_field_maps, field_maps_.length());
|
|
|
| // Determine field HType from field HeapType.
|
| field_type_ = HType::FromType<HeapType>(field_type);
|
| - ASSERT(field_type_.IsHeapObject());
|
| + DCHECK(field_type_.IsHeapObject());
|
|
|
| // Add dependency on the map that introduced the field.
|
| Map::AddDependentCompilationInfo(
|
| @@ -6102,7 +6102,7 @@ bool HOptimizedGraphBuilder::PropertyAccessInfo::CanAccessMonomorphic() {
|
|
|
| bool HOptimizedGraphBuilder::PropertyAccessInfo::CanAccessAsMonomorphic(
|
| SmallMapList* types) {
|
| - ASSERT(type_->Is(ToType(types->first())));
|
| + DCHECK(type_->Is(ToType(types->first())));
|
| if (!CanAccessMonomorphic()) return false;
|
| STATIC_ASSERT(kMaxLoadPolymorphism == kMaxStorePolymorphism);
|
| if (types->length() > kMaxLoadPolymorphism) return false;
|
| @@ -6125,7 +6125,7 @@ bool HOptimizedGraphBuilder::PropertyAccessInfo::CanAccessAsMonomorphic(
|
| if (type_->Is(Type::Number())) return false;
|
|
|
| // Multiple maps cannot transition to the same target map.
|
| - ASSERT(!IsLoad() || !lookup_.IsTransition());
|
| + DCHECK(!IsLoad() || !lookup_.IsTransition());
|
| if (lookup_.IsTransition() && types->length() > 1) return false;
|
|
|
| for (int i = 1; i < types->length(); ++i) {
|
| @@ -6164,13 +6164,13 @@ HInstruction* HOptimizedGraphBuilder::BuildMonomorphicAccess(
|
|
|
| HObjectAccess access = HObjectAccess::ForMap(); // bogus default
|
| if (info->GetJSObjectFieldAccess(&access)) {
|
| - ASSERT(info->IsLoad());
|
| + DCHECK(info->IsLoad());
|
| return New<HLoadNamedField>(object, checked_object, access);
|
| }
|
|
|
| if (info->name().is_identical_to(isolate()->factory()->prototype_string()) &&
|
| info->map()->function_with_prototype()) {
|
| - ASSERT(!info->map()->has_non_instance_prototype());
|
| + DCHECK(!info->map()->has_non_instance_prototype());
|
| return New<HLoadFunctionPrototype>(checked_object);
|
| }
|
|
|
| @@ -6181,7 +6181,7 @@ HInstruction* HOptimizedGraphBuilder::BuildMonomorphicAccess(
|
| }
|
|
|
| if (!info->lookup()->IsFound()) {
|
| - ASSERT(info->IsLoad());
|
| + DCHECK(info->IsLoad());
|
| return graph()->GetConstantUndefined();
|
| }
|
|
|
| @@ -6194,7 +6194,7 @@ HInstruction* HOptimizedGraphBuilder::BuildMonomorphicAccess(
|
| }
|
|
|
| if (info->lookup()->IsTransition()) {
|
| - ASSERT(!info->IsLoad());
|
| + DCHECK(!info->IsLoad());
|
| return BuildStoreNamedField(info, checked_object, value);
|
| }
|
|
|
| @@ -6222,7 +6222,7 @@ HInstruction* HOptimizedGraphBuilder::BuildMonomorphicAccess(
|
| return BuildCallConstantFunction(info->accessor(), argument_count);
|
| }
|
|
|
| - ASSERT(info->lookup()->IsConstant());
|
| + DCHECK(info->lookup()->IsConstant());
|
| if (info->IsLoad()) {
|
| return New<HConstant>(info->constant());
|
| } else {
|
| @@ -6361,7 +6361,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicNamedFieldAccess(
|
| }
|
| }
|
|
|
| - ASSERT(join != NULL);
|
| + DCHECK(join != NULL);
|
| if (join->HasPredecessor()) {
|
| join->SetJoinId(ast_id);
|
| set_current_block(join);
|
| @@ -6422,7 +6422,7 @@ void HOptimizedGraphBuilder::BuildStore(Expression* expr,
|
|
|
| Literal* key = prop->key()->AsLiteral();
|
| Handle<String> name = Handle<String>::cast(key->value());
|
| - ASSERT(!name.is_null());
|
| + DCHECK(!name.is_null());
|
|
|
| HInstruction* instr = BuildNamedAccess(STORE, ast_id, return_id, expr,
|
| object, name, value, is_uninitialized);
|
| @@ -6440,7 +6440,7 @@ void HOptimizedGraphBuilder::BuildStore(Expression* expr,
|
|
|
| void HOptimizedGraphBuilder::HandlePropertyAssignment(Assignment* expr) {
|
| Property* prop = expr->target()->AsProperty();
|
| - ASSERT(prop != NULL);
|
| + DCHECK(prop != NULL);
|
| CHECK_ALIVE(VisitForValue(prop->obj()));
|
| if (!prop->key()->IsPropertyName()) {
|
| CHECK_ALIVE(VisitForValue(prop->key()));
|
| @@ -6499,7 +6499,7 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment(
|
| Add<HStoreNamedGeneric>(global_object, var->name(),
|
| value, function_strict_mode());
|
| USE(instr);
|
| - ASSERT(instr->HasObservableSideEffects());
|
| + DCHECK(instr->HasObservableSideEffects());
|
| Add<HSimulate>(ast_id, REMOVABLE_SIMULATE);
|
| }
|
| }
|
| @@ -6509,7 +6509,7 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
|
| Expression* target = expr->target();
|
| VariableProxy* proxy = target->AsVariableProxy();
|
| Property* prop = target->AsProperty();
|
| - ASSERT(proxy == NULL || prop == NULL);
|
| + DCHECK(proxy == NULL || prop == NULL);
|
|
|
| // We have a second position recorded in the FullCodeGenerator to have
|
| // type feedback for the binary operation.
|
| @@ -6610,12 +6610,12 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| VariableProxy* proxy = expr->target()->AsVariableProxy();
|
| Property* prop = expr->target()->AsProperty();
|
| - ASSERT(proxy == NULL || prop == NULL);
|
| + DCHECK(proxy == NULL || prop == NULL);
|
|
|
| if (expr->is_compound()) {
|
| HandleCompoundAssignment(expr);
|
| @@ -6711,7 +6711,7 @@ void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
|
| expr->op() == Token::INIT_CONST) {
|
| mode = HStoreContextSlot::kNoCheck;
|
| } else {
|
| - ASSERT(expr->op() == Token::INIT_CONST_LEGACY);
|
| + DCHECK(expr->op() == Token::INIT_CONST_LEGACY);
|
|
|
| mode = HStoreContextSlot::kCheckIgnoreAssignment;
|
| }
|
| @@ -6741,13 +6741,13 @@ void HOptimizedGraphBuilder::VisitYield(Yield* expr) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitThrow(Throw* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| // We don't optimize functions with invalid left-hand sides in
|
| // assignments, count operations, or for-in. Consequently throw can
|
| // currently only occur in an effect context.
|
| - ASSERT(ast_context()->IsEffect());
|
| + DCHECK(ast_context()->IsEffect());
|
| CHECK_ALIVE(VisitForValue(expr->exception()));
|
|
|
| HValue* value = environment()->Pop();
|
| @@ -6881,7 +6881,7 @@ HInstruction* HOptimizedGraphBuilder::BuildMonomorphicElementAccess(
|
| holder = JSObject::cast(*PrototypeIterator::GetCurrent(iter));
|
| iter.Advance();
|
| }
|
| - ASSERT(holder && holder->IsJSObject());
|
| + DCHECK(holder && holder->IsJSObject());
|
|
|
| BuildCheckPrototypeMaps(handle(JSObject::cast(map->prototype())),
|
| Handle<JSObject>(holder));
|
| @@ -7013,9 +7013,9 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
|
| HTransitionElementsKind* transition = NULL;
|
| for (int i = 0; i < maps->length(); ++i) {
|
| Handle<Map> map = maps->at(i);
|
| - ASSERT(map->IsMap());
|
| + DCHECK(map->IsMap());
|
| if (!transition_target.at(i).is_null()) {
|
| - ASSERT(Map::IsValidElementsTransition(
|
| + DCHECK(Map::IsValidElementsTransition(
|
| map->elements_kind(),
|
| transition_target.at(i)->elements_kind()));
|
| transition = Add<HTransitionElementsKind>(object, map,
|
| @@ -7027,7 +7027,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
|
|
|
| // If only one map is left after transitioning, handle this case
|
| // monomorphically.
|
| - ASSERT(untransitionable_maps.length() >= 1);
|
| + DCHECK(untransitionable_maps.length() >= 1);
|
| if (untransitionable_maps.length() == 1) {
|
| Handle<Map> untransitionable_map = untransitionable_maps[0];
|
| HInstruction* instr = NULL;
|
| @@ -7062,7 +7062,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
|
| access = AddInstruction(BuildKeyedGeneric(access_type, expr, object, key,
|
| val));
|
| } else {
|
| - ASSERT(IsFastElementsKind(elements_kind) ||
|
| + DCHECK(IsFastElementsKind(elements_kind) ||
|
| IsExternalArrayElementsKind(elements_kind) ||
|
| IsFixedTypedArrayElementsKind(elements_kind));
|
| LoadKeyedHoleMode load_mode = BuildKeyedHoleMode(map);
|
| @@ -7089,7 +7089,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
|
| // necessary because FinishExitWithHardDeoptimization does an AbnormalExit
|
| // rather than joining the join block. If this becomes an issue, insert a
|
| // generic access in the case length() == 0.
|
| - ASSERT(join->predecessors()->length() > 0);
|
| + DCHECK(join->predecessors()->length() > 0);
|
| // Deopt if none of the cases matched.
|
| NoObservableSideEffectsScope scope(this);
|
| FinishExitWithHardDeoptimization("Unknown map in polymorphic element access");
|
| @@ -7105,7 +7105,7 @@ HValue* HOptimizedGraphBuilder::HandleKeyedElementAccess(
|
| Expression* expr,
|
| PropertyAccessType access_type,
|
| bool* has_side_effects) {
|
| - ASSERT(!expr->IsPropertyName());
|
| + DCHECK(!expr->IsPropertyName());
|
| HInstruction* instr = NULL;
|
|
|
| SmallMapList* types;
|
| @@ -7250,7 +7250,7 @@ HInstruction* HOptimizedGraphBuilder::BuildNamedAccess(
|
| bool is_uninitialized) {
|
| SmallMapList* types;
|
| ComputeReceiverTypes(expr, object, &types, zone());
|
| - ASSERT(types != NULL);
|
| + DCHECK(types != NULL);
|
|
|
| if (types->length() > 0) {
|
| PropertyAccessInfo info(this, access, ToType(types->first()), name);
|
| @@ -7262,7 +7262,7 @@ HInstruction* HOptimizedGraphBuilder::BuildNamedAccess(
|
|
|
| HValue* checked_object;
|
| // Type::Number() is only supported by polymorphic load/call handling.
|
| - ASSERT(!info.type()->Is(Type::Number()));
|
| + DCHECK(!info.type()->Is(Type::Number()));
|
| BuildCheckHeapObject(object);
|
| if (AreStringTypes(types)) {
|
| checked_object =
|
| @@ -7330,9 +7330,9 @@ void HOptimizedGraphBuilder::BuildLoad(Property* expr,
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitProperty(Property* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
|
|
| if (TryArgumentsAccess(expr)) return;
|
|
|
| @@ -7627,7 +7627,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed(
|
| // We assume that control flow is always live after an expression. So
|
| // even without predecessors to the join block, we set it as the exit
|
| // block and continue by adding instructions there.
|
| - ASSERT(join != NULL);
|
| + DCHECK(join != NULL);
|
| if (join->HasPredecessor()) {
|
| set_current_block(join);
|
| join->SetJoinId(expr->id());
|
| @@ -7839,7 +7839,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
| // TryInline should always return true).
|
|
|
| // Type-check the inlined function.
|
| - ASSERT(target_shared->has_deoptimization_support());
|
| + DCHECK(target_shared->has_deoptimization_support());
|
| AstTyper::Run(&target_info);
|
|
|
| int function_id = graph()->TraceInlinedFunction(target_shared, position);
|
| @@ -7873,7 +7873,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
|
|
| // If the function uses arguments object then bind bind one.
|
| if (function->scope()->arguments() != NULL) {
|
| - ASSERT(function->scope()->arguments()->IsStackAllocated());
|
| + DCHECK(function->scope()->arguments()->IsStackAllocated());
|
| inner_env->Bind(function->scope()->arguments(), arguments_object);
|
| }
|
|
|
| @@ -7911,7 +7911,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
| inlined_count_ += nodes_added;
|
|
|
| Handle<Code> unoptimized_code(target_shared->code());
|
| - ASSERT(unoptimized_code->kind() == Code::FUNCTION);
|
| + DCHECK(unoptimized_code->kind() == Code::FUNCTION);
|
| Handle<TypeFeedbackInfo> type_info(
|
| TypeFeedbackInfo::cast(unoptimized_code->type_feedback_info()));
|
| graph()->update_type_change_checksum(type_info->own_type_change_checksum());
|
| @@ -7929,7 +7929,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
| } else if (call_context()->IsEffect()) {
|
| Goto(function_return(), state);
|
| } else {
|
| - ASSERT(call_context()->IsValue());
|
| + DCHECK(call_context()->IsValue());
|
| AddLeaveInlined(implicit_return_value, state);
|
| }
|
| } else if (state->inlining_kind() == SETTER_CALL_RETURN) {
|
| @@ -7941,7 +7941,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
| } else if (call_context()->IsEffect()) {
|
| Goto(function_return(), state);
|
| } else {
|
| - ASSERT(call_context()->IsValue());
|
| + DCHECK(call_context()->IsValue());
|
| AddLeaveInlined(implicit_return_value, state);
|
| }
|
| } else {
|
| @@ -7952,7 +7952,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
| } else if (call_context()->IsEffect()) {
|
| Goto(function_return(), state);
|
| } else {
|
| - ASSERT(call_context()->IsValue());
|
| + DCHECK(call_context()->IsValue());
|
| AddLeaveInlined(undefined, state);
|
| }
|
| }
|
| @@ -7966,7 +7966,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
|
| HEnterInlined* entry = function_state()->entry();
|
|
|
| // Pop the return test context from the expression context stack.
|
| - ASSERT(ast_context() == inlined_test_context());
|
| + DCHECK(ast_context() == inlined_test_context());
|
| ClearInlinedTestContext();
|
| delete target_state;
|
|
|
| @@ -8175,7 +8175,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
|
| left, kMathPowHalf);
|
| // MathPowHalf doesn't have side effects so there's no need for
|
| // an environment simulation here.
|
| - ASSERT(!sqrt->HasObservableSideEffects());
|
| + DCHECK(!sqrt->HasObservableSideEffects());
|
| result = NewUncasted<HDiv>(one, sqrt);
|
| } else if (exponent == 2.0) {
|
| result = NewUncasted<HMul>(left, left);
|
| @@ -8218,7 +8218,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
|
| ElementsKind elements_kind = receiver_map->elements_kind();
|
| if (!IsFastElementsKind(elements_kind)) return false;
|
| if (receiver_map->is_observed()) return false;
|
| - ASSERT(receiver_map->is_extensible());
|
| + DCHECK(receiver_map->is_extensible());
|
|
|
| Drop(expr->arguments()->length());
|
| HValue* result;
|
| @@ -8283,7 +8283,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
|
| if (!IsFastElementsKind(elements_kind)) return false;
|
| if (receiver_map->is_observed()) return false;
|
| if (JSArray::IsReadOnlyLengthDescriptor(receiver_map)) return false;
|
| - ASSERT(receiver_map->is_extensible());
|
| + DCHECK(receiver_map->is_extensible());
|
|
|
| // If there may be elements accessors in the prototype chain, the fast
|
| // inlined version can't be used.
|
| @@ -8335,7 +8335,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
|
| ElementsKind kind = receiver_map->elements_kind();
|
| if (!IsFastElementsKind(kind)) return false;
|
| if (receiver_map->is_observed()) return false;
|
| - ASSERT(receiver_map->is_extensible());
|
| + DCHECK(receiver_map->is_extensible());
|
|
|
| // If there may be elements accessors in the prototype chain, the fast
|
| // inlined version can't be used.
|
| @@ -8450,7 +8450,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
|
| if (!IsFastElementsKind(kind)) return false;
|
| if (receiver_map->is_observed()) return false;
|
| if (argument_count != 2) return false;
|
| - ASSERT(receiver_map->is_extensible());
|
| + DCHECK(receiver_map->is_extensible());
|
|
|
| // If there may be elements accessors in the prototype chain, the fast
|
| // inlined version can't be used.
|
| @@ -8557,7 +8557,7 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function,
|
| // Cannot embed a direct reference to the global proxy map
|
| // as it maybe dropped on deserialization.
|
| CHECK(!isolate()->serializer_enabled());
|
| - ASSERT_EQ(0, receiver_maps->length());
|
| + DCHECK_EQ(0, receiver_maps->length());
|
| receiver_maps->Add(handle(function->global_proxy()->map()), zone());
|
| }
|
| CallOptimization::HolderLookup holder_lookup =
|
| @@ -8583,7 +8583,7 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function,
|
| if (holder_lookup == CallOptimization::kHolderFound) {
|
| AddCheckPrototypeMaps(api_holder, receiver_maps->first());
|
| } else {
|
| - ASSERT_EQ(holder_lookup, CallOptimization::kHolderIsReceiver);
|
| + DCHECK_EQ(holder_lookup, CallOptimization::kHolderIsReceiver);
|
| }
|
| // Includes receiver.
|
| PushArgumentsFromEnvironment(argc + 1);
|
| @@ -8592,8 +8592,8 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function,
|
| break;
|
| case kCallApiGetter:
|
| // Receiver and prototype chain cannot have changed.
|
| - ASSERT_EQ(0, argc);
|
| - ASSERT_EQ(NULL, receiver);
|
| + DCHECK_EQ(0, argc);
|
| + DCHECK_EQ(NULL, receiver);
|
| // Receiver is on expression stack.
|
| receiver = Pop();
|
| Add<HPushArguments>(receiver);
|
| @@ -8602,8 +8602,8 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function,
|
| {
|
| is_store = true;
|
| // Receiver and prototype chain cannot have changed.
|
| - ASSERT_EQ(1, argc);
|
| - ASSERT_EQ(NULL, receiver);
|
| + DCHECK_EQ(1, argc);
|
| + DCHECK_EQ(NULL, receiver);
|
| // Receiver and value are on expression stack.
|
| HValue* value = Pop();
|
| receiver = Pop();
|
| @@ -8649,7 +8649,7 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function,
|
| Handle<Code> code = stub.GetCode();
|
| HConstant* code_value = Add<HConstant>(code);
|
|
|
| - ASSERT((sizeof(op_vals) / kPointerSize) ==
|
| + DCHECK((sizeof(op_vals) / kPointerSize) ==
|
| descriptor->GetEnvironmentLength());
|
|
|
| HInstruction* call = New<HCallWithDescriptor>(
|
| @@ -8663,7 +8663,7 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function,
|
|
|
|
|
| bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
|
| - ASSERT(expr->expression()->IsProperty());
|
| + DCHECK(expr->expression()->IsProperty());
|
|
|
| if (!expr->IsMonomorphic()) {
|
| return false;
|
| @@ -8706,7 +8706,7 @@ bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
|
| } else {
|
| // We are inside inlined function and we know exactly what is inside
|
| // arguments object. But we need to be able to materialize at deopt.
|
| - ASSERT_EQ(environment()->arguments_environment()->parameter_count(),
|
| + DCHECK_EQ(environment()->arguments_environment()->parameter_count(),
|
| function_state()->entry()->arguments_object()->arguments_count());
|
| HArgumentsObject* args = function_state()->entry()->arguments_object();
|
| const ZoneList<HValue*>* arguments_values = args->arguments_values();
|
| @@ -8774,7 +8774,7 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver,
|
| HValue* search_element,
|
| ElementsKind kind,
|
| ArrayIndexOfMode mode) {
|
| - ASSERT(IsFastElementsKind(kind));
|
| + DCHECK(IsFastElementsKind(kind));
|
|
|
| NoObservableSideEffectsScope no_effects(this);
|
|
|
| @@ -8791,7 +8791,7 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver,
|
| token = Token::LT;
|
| direction = LoopBuilder::kPostIncrement;
|
| } else {
|
| - ASSERT_EQ(kLastIndexOf, mode);
|
| + DCHECK_EQ(kLastIndexOf, mode);
|
| initial = length;
|
| terminating = graph()->GetConstant0();
|
| token = Token::GT;
|
| @@ -8950,9 +8950,9 @@ bool HOptimizedGraphBuilder::TryHandleArrayCallNew(CallNew* expr,
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitCall(Call* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| Expression* callee = expr->expression();
|
| int argument_count = expr->arguments()->length() + 1; // Plus receiver.
|
| HInstruction* call = NULL;
|
| @@ -9131,8 +9131,8 @@ void HOptimizedGraphBuilder::BuildInlinedCallArray(
|
| Expression* expression,
|
| int argument_count,
|
| Handle<AllocationSite> site) {
|
| - ASSERT(!site.is_null());
|
| - ASSERT(argument_count >= 0 && argument_count <= 1);
|
| + DCHECK(!site.is_null());
|
| + DCHECK(argument_count >= 0 && argument_count <= 1);
|
| NoObservableSideEffectsScope no_effects(this);
|
|
|
| // We should at least have the constructor on the expression stack.
|
| @@ -9150,7 +9150,7 @@ void HOptimizedGraphBuilder::BuildInlinedCallArray(
|
| HValue* argument = environment()->Top();
|
| if (argument->IsConstant()) {
|
| HConstant* constant_argument = HConstant::cast(argument);
|
| - ASSERT(constant_argument->HasSmiValue());
|
| + DCHECK(constant_argument->HasSmiValue());
|
| int constant_array_size = constant_argument->Integer32Value();
|
| if (constant_array_size != 0) {
|
| kind = GetHoleyElementsKind(kind);
|
| @@ -9189,8 +9189,8 @@ bool HOptimizedGraphBuilder::IsCallArrayInlineable(
|
| Handle<JSFunction> caller = current_info()->closure();
|
| Handle<JSFunction> target = array_function();
|
| // We should have the function plus array arguments on the environment stack.
|
| - ASSERT(environment()->length() >= (argument_count + 1));
|
| - ASSERT(!site.is_null());
|
| + DCHECK(environment()->length() >= (argument_count + 1));
|
| + DCHECK(!site.is_null());
|
|
|
| bool inline_ok = false;
|
| if (site->CanInlineCall()) {
|
| @@ -9230,9 +9230,9 @@ bool HOptimizedGraphBuilder::IsCallArrayInlineable(
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| if (!FLAG_hydrogen_track_positions) SetSourcePosition(expr->position());
|
| int argument_count = expr->arguments()->length() + 1; // Plus constructor.
|
| Factory* factory = isolate()->factory();
|
| @@ -9256,10 +9256,10 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
|
| }
|
|
|
| // Calculate instance size from initial map of constructor.
|
| - ASSERT(constructor->has_initial_map());
|
| + DCHECK(constructor->has_initial_map());
|
| Handle<Map> initial_map(constructor->initial_map());
|
| int instance_size = initial_map->instance_size();
|
| - ASSERT(initial_map->InitialPropertiesLength() == 0);
|
| + DCHECK(initial_map->InitialPropertiesLength() == 0);
|
|
|
| // Allocate an instance of the implicit receiver object.
|
| HValue* size_in_bytes = Add<HConstant>(instance_size);
|
| @@ -9282,7 +9282,7 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
|
|
|
| // Initialize map and fields of the newly allocated object.
|
| { NoObservableSideEffectsScope no_effects(this);
|
| - ASSERT(initial_map->instance_type() == JS_OBJECT_TYPE);
|
| + DCHECK(initial_map->instance_type() == JS_OBJECT_TYPE);
|
| Add<HStoreNamedField>(receiver,
|
| HObjectAccess::ForMapAndOffset(initial_map, JSObject::kMapOffset),
|
| Add<HConstant>(initial_map));
|
| @@ -9309,7 +9309,7 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
|
| // Replace the constructor function with a newly allocated receiver using
|
| // the index of the receiver from the top of the expression stack.
|
| const int receiver_index = argument_count - 1;
|
| - ASSERT(environment()->ExpressionStackAt(receiver_index) == function);
|
| + DCHECK(environment()->ExpressionStackAt(receiver_index) == function);
|
| environment()->SetExpressionStackAt(receiver_index, receiver);
|
|
|
| if (TryInlineConstruct(expr, receiver)) {
|
| @@ -9415,7 +9415,7 @@ void HOptimizedGraphBuilder::GenerateDataViewInitialize(
|
| CallRuntime* expr) {
|
| ZoneList<Expression*>* arguments = expr->arguments();
|
|
|
| - ASSERT(arguments->length()== 4);
|
| + DCHECK(arguments->length()== 4);
|
| CHECK_ALIVE(VisitForValue(arguments->at(0)));
|
| HValue* obj = Pop();
|
|
|
| @@ -9559,7 +9559,7 @@ void HOptimizedGraphBuilder::GenerateTypedArrayInitialize(
|
| static const int kByteOffsetArg = 3;
|
| static const int kByteLengthArg = 4;
|
| static const int kArgsLength = 5;
|
| - ASSERT(arguments->length() == kArgsLength);
|
| + DCHECK(arguments->length() == kArgsLength);
|
|
|
|
|
| CHECK_ALIVE(VisitForValue(arguments->at(kObjectArg)));
|
| @@ -9601,7 +9601,7 @@ void HOptimizedGraphBuilder::GenerateTypedArrayInitialize(
|
| CHECK_ALIVE(VisitForValue(arguments->at(kByteOffsetArg)));
|
| byte_offset = Pop();
|
| is_zero_byte_offset = false;
|
| - ASSERT(buffer != NULL);
|
| + DCHECK(buffer != NULL);
|
| }
|
|
|
| CHECK_ALIVE(VisitForValue(arguments->at(kByteLengthArg)));
|
| @@ -9649,7 +9649,7 @@ void HOptimizedGraphBuilder::GenerateTypedArrayInitialize(
|
| isolate(), array_type, external_elements_kind);
|
| AddStoreMapConstant(obj, obj_map);
|
| } else {
|
| - ASSERT(is_zero_byte_offset);
|
| + DCHECK(is_zero_byte_offset);
|
| elements = BuildAllocateFixedTypedArray(
|
| array_type, element_size, fixed_elements_kind,
|
| byte_length, length);
|
| @@ -9675,7 +9675,7 @@ void HOptimizedGraphBuilder::GenerateTypedArrayInitialize(
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateMaxSmi(CallRuntime* expr) {
|
| - ASSERT(expr->arguments()->length() == 0);
|
| + DCHECK(expr->arguments()->length() == 0);
|
| HConstant* max_smi = New<HConstant>(static_cast<int32_t>(Smi::kMaxValue));
|
| return ast_context()->ReturnInstruction(max_smi, expr->id());
|
| }
|
| @@ -9683,7 +9683,7 @@ void HOptimizedGraphBuilder::GenerateMaxSmi(CallRuntime* expr) {
|
|
|
| void HOptimizedGraphBuilder::GenerateTypedArrayMaxSizeInHeap(
|
| CallRuntime* expr) {
|
| - ASSERT(expr->arguments()->length() == 0);
|
| + DCHECK(expr->arguments()->length() == 0);
|
| HConstant* result = New<HConstant>(static_cast<int32_t>(
|
| FLAG_typed_array_max_size_in_heap));
|
| return ast_context()->ReturnInstruction(result, expr->id());
|
| @@ -9692,7 +9692,7 @@ void HOptimizedGraphBuilder::GenerateTypedArrayMaxSizeInHeap(
|
|
|
| void HOptimizedGraphBuilder::GenerateArrayBufferGetByteLength(
|
| CallRuntime* expr) {
|
| - ASSERT(expr->arguments()->length() == 1);
|
| + DCHECK(expr->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(expr->arguments()->at(0)));
|
| HValue* buffer = Pop();
|
| HInstruction* result = New<HLoadNamedField>(
|
| @@ -9705,7 +9705,7 @@ void HOptimizedGraphBuilder::GenerateArrayBufferGetByteLength(
|
|
|
| void HOptimizedGraphBuilder::GenerateArrayBufferViewGetByteLength(
|
| CallRuntime* expr) {
|
| - ASSERT(expr->arguments()->length() == 1);
|
| + DCHECK(expr->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(expr->arguments()->at(0)));
|
| HValue* buffer = Pop();
|
| HInstruction* result = New<HLoadNamedField>(
|
| @@ -9718,7 +9718,7 @@ void HOptimizedGraphBuilder::GenerateArrayBufferViewGetByteLength(
|
|
|
| void HOptimizedGraphBuilder::GenerateArrayBufferViewGetByteOffset(
|
| CallRuntime* expr) {
|
| - ASSERT(expr->arguments()->length() == 1);
|
| + DCHECK(expr->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(expr->arguments()->at(0)));
|
| HValue* buffer = Pop();
|
| HInstruction* result = New<HLoadNamedField>(
|
| @@ -9731,7 +9731,7 @@ void HOptimizedGraphBuilder::GenerateArrayBufferViewGetByteOffset(
|
|
|
| void HOptimizedGraphBuilder::GenerateTypedArrayGetLength(
|
| CallRuntime* expr) {
|
| - ASSERT(expr->arguments()->length() == 1);
|
| + DCHECK(expr->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(expr->arguments()->at(0)));
|
| HValue* buffer = Pop();
|
| HInstruction* result = New<HLoadNamedField>(
|
| @@ -9743,32 +9743,32 @@ void HOptimizedGraphBuilder::GenerateTypedArrayGetLength(
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitCallRuntime(CallRuntime* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| if (expr->is_jsruntime()) {
|
| return Bailout(kCallToAJavaScriptRuntimeFunction);
|
| }
|
|
|
| const Runtime::Function* function = expr->function();
|
| - ASSERT(function != NULL);
|
| + DCHECK(function != NULL);
|
|
|
| if (function->intrinsic_type == Runtime::INLINE ||
|
| function->intrinsic_type == Runtime::INLINE_OPTIMIZED) {
|
| - ASSERT(expr->name()->length() > 0);
|
| - ASSERT(expr->name()->Get(0) == '_');
|
| + DCHECK(expr->name()->length() > 0);
|
| + DCHECK(expr->name()->Get(0) == '_');
|
| // Call to an inline function.
|
| int lookup_index = static_cast<int>(function->function_id) -
|
| static_cast<int>(Runtime::kFirstInlineFunction);
|
| - ASSERT(lookup_index >= 0);
|
| - ASSERT(static_cast<size_t>(lookup_index) <
|
| + DCHECK(lookup_index >= 0);
|
| + DCHECK(static_cast<size_t>(lookup_index) <
|
| ARRAY_SIZE(kInlineFunctionGenerators));
|
| InlineFunctionGenerator generator = kInlineFunctionGenerators[lookup_index];
|
|
|
| // Call the inline code generator using the pointer-to-member.
|
| (this->*generator)(expr);
|
| } else {
|
| - ASSERT(function->intrinsic_type == Runtime::RUNTIME);
|
| + DCHECK(function->intrinsic_type == Runtime::RUNTIME);
|
| Handle<String> name = expr->name();
|
| int argument_count = expr->arguments()->length();
|
| CHECK_ALIVE(VisitExpressions(expr->arguments()));
|
| @@ -9781,9 +9781,9 @@ void HOptimizedGraphBuilder::VisitCallRuntime(CallRuntime* expr) {
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitUnaryOperation(UnaryOperation* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| switch (expr->op()) {
|
| case Token::DELETE: return VisitDelete(expr);
|
| case Token::VOID: return VisitVoid(expr);
|
| @@ -9860,7 +9860,7 @@ void HOptimizedGraphBuilder::VisitNot(UnaryOperation* expr) {
|
| return;
|
| }
|
|
|
| - ASSERT(ast_context()->IsValue());
|
| + DCHECK(ast_context()->IsValue());
|
| HBasicBlock* materialize_false = graph()->CreateBasicBlock();
|
| HBasicBlock* materialize_true = graph()->CreateBasicBlock();
|
| CHECK_BAILOUT(VisitForControl(expr->expression(),
|
| @@ -9946,9 +9946,9 @@ void HOptimizedGraphBuilder::BuildStoreForEffect(Expression* expr,
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| if (!FLAG_hydrogen_track_positions) SetSourcePosition(expr->position());
|
| Expression* target = expr->expression();
|
| VariableProxy* proxy = target->AsVariableProxy();
|
| @@ -9971,7 +9971,7 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
| return Bailout(kUnsupportedCountOperationWithConst);
|
| }
|
| // Argument of the count operation is a variable, not a property.
|
| - ASSERT(prop == NULL);
|
| + DCHECK(prop == NULL);
|
| CHECK_ALIVE(VisitForValue(target));
|
|
|
| after = BuildIncrement(returns_original_input, expr);
|
| @@ -10026,7 +10026,7 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
| }
|
|
|
| // Argument of the count operation is a property.
|
| - ASSERT(prop != NULL);
|
| + DCHECK(prop != NULL);
|
| if (returns_original_input) Push(graph()->GetConstantUndefined());
|
|
|
| CHECK_ALIVE(VisitForValue(prop->obj()));
|
| @@ -10176,7 +10176,7 @@ HValue* HGraphBuilder::TruncateToNumber(HValue* value, Type** expected) {
|
| // We expect to get a number.
|
| // (We need to check first, since Type::None->Is(Type::Any()) == true.
|
| if (expected_obj->Is(Type::None())) {
|
| - ASSERT(!expected_number->Is(Type::None(zone())));
|
| + DCHECK(!expected_number->Is(Type::None(zone())));
|
| return value;
|
| }
|
|
|
| @@ -10279,10 +10279,10 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
|
|
| // Convert left argument as necessary.
|
| if (left_type->Is(Type::Number())) {
|
| - ASSERT(right_type->Is(Type::String()));
|
| + DCHECK(right_type->Is(Type::String()));
|
| left = BuildNumberToString(left, left_type);
|
| } else if (!left_type->Is(Type::String())) {
|
| - ASSERT(right_type->Is(Type::String()));
|
| + DCHECK(right_type->Is(Type::String()));
|
| HValue* function = AddLoadJSBuiltin(Builtins::STRING_ADD_RIGHT);
|
| Add<HPushArguments>(left, right);
|
| return AddUncasted<HInvokeFunction>(function, 2);
|
| @@ -10290,10 +10290,10 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
|
|
| // Convert right argument as necessary.
|
| if (right_type->Is(Type::Number())) {
|
| - ASSERT(left_type->Is(Type::String()));
|
| + DCHECK(left_type->Is(Type::String()));
|
| right = BuildNumberToString(right, right_type);
|
| } else if (!right_type->Is(Type::String())) {
|
| - ASSERT(left_type->Is(Type::String()));
|
| + DCHECK(left_type->Is(Type::String()));
|
| HValue* function = AddLoadJSBuiltin(Builtins::STRING_ADD_LEFT);
|
| Add<HPushArguments>(left, right);
|
| return AddUncasted<HInvokeFunction>(function, 2);
|
| @@ -10313,7 +10313,7 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
|
|
| // Register the dependent code with the allocation site.
|
| if (!allocation_mode.feedback_site().is_null()) {
|
| - ASSERT(!graph()->info()->IsStub());
|
| + DCHECK(!graph()->info()->IsStub());
|
| Handle<AllocationSite> site(allocation_mode.feedback_site());
|
| AllocationSite::AddDependentCompilationInfo(
|
| site, AllocationSite::TENURING, top_info());
|
| @@ -10454,15 +10454,15 @@ static bool IsClassOfTest(CompareOperation* expr) {
|
| if (!call->name()->IsOneByteEqualTo(STATIC_ASCII_VECTOR("_ClassOf"))) {
|
| return false;
|
| }
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| return true;
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitBinaryOperation(BinaryOperation* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| switch (expr->op()) {
|
| case Token::COMMA:
|
| return VisitComma(expr);
|
| @@ -10509,7 +10509,7 @@ void HOptimizedGraphBuilder::VisitLogicalExpression(BinaryOperation* expr) {
|
|
|
| } else if (ast_context()->IsValue()) {
|
| CHECK_ALIVE(VisitForValue(expr->left()));
|
| - ASSERT(current_block() != NULL);
|
| + DCHECK(current_block() != NULL);
|
| HValue* left_value = Top();
|
|
|
| // Short-circuit left values that always evaluate to the same boolean value.
|
| @@ -10544,7 +10544,7 @@ void HOptimizedGraphBuilder::VisitLogicalExpression(BinaryOperation* expr) {
|
| return ast_context()->ReturnValue(Pop());
|
|
|
| } else {
|
| - ASSERT(ast_context()->IsEffect());
|
| + DCHECK(ast_context()->IsEffect());
|
| // In an effect context, we don't need the value of the left subexpression,
|
| // only its control flow and side effects. We need an extra block to
|
| // maintain edge-split form.
|
| @@ -10630,9 +10630,9 @@ static bool IsLiteralCompareBool(Isolate* isolate,
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
|
|
| if (!FLAG_hydrogen_track_positions) SetSourcePosition(expr->position());
|
|
|
| @@ -10653,7 +10653,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
|
|
| if (IsClassOfTest(expr)) {
|
| CallRuntime* call = expr->left()->AsCallRuntime();
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| Literal* literal = expr->right()->AsLiteral();
|
| @@ -10864,10 +10864,10 @@ HControlInstruction* HOptimizedGraphBuilder::BuildCompareInstruction(
|
| void HOptimizedGraphBuilder::HandleLiteralCompareNil(CompareOperation* expr,
|
| Expression* sub_expr,
|
| NilValue nil) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| - ASSERT(expr->op() == Token::EQ || expr->op() == Token::EQ_STRICT);
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| + DCHECK(expr->op() == Token::EQ || expr->op() == Token::EQ_STRICT);
|
| if (!FLAG_hydrogen_track_positions) SetSourcePosition(expr->position());
|
| CHECK_ALIVE(VisitForValue(sub_expr));
|
| HValue* value = Pop();
|
| @@ -10879,7 +10879,7 @@ void HOptimizedGraphBuilder::HandleLiteralCompareNil(CompareOperation* expr,
|
| New<HCompareObjectEqAndBranch>(value, nil_constant);
|
| return ast_context()->ReturnControl(instr, expr->id());
|
| } else {
|
| - ASSERT_EQ(Token::EQ, expr->op());
|
| + DCHECK_EQ(Token::EQ, expr->op());
|
| Type* type = expr->combined_type()->Is(Type::None())
|
| ? Type::Any(zone()) : expr->combined_type();
|
| HIfContinuation continuation;
|
| @@ -10906,7 +10906,7 @@ HInstruction* HOptimizedGraphBuilder::BuildFastLiteral(
|
| AllocationSiteUsageContext* site_context) {
|
| NoObservableSideEffectsScope no_effects(this);
|
| InstanceType instance_type = boilerplate_object->map()->instance_type();
|
| - ASSERT(instance_type == JS_ARRAY_TYPE || instance_type == JS_OBJECT_TYPE);
|
| + DCHECK(instance_type == JS_ARRAY_TYPE || instance_type == JS_OBJECT_TYPE);
|
|
|
| HType type = instance_type == JS_ARRAY_TYPE
|
| ? HType::JSArray() : HType::JSObject();
|
| @@ -10981,14 +10981,14 @@ HInstruction* HOptimizedGraphBuilder::BuildFastLiteral(
|
| void HOptimizedGraphBuilder::BuildEmitObjectHeader(
|
| Handle<JSObject> boilerplate_object,
|
| HInstruction* object) {
|
| - ASSERT(boilerplate_object->properties()->length() == 0);
|
| + DCHECK(boilerplate_object->properties()->length() == 0);
|
|
|
| Handle<Map> boilerplate_object_map(boilerplate_object->map());
|
| AddStoreMapConstant(object, boilerplate_object_map);
|
|
|
| Handle<Object> properties_field =
|
| Handle<Object>(boilerplate_object->properties(), isolate());
|
| - ASSERT(*properties_field == isolate()->heap()->empty_fixed_array());
|
| + DCHECK(*properties_field == isolate()->heap()->empty_fixed_array());
|
| HInstruction* properties = Add<HConstant>(properties_field);
|
| HObjectAccess access = HObjectAccess::ForPropertiesPointer();
|
| Add<HStoreNamedField>(object, access, properties);
|
| @@ -11000,7 +11000,7 @@ void HOptimizedGraphBuilder::BuildEmitObjectHeader(
|
| Handle<Object>(boilerplate_array->length(), isolate());
|
| HInstruction* length = Add<HConstant>(length_field);
|
|
|
| - ASSERT(boilerplate_array->length()->IsSmi());
|
| + DCHECK(boilerplate_array->length()->IsSmi());
|
| Add<HStoreNamedField>(object, HObjectAccess::ForArrayLength(
|
| boilerplate_array->GetElementsKind()), length);
|
| }
|
| @@ -11011,7 +11011,7 @@ void HOptimizedGraphBuilder::BuildInitElementsInObjectHeader(
|
| Handle<JSObject> boilerplate_object,
|
| HInstruction* object,
|
| HInstruction* object_elements) {
|
| - ASSERT(boilerplate_object->properties()->length() == 0);
|
| + DCHECK(boilerplate_object->properties()->length() == 0);
|
| if (object_elements == NULL) {
|
| Handle<Object> elements_field =
|
| Handle<Object>(boilerplate_object->elements(), isolate());
|
| @@ -11095,7 +11095,7 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties(
|
| HInstruction* value_instruction =
|
| Add<HConstant>(isolate()->factory()->one_pointer_filler_map());
|
| for (int i = copied_fields; i < inobject_properties; i++) {
|
| - ASSERT(boilerplate_object->IsJSObject());
|
| + DCHECK(boilerplate_object->IsJSObject());
|
| int property_offset = boilerplate_object->GetInObjectPropertyOffset(i);
|
| HObjectAccess access =
|
| HObjectAccess::ForMapAndOffset(boilerplate_map, property_offset);
|
| @@ -11175,9 +11175,9 @@ void HOptimizedGraphBuilder::BuildEmitFixedArray(
|
|
|
|
|
| void HOptimizedGraphBuilder::VisitThisFunction(ThisFunction* expr) {
|
| - ASSERT(!HasStackOverflow());
|
| - ASSERT(current_block() != NULL);
|
| - ASSERT(current_block()->HasPredecessor());
|
| + DCHECK(!HasStackOverflow());
|
| + DCHECK(current_block() != NULL);
|
| + DCHECK(current_block()->HasPredecessor());
|
| HInstruction* instr = BuildThisFunction();
|
| return ast_context()->ReturnInstruction(instr, expr->id());
|
| }
|
| @@ -11185,7 +11185,7 @@ void HOptimizedGraphBuilder::VisitThisFunction(ThisFunction* expr) {
|
|
|
| void HOptimizedGraphBuilder::VisitDeclarations(
|
| ZoneList<Declaration*>* declarations) {
|
| - ASSERT(globals_.is_empty());
|
| + DCHECK(globals_.is_empty());
|
| AstVisitor::VisitDeclarations(declarations);
|
| if (!globals_.is_empty()) {
|
| Handle<FixedArray> array =
|
| @@ -11321,7 +11321,7 @@ void HOptimizedGraphBuilder::VisitModuleStatement(ModuleStatement* stmt) {
|
| // Generators for inline runtime functions.
|
| // Support for types.
|
| void HOptimizedGraphBuilder::GenerateIsSmi(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HIsSmiAndBranch* result = New<HIsSmiAndBranch>(value);
|
| @@ -11330,7 +11330,7 @@ void HOptimizedGraphBuilder::GenerateIsSmi(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateIsSpecObject(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HHasInstanceTypeAndBranch* result =
|
| @@ -11342,7 +11342,7 @@ void HOptimizedGraphBuilder::GenerateIsSpecObject(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateIsFunction(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HHasInstanceTypeAndBranch* result =
|
| @@ -11352,7 +11352,7 @@ void HOptimizedGraphBuilder::GenerateIsFunction(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateIsMinusZero(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HCompareMinusZeroAndBranch* result = New<HCompareMinusZeroAndBranch>(value);
|
| @@ -11361,7 +11361,7 @@ void HOptimizedGraphBuilder::GenerateIsMinusZero(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateHasCachedArrayIndex(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HHasCachedArrayIndexAndBranch* result =
|
| @@ -11371,7 +11371,7 @@ void HOptimizedGraphBuilder::GenerateHasCachedArrayIndex(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateIsArray(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HHasInstanceTypeAndBranch* result =
|
| @@ -11381,7 +11381,7 @@ void HOptimizedGraphBuilder::GenerateIsArray(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateIsRegExp(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HHasInstanceTypeAndBranch* result =
|
| @@ -11391,7 +11391,7 @@ void HOptimizedGraphBuilder::GenerateIsRegExp(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateIsObject(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HIsObjectAndBranch* result = New<HIsObjectAndBranch>(value);
|
| @@ -11405,7 +11405,7 @@ void HOptimizedGraphBuilder::GenerateIsNonNegativeSmi(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateIsUndetectableObject(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HIsUndetectableAndBranch* result = New<HIsUndetectableAndBranch>(value);
|
| @@ -11421,7 +11421,7 @@ void HOptimizedGraphBuilder::GenerateIsStringWrapperSafeForDefaultValueOf(
|
|
|
| // Support for construct call checks.
|
| void HOptimizedGraphBuilder::GenerateIsConstructCall(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 0);
|
| + DCHECK(call->arguments()->length() == 0);
|
| if (function_state()->outer() != NULL) {
|
| // We are generating graph for inlined function.
|
| HValue* value = function_state()->inlining_kind() == CONSTRUCT_CALL_RETURN
|
| @@ -11437,7 +11437,7 @@ void HOptimizedGraphBuilder::GenerateIsConstructCall(CallRuntime* call) {
|
|
|
| // Support for arguments.length and arguments[?].
|
| void HOptimizedGraphBuilder::GenerateArgumentsLength(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 0);
|
| + DCHECK(call->arguments()->length() == 0);
|
| HInstruction* result = NULL;
|
| if (function_state()->outer() == NULL) {
|
| HInstruction* elements = Add<HArgumentsElements>(false);
|
| @@ -11453,7 +11453,7 @@ void HOptimizedGraphBuilder::GenerateArgumentsLength(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateArguments(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* index = Pop();
|
| HInstruction* result = NULL;
|
| @@ -11486,7 +11486,7 @@ void HOptimizedGraphBuilder::GenerateClassOf(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateValueOf(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* object = Pop();
|
|
|
| @@ -11514,8 +11514,8 @@ void HOptimizedGraphBuilder::GenerateValueOf(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateDateField(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 2);
|
| - ASSERT_NE(NULL, call->arguments()->at(1)->AsLiteral());
|
| + DCHECK(call->arguments()->length() == 2);
|
| + DCHECK_NE(NULL, call->arguments()->at(1)->AsLiteral());
|
| Smi* index = Smi::cast(*(call->arguments()->at(1)->AsLiteral()->value()));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* date = Pop();
|
| @@ -11526,7 +11526,7 @@ void HOptimizedGraphBuilder::GenerateDateField(CallRuntime* call) {
|
|
|
| void HOptimizedGraphBuilder::GenerateOneByteSeqStringSetChar(
|
| CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 3);
|
| + DCHECK(call->arguments()->length() == 3);
|
| // We need to follow the evaluation order of full codegen.
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(2)));
|
| @@ -11543,7 +11543,7 @@ void HOptimizedGraphBuilder::GenerateOneByteSeqStringSetChar(
|
|
|
| void HOptimizedGraphBuilder::GenerateTwoByteSeqStringSetChar(
|
| CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 3);
|
| + DCHECK(call->arguments()->length() == 3);
|
| // We need to follow the evaluation order of full codegen.
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(2)));
|
| @@ -11559,7 +11559,7 @@ void HOptimizedGraphBuilder::GenerateTwoByteSeqStringSetChar(
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateSetValueOf(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 2);
|
| + DCHECK(call->arguments()->length() == 2);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* value = Pop();
|
| @@ -11597,7 +11597,7 @@ void HOptimizedGraphBuilder::GenerateSetValueOf(CallRuntime* call) {
|
|
|
| // Fast support for charCodeAt(n).
|
| void HOptimizedGraphBuilder::GenerateStringCharCodeAt(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 2);
|
| + DCHECK(call->arguments()->length() == 2);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* index = Pop();
|
| @@ -11609,7 +11609,7 @@ void HOptimizedGraphBuilder::GenerateStringCharCodeAt(CallRuntime* call) {
|
|
|
| // Fast support for string.charAt(n) and string[n].
|
| void HOptimizedGraphBuilder::GenerateStringCharFromCode(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* char_code = Pop();
|
| HInstruction* result = NewUncasted<HStringCharFromCode>(char_code);
|
| @@ -11619,7 +11619,7 @@ void HOptimizedGraphBuilder::GenerateStringCharFromCode(CallRuntime* call) {
|
|
|
| // Fast support for string.charAt(n) and string[n].
|
| void HOptimizedGraphBuilder::GenerateStringCharAt(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 2);
|
| + DCHECK(call->arguments()->length() == 2);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* index = Pop();
|
| @@ -11633,7 +11633,7 @@ void HOptimizedGraphBuilder::GenerateStringCharAt(CallRuntime* call) {
|
|
|
| // Fast support for object equality testing.
|
| void HOptimizedGraphBuilder::GenerateObjectEquals(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 2);
|
| + DCHECK(call->arguments()->length() == 2);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* right = Pop();
|
| @@ -11646,7 +11646,7 @@ void HOptimizedGraphBuilder::GenerateObjectEquals(CallRuntime* call) {
|
|
|
| // Fast support for StringAdd.
|
| void HOptimizedGraphBuilder::GenerateStringAdd(CallRuntime* call) {
|
| - ASSERT_EQ(2, call->arguments()->length());
|
| + DCHECK_EQ(2, call->arguments()->length());
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* right = Pop();
|
| @@ -11658,7 +11658,7 @@ void HOptimizedGraphBuilder::GenerateStringAdd(CallRuntime* call) {
|
|
|
| // Fast support for SubString.
|
| void HOptimizedGraphBuilder::GenerateSubString(CallRuntime* call) {
|
| - ASSERT_EQ(3, call->arguments()->length());
|
| + DCHECK_EQ(3, call->arguments()->length());
|
| CHECK_ALIVE(VisitExpressions(call->arguments()));
|
| PushArgumentsFromEnvironment(call->arguments()->length());
|
| HCallStub* result = New<HCallStub>(CodeStub::SubString, 3);
|
| @@ -11668,7 +11668,7 @@ void HOptimizedGraphBuilder::GenerateSubString(CallRuntime* call) {
|
|
|
| // Fast support for StringCompare.
|
| void HOptimizedGraphBuilder::GenerateStringCompare(CallRuntime* call) {
|
| - ASSERT_EQ(2, call->arguments()->length());
|
| + DCHECK_EQ(2, call->arguments()->length());
|
| CHECK_ALIVE(VisitExpressions(call->arguments()));
|
| PushArgumentsFromEnvironment(call->arguments()->length());
|
| HCallStub* result = New<HCallStub>(CodeStub::StringCompare, 2);
|
| @@ -11678,7 +11678,7 @@ void HOptimizedGraphBuilder::GenerateStringCompare(CallRuntime* call) {
|
|
|
| // Support for direct calls from JavaScript to native RegExp code.
|
| void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) {
|
| - ASSERT_EQ(4, call->arguments()->length());
|
| + DCHECK_EQ(4, call->arguments()->length());
|
| CHECK_ALIVE(VisitExpressions(call->arguments()));
|
| PushArgumentsFromEnvironment(call->arguments()->length());
|
| HCallStub* result = New<HCallStub>(CodeStub::RegExpExec, 4);
|
| @@ -11687,7 +11687,7 @@ void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateDoubleLo(CallRuntime* call) {
|
| - ASSERT_EQ(1, call->arguments()->length());
|
| + DCHECK_EQ(1, call->arguments()->length());
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HInstruction* result = NewUncasted<HDoubleBits>(value, HDoubleBits::LOW);
|
| @@ -11696,7 +11696,7 @@ void HOptimizedGraphBuilder::GenerateDoubleLo(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateDoubleHi(CallRuntime* call) {
|
| - ASSERT_EQ(1, call->arguments()->length());
|
| + DCHECK_EQ(1, call->arguments()->length());
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HInstruction* result = NewUncasted<HDoubleBits>(value, HDoubleBits::HIGH);
|
| @@ -11705,7 +11705,7 @@ void HOptimizedGraphBuilder::GenerateDoubleHi(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateConstructDouble(CallRuntime* call) {
|
| - ASSERT_EQ(2, call->arguments()->length());
|
| + DCHECK_EQ(2, call->arguments()->length());
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* lo = Pop();
|
| @@ -11717,7 +11717,7 @@ void HOptimizedGraphBuilder::GenerateConstructDouble(CallRuntime* call) {
|
|
|
| // Construct a RegExp exec result with two in-object properties.
|
| void HOptimizedGraphBuilder::GenerateRegExpConstructResult(CallRuntime* call) {
|
| - ASSERT_EQ(3, call->arguments()->length());
|
| + DCHECK_EQ(3, call->arguments()->length());
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(2)));
|
| @@ -11737,7 +11737,7 @@ void HOptimizedGraphBuilder::GenerateGetFromCache(CallRuntime* call) {
|
|
|
| // Fast support for number to string.
|
| void HOptimizedGraphBuilder::GenerateNumberToString(CallRuntime* call) {
|
| - ASSERT_EQ(1, call->arguments()->length());
|
| + DCHECK_EQ(1, call->arguments()->length());
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* number = Pop();
|
| HValue* result = BuildNumberToString(number, Type::Any(zone()));
|
| @@ -11749,7 +11749,7 @@ void HOptimizedGraphBuilder::GenerateNumberToString(CallRuntime* call) {
|
| void HOptimizedGraphBuilder::GenerateCallFunction(CallRuntime* call) {
|
| // 1 ~ The function to call is not itself an argument to the call.
|
| int arg_count = call->arguments()->length() - 1;
|
| - ASSERT(arg_count >= 1); // There's always at least a receiver.
|
| + DCHECK(arg_count >= 1); // There's always at least a receiver.
|
|
|
| CHECK_ALIVE(VisitExpressions(call->arguments()));
|
| // The function is the last argument
|
| @@ -11793,7 +11793,7 @@ void HOptimizedGraphBuilder::GenerateCallFunction(CallRuntime* call) {
|
|
|
| // Fast call to math functions.
|
| void HOptimizedGraphBuilder::GenerateMathPow(CallRuntime* call) {
|
| - ASSERT_EQ(2, call->arguments()->length());
|
| + DCHECK_EQ(2, call->arguments()->length());
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
|
| HValue* right = Pop();
|
| @@ -11804,7 +11804,7 @@ void HOptimizedGraphBuilder::GenerateMathPow(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateMathLogRT(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HInstruction* result = NewUncasted<HUnaryMathOperation>(value, kMathLog);
|
| @@ -11813,7 +11813,7 @@ void HOptimizedGraphBuilder::GenerateMathLogRT(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateMathSqrtRT(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HInstruction* result = NewUncasted<HUnaryMathOperation>(value, kMathSqrt);
|
| @@ -11822,7 +11822,7 @@ void HOptimizedGraphBuilder::GenerateMathSqrtRT(CallRuntime* call) {
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateGetCachedArrayIndex(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 1);
|
| + DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| HValue* value = Pop();
|
| HGetCachedArrayIndex* result = New<HGetCachedArrayIndex>(value);
|
| @@ -11854,7 +11854,7 @@ void HOptimizedGraphBuilder::GenerateDebugBreakInOptimizedCode(
|
|
|
|
|
| void HOptimizedGraphBuilder::GenerateDebugIsActive(CallRuntime* call) {
|
| - ASSERT(call->arguments()->length() == 0);
|
| + DCHECK(call->arguments()->length() == 0);
|
| HValue* ref =
|
| Add<HConstant>(ExternalReference::debug_is_active_address(isolate()));
|
| HValue* value = Add<HLoadNamedField>(
|
| @@ -11971,8 +11971,8 @@ void HEnvironment::Initialize(const HEnvironment* other) {
|
|
|
|
|
| void HEnvironment::AddIncomingEdge(HBasicBlock* block, HEnvironment* other) {
|
| - ASSERT(!block->IsLoopHeader());
|
| - ASSERT(values_.length() == other->values_.length());
|
| + DCHECK(!block->IsLoopHeader());
|
| + DCHECK(values_.length() == other->values_.length());
|
|
|
| int length = values_.length();
|
| for (int i = 0; i < length; ++i) {
|
| @@ -11981,12 +11981,12 @@ void HEnvironment::AddIncomingEdge(HBasicBlock* block, HEnvironment* other) {
|
| // There is already a phi for the i'th value.
|
| HPhi* phi = HPhi::cast(value);
|
| // Assert index is correct and that we haven't missed an incoming edge.
|
| - ASSERT(phi->merged_index() == i || !phi->HasMergedIndex());
|
| - ASSERT(phi->OperandCount() == block->predecessors()->length());
|
| + DCHECK(phi->merged_index() == i || !phi->HasMergedIndex());
|
| + DCHECK(phi->OperandCount() == block->predecessors()->length());
|
| phi->AddInput(other->values_[i]);
|
| } else if (values_[i] != other->values_[i]) {
|
| // There is a fresh value on the incoming edge, a phi is needed.
|
| - ASSERT(values_[i] != NULL && other->values_[i] != NULL);
|
| + DCHECK(values_[i] != NULL && other->values_[i] != NULL);
|
| HPhi* phi = block->AddNewPhi(i);
|
| HValue* old_value = values_[i];
|
| for (int j = 0; j < block->predecessors()->length(); j++) {
|
| @@ -12000,7 +12000,7 @@ void HEnvironment::AddIncomingEdge(HBasicBlock* block, HEnvironment* other) {
|
|
|
|
|
| void HEnvironment::Bind(int index, HValue* value) {
|
| - ASSERT(value != NULL);
|
| + DCHECK(value != NULL);
|
| assigned_variables_.Add(index, zone());
|
| values_[index] = value;
|
| }
|
| @@ -12012,7 +12012,7 @@ bool HEnvironment::HasExpressionAt(int index) const {
|
|
|
|
|
| bool HEnvironment::ExpressionStackIsEmpty() const {
|
| - ASSERT(length() >= first_expression_index());
|
| + DCHECK(length() >= first_expression_index());
|
| return length() == first_expression_index();
|
| }
|
|
|
| @@ -12020,7 +12020,7 @@ bool HEnvironment::ExpressionStackIsEmpty() const {
|
| void HEnvironment::SetExpressionStackAt(int index_from_top, HValue* value) {
|
| int count = index_from_top + 1;
|
| int index = values_.length() - count;
|
| - ASSERT(HasExpressionAt(index));
|
| + DCHECK(HasExpressionAt(index));
|
| // The push count must include at least the element in question or else
|
| // the new value will not be included in this environment's history.
|
| if (push_count_ < count) {
|
| @@ -12084,7 +12084,7 @@ HEnvironment* HEnvironment::CopyForInlining(
|
| FunctionLiteral* function,
|
| HConstant* undefined,
|
| InliningKind inlining_kind) const {
|
| - ASSERT(frame_type() == JS_FUNCTION);
|
| + DCHECK(frame_type() == JS_FUNCTION);
|
|
|
| // Outer environment is a copy of this one without the arguments.
|
| int arity = function->scope()->num_parameters();
|
| @@ -12172,7 +12172,7 @@ void HTracer::TraceCompilation(CompilationInfo* info) {
|
|
|
|
|
| void HTracer::TraceLithium(const char* name, LChunk* chunk) {
|
| - ASSERT(!chunk->isolate()->concurrent_recompilation_enabled());
|
| + DCHECK(!chunk->isolate()->concurrent_recompilation_enabled());
|
| AllowHandleDereference allow_deref;
|
| AllowDeferredHandleDereference allow_deferred_deref;
|
| Trace(name, chunk->graph(), chunk);
|
| @@ -12180,7 +12180,7 @@ void HTracer::TraceLithium(const char* name, LChunk* chunk) {
|
|
|
|
|
| void HTracer::TraceHydrogen(const char* name, HGraph* graph) {
|
| - ASSERT(!graph->isolate()->concurrent_recompilation_enabled());
|
| + DCHECK(!graph->isolate()->concurrent_recompilation_enabled());
|
| AllowHandleDereference allow_deref;
|
| AllowDeferredHandleDereference allow_deferred_deref;
|
| Trace(name, graph, NULL);
|
| @@ -12348,7 +12348,7 @@ void HTracer::TraceLiveRange(LiveRange* range, const char* type,
|
| trace_.Add(" \"%s\"",
|
| DoubleRegister::AllocationIndexToString(assigned_reg));
|
| } else {
|
| - ASSERT(op->IsRegister());
|
| + DCHECK(op->IsRegister());
|
| trace_.Add(" \"%s\"", Register::AllocationIndexToString(assigned_reg));
|
| }
|
| } else if (range->IsSpilled()) {
|
| @@ -12356,7 +12356,7 @@ void HTracer::TraceLiveRange(LiveRange* range, const char* type,
|
| if (op->IsDoubleStackSlot()) {
|
| trace_.Add(" \"double_stack:%d\"", op->index());
|
| } else {
|
| - ASSERT(op->IsStackSlot());
|
| + DCHECK(op->IsStackSlot());
|
| trace_.Add(" \"stack:%d\"", op->index());
|
| }
|
| }
|
|
|