Revision f230a1cf deps/v8/src/hydrogen-osr.cc

View differences:

deps/v8/src/hydrogen-osr.cc
37 37
}
38 38

  
39 39

  
40
// Build a new loop header block and set it as the current block.
41
HBasicBlock *HOsrBuilder::BuildLoopEntry() {
42
  HBasicBlock* loop_entry = builder_->CreateLoopHeaderBlock();
43
  builder_->current_block()->Goto(loop_entry);
44
  builder_->set_current_block(loop_entry);
45
  return loop_entry;
46
}
47

  
48

  
49
HBasicBlock* HOsrBuilder::BuildPossibleOsrLoopEntry(
50
    IterationStatement* statement) {
51
  // Check if there is an OSR here first.
52
  if (!HasOsrEntryAt(statement)) return BuildLoopEntry();
40
HBasicBlock* HOsrBuilder::BuildOsrLoopEntry(IterationStatement* statement) {
41
  ASSERT(HasOsrEntryAt(statement));
53 42

  
54 43
  Zone* zone = builder_->zone();
55 44
  HGraph* graph = builder_->graph();
......
63 52
  HBasicBlock* non_osr_entry = graph->CreateBasicBlock();
64 53
  osr_entry_ = graph->CreateBasicBlock();
65 54
  HValue* true_value = graph->GetConstantTrue();
66
  HBranch* test = new(zone) HBranch(true_value, ToBooleanStub::Types(),
67
                                    non_osr_entry, osr_entry_);
68
  builder_->current_block()->Finish(test);
55
  HBranch* test = builder_->New<HBranch>(true_value, ToBooleanStub::Types(),
56
                                         non_osr_entry, osr_entry_);
57
  builder_->FinishCurrentBlock(test);
69 58

  
70 59
  HBasicBlock* loop_predecessor = graph->CreateBasicBlock();
71
  non_osr_entry->Goto(loop_predecessor);
60
  builder_->Goto(non_osr_entry, loop_predecessor);
72 61

  
73 62
  builder_->set_current_block(osr_entry_);
74 63
  osr_entry_->set_osr_entry();
......
108 97
  builder_->Add<HOsrEntry>(osr_entry_id);
109 98
  HContext* context = builder_->Add<HContext>();
110 99
  environment->BindContext(context);
111
  builder_->current_block()->Goto(loop_predecessor);
100
  builder_->Goto(loop_predecessor);
112 101
  loop_predecessor->SetJoinId(statement->EntryId());
113 102
  builder_->set_current_block(loop_predecessor);
114 103

  
115 104
  // Create the final loop entry
116
  osr_loop_entry_ = BuildLoopEntry();
105
  osr_loop_entry_ = builder_->BuildLoopEntry();
117 106
  return osr_loop_entry_;
118 107
}
119 108

  

Also available in: Unified diff