Home | History | Annotate | Download | only in optimizing

Lines Matching refs:block

39     HBasicBlock* block = worklist.back();
41 int block_id = block->GetBlockId();
44 ArrayRef<HBasicBlock* const> live_successors(block->GetSuccessors());
45 HInstruction* last_instruction = block->GetLastInstruction();
72 DCHECK_EQ(live_successors[0], block->GetSuccessors()[switch_index]);
90 void HDeadCodeElimination::MaybeRecordDeadBlock(HBasicBlock* block) {
93 block->GetPhis().CountSize() + block->GetInstructions().CountSize());
149 static bool RemoveNonNullControlDependences(HBasicBlock* block, HBasicBlock* throws) {
151 if (!block->EndsWithIf()) {
154 HIf* ifs = block->GetLastInstruction()->AsIf();
189 if (user_block != block &&
191 block->Dominates(user_block)) {
242 for (HBasicBlock* block : graph_->GetReversePostOrder()) {
243 HInstruction* first = block->GetFirstInstruction();
244 HInstruction* last = block->GetLastInstruction();
249 block->GetPhis().IsEmpty() &&
250 block->GetPredecessors().size() == 1u) {
251 DCHECK_EQ(block->GetSuccessors().size(), 1u);
252 HBasicBlock* pred = block->GetSinglePredecessor();
253 HBasicBlock* succ = block->GetSingleSuccessor();
254 // Ensure no computations are merged through throwing block.
258 !block->Dominates(pred) &&
262 block->ReplaceSuccessor(succ, exit);
267 if (RemoveNonNullControlDependences(pred, block)) {
311 // going directly to a catch block, we cannot support it at the
313 // catch block's predecessors, so we cannot identify which
325 for (HBasicBlock* block : graph_->GetReversePostOrder()) {
326 HInstruction* last = block->GetLastInstruction();
327 HInstruction* first = block->GetFirstInstruction();
328 if (!block->IsCatchBlock() &&
330 block->HasSinglePhi() &&
331 block->GetFirstPhi()->HasOnlyOneNonEnvironmentUse()) {
332 bool has_only_phi_and_if = (last == first) && (last->InputAt(0) == block->GetFirstPhi());
336 HasInput(first->AsCondition(), block->GetFirstPhi()) &&
342 DCHECK(!block->IsLoopHeader());
343 HPhi* phi = block->GetFirstPhi()->AsPhi();
368 HBasicBlock* predecessor_to_update = block->GetPredecessors()[i];
377 predecessor_to_update->ReplaceSuccessor(block, successor_to_update);
380 if (block->IsInLoop()) {
383 // For simplicity, don't create a dead block, let the dead code elimination
390 if (block->GetPredecessors().size() == 1) {
392 block->RemovePhi(phi);
399 block->RemoveInstruction(first);
428 // Order does not matter. Skip the entry block by starting at index 1 in reverse post order.
430 HBasicBlock* block = graph_->GetReversePostOrder()[i];
431 DCHECK(!block->IsEntryBlock());
432 while (block->GetLastInstruction()->IsGoto()) {
433 HBasicBlock* successor = block->GetSingleSuccessor();
438 block->MergeWith(successor);
441 DCHECK_EQ(block
442 // Reiterate on this block in case it can be merged with its new successor.
460 // block's chain of dominators and nested loops need to be updated from the
462 for (HBasicBlock* block : graph_->GetPostOrder()) {
463 int id = block->GetBlockId();
465 MaybeRecordDeadBlock(block);
466 block->DisconnectAndDelete();
468 if (block->IsInLoop()) {
474 // If we removed at least one block, we need to recompute the full
475 // dominator tree and try block membership.
493 for (HBasicBlock* block : graph_->GetPostOrder()) {
494 // Traverse this block's instructions in backward order and remove
496 HBackwardInstructionIterator i(block->GetInstructions());
497 // Skip the first iteration, as the last instruction of a block is
504 block->RemoveInstruction(inst);
516 // Simplify graph to generate more dead block patterns.