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

Side by Side Diff: src/compiler/structured-machine-assembler.cc

Issue 505133003: Introduce subclass wrappers for STL containers that make them a lot easier (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/compiler/structured-machine-assembler.h ('k') | src/compiler/verifier.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/pipeline.h" 5 #include "src/compiler/pipeline.h"
6 #include "src/compiler/scheduler.h" 6 #include "src/compiler/scheduler.h"
7 #include "src/compiler/structured-machine-assembler.h" 7 #include "src/compiler/structured-machine-assembler.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 if (environment->is_dead_) return; 299 if (environment->is_dead_) return;
300 BasicBlock* true_block = TrampolineFor(true_val->block_); 300 BasicBlock* true_block = TrampolineFor(true_val->block_);
301 BasicBlock* false_block = TrampolineFor(false_val->block_); 301 BasicBlock* false_block = TrampolineFor(false_val->block_);
302 schedule()->AddBranch(environment->block_, branch, true_block, false_block); 302 schedule()->AddBranch(environment->block_, branch, true_block, false_block);
303 } 303 }
304 304
305 305
306 StructuredMachineAssembler::Environment::Environment(Zone* zone, 306 StructuredMachineAssembler::Environment::Environment(Zone* zone,
307 BasicBlock* block, 307 BasicBlock* block,
308 bool is_dead) 308 bool is_dead)
309 : block_(block), 309 : block_(block), variables_(zone), is_dead_(is_dead) {}
310 variables_(NodeVector::allocator_type(zone)),
311 is_dead_(is_dead) {}
312 310
313 311
314 StructuredMachineAssembler::IfBuilder::IfBuilder( 312 StructuredMachineAssembler::IfBuilder::IfBuilder(
315 StructuredMachineAssembler* smasm) 313 StructuredMachineAssembler* smasm)
316 : smasm_(smasm), 314 : smasm_(smasm),
317 if_clauses_(IfClauses::allocator_type(smasm_->zone())), 315 if_clauses_(smasm_->zone()),
318 pending_exit_merges_(EnvironmentVector::allocator_type(smasm_->zone())) { 316 pending_exit_merges_(smasm_->zone()) {
319 DCHECK(smasm_->current_environment_ != NULL); 317 DCHECK(smasm_->current_environment_ != NULL);
320 PushNewIfClause(); 318 PushNewIfClause();
321 DCHECK(!IsDone()); 319 DCHECK(!IsDone());
322 } 320 }
323 321
324 322
325 StructuredMachineAssembler::IfBuilder& 323 StructuredMachineAssembler::IfBuilder&
326 StructuredMachineAssembler::IfBuilder::If() { 324 StructuredMachineAssembler::IfBuilder::If() {
327 DCHECK(smasm_->current_environment_ != NULL); 325 DCHECK(smasm_->current_environment_ != NULL);
328 IfClause* clause = CurrentClause(); 326 IfClause* clause = CurrentClause();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 static_cast<int>(smasm_->current_environment_->variables_.size()); 385 static_cast<int>(smasm_->current_environment_->variables_.size());
388 IfClause* clause = new (smasm_->zone()) IfClause(smasm_->zone(), curr_size); 386 IfClause* clause = new (smasm_->zone()) IfClause(smasm_->zone(), curr_size);
389 if_clauses_.push_back(clause); 387 if_clauses_.push_back(clause);
390 } 388 }
391 389
392 390
393 StructuredMachineAssembler::IfBuilder::IfClause::IfClause( 391 StructuredMachineAssembler::IfBuilder::IfClause::IfClause(
394 Zone* zone, int initial_environment_size) 392 Zone* zone, int initial_environment_size)
395 : unresolved_list_tail_(NULL), 393 : unresolved_list_tail_(NULL),
396 initial_environment_size_(initial_environment_size), 394 initial_environment_size_(initial_environment_size),
397 expression_states_(ExpressionStates::allocator_type(zone)), 395 expression_states_(zone),
398 pending_then_merges_(PendingMergeStack::allocator_type(zone)), 396 pending_then_merges_(zone),
399 pending_else_merges_(PendingMergeStack::allocator_type(zone)), 397 pending_else_merges_(zone),
400 then_environment_(NULL), 398 then_environment_(NULL),
401 else_environment_(NULL) { 399 else_environment_(NULL) {
402 PushNewExpressionState(); 400 PushNewExpressionState();
403 } 401 }
404 402
405 403
406 StructuredMachineAssembler::IfBuilder::PendingMergeStackRange 404 StructuredMachineAssembler::IfBuilder::PendingMergeStackRange
407 StructuredMachineAssembler::IfBuilder::IfClause::ComputeRelevantMerges( 405 StructuredMachineAssembler::IfBuilder::IfClause::ComputeRelevantMerges(
408 CombineType combine_type) { 406 CombineType combine_type) {
409 DCHECK(!expression_states_.empty()); 407 DCHECK(!expression_states_.empty());
(...skipping 22 matching lines...) Expand all
432 PendingMergeStackRange data = ComputeRelevantMerges(combine_type); 430 PendingMergeStackRange data = ComputeRelevantMerges(combine_type);
433 DCHECK_EQ(data.merge_stack_->back(), unresolved_list_tail_); 431 DCHECK_EQ(data.merge_stack_->back(), unresolved_list_tail_);
434 DCHECK(data.size_ > 0); 432 DCHECK(data.size_ > 0);
435 // TODO(dcarney): assert no new variables created during expression building. 433 // TODO(dcarney): assert no new variables created during expression building.
436 int truncate_at = initial_environment_size_; 434 int truncate_at = initial_environment_size_;
437 if (data.size_ == 1) { 435 if (data.size_ == 1) {
438 // Just copy environment in common case. 436 // Just copy environment in common case.
439 smasm->current_environment_ = 437 smasm->current_environment_ =
440 smasm->Copy(unresolved_list_tail_->environment_, truncate_at); 438 smasm->Copy(unresolved_list_tail_->environment_, truncate_at);
441 } else { 439 } else {
442 EnvironmentVector environments( 440 EnvironmentVector environments(smasm->zone());
443 EnvironmentVector::allocator_type(smasm->zone()));
444 environments.reserve(data.size_); 441 environments.reserve(data.size_);
445 CopyEnvironments(data, &environments); 442 CopyEnvironments(data, &environments);
446 DCHECK(static_cast<int>(environments.size()) == data.size_); 443 DCHECK(static_cast<int>(environments.size()) == data.size_);
447 smasm->Merge(&environments, truncate_at); 444 smasm->Merge(&environments, truncate_at);
448 } 445 }
449 Environment* then_environment = then_environment_; 446 Environment* then_environment = then_environment_;
450 Environment* else_environment = NULL; 447 Environment* else_environment = NULL;
451 if (resolution_type == kExpressionDone) { 448 if (resolution_type == kExpressionDone) {
452 DCHECK(expression_states_.size() == 1); 449 DCHECK(expression_states_.size() == 1);
453 // Set the current then_ or else_environment_ to the new merged environment. 450 // Set the current then_ or else_environment_ to the new merged environment.
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 pending_exit_merges_.clear(); 600 pending_exit_merges_.clear();
604 if_clauses_.clear(); 601 if_clauses_.clear();
605 DCHECK(IsDone()); 602 DCHECK(IsDone());
606 } 603 }
607 604
608 605
609 StructuredMachineAssembler::LoopBuilder::LoopBuilder( 606 StructuredMachineAssembler::LoopBuilder::LoopBuilder(
610 StructuredMachineAssembler* smasm) 607 StructuredMachineAssembler* smasm)
611 : smasm_(smasm), 608 : smasm_(smasm),
612 header_environment_(NULL), 609 header_environment_(NULL),
613 pending_header_merges_(EnvironmentVector::allocator_type(smasm_->zone())), 610 pending_header_merges_(smasm_->zone()),
614 pending_exit_merges_(EnvironmentVector::allocator_type(smasm_->zone())) { 611 pending_exit_merges_(smasm_->zone()) {
615 DCHECK(smasm_->current_environment_ != NULL); 612 DCHECK(smasm_->current_environment_ != NULL);
616 // Create header environment. 613 // Create header environment.
617 header_environment_ = smasm_->CopyForLoopHeader(smasm_->current_environment_); 614 header_environment_ = smasm_->CopyForLoopHeader(smasm_->current_environment_);
618 smasm_->AddGoto(smasm_->current_environment_, header_environment_); 615 smasm_->AddGoto(smasm_->current_environment_, header_environment_);
619 // Create body environment. 616 // Create body environment.
620 Environment* body = smasm_->Copy(header_environment_); 617 Environment* body = smasm_->Copy(header_environment_);
621 smasm_->AddGoto(header_environment_, body); 618 smasm_->AddGoto(header_environment_, body);
622 smasm_->current_environment_ = body; 619 smasm_->current_environment_ = body;
623 DCHECK(!IsDone()); 620 DCHECK(!IsDone());
624 } 621 }
(...skipping 30 matching lines...) Expand all
655 } 652 }
656 pending_header_merges_.clear(); 653 pending_header_merges_.clear();
657 pending_exit_merges_.clear(); 654 pending_exit_merges_.clear();
658 header_environment_ = NULL; 655 header_environment_ = NULL;
659 DCHECK(IsDone()); 656 DCHECK(IsDone());
660 } 657 }
661 658
662 } // namespace compiler 659 } // namespace compiler
663 } // namespace internal 660 } // namespace internal
664 } // namespace v8 661 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/structured-machine-assembler.h ('k') | src/compiler/verifier.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698