V8 Project
v8::internal::HStackCheckEliminationPhase Class Reference

#include <hydrogen-sce.h>

+ Inheritance diagram for v8::internal::HStackCheckEliminationPhase:
+ Collaboration diagram for v8::internal::HStackCheckEliminationPhase:

Public Member Functions

 HStackCheckEliminationPhase (HGraph *graph)
 
void Run ()
 
- Public Member Functions inherited from v8::internal::HPhase
 HPhase (const char *name, HGraph *graph)
 
 ~HPhase ()
 

Additional Inherited Members

- Protected Member Functions inherited from v8::internal::HPhase
HGraph * graph () const
 

Detailed Description

Definition at line 14 of file hydrogen-sce.h.

Constructor & Destructor Documentation

◆ HStackCheckEliminationPhase()

v8::internal::HStackCheckEliminationPhase::HStackCheckEliminationPhase ( HGraph *  graph)
inlineexplicit

Definition at line 16 of file hydrogen-sce.h.

17  : HPhase("H_Stack check elimination", graph) { }
HGraph * graph() const
Definition: hydrogen.h:2802
HPhase(const char *name, HGraph *graph)
Definition: hydrogen.h:2796

Member Function Documentation

◆ Run()

void v8::internal::HStackCheckEliminationPhase::Run ( )

Definition at line 11 of file hydrogen-sce.cc.

11  {
12  // For each loop block walk the dominator tree from the backwards branch to
13  // the loop header. If a call instruction is encountered the backwards branch
14  // is dominated by a call and the stack check in the backwards branch can be
15  // removed.
16  for (int i = 0; i < graph()->blocks()->length(); i++) {
17  HBasicBlock* block = graph()->blocks()->at(i);
18  if (block->IsLoopHeader()) {
19  HBasicBlock* back_edge = block->loop_information()->GetLastBackEdge();
20  HBasicBlock* dominator = back_edge;
21  while (true) {
22  for (HInstructionIterator it(dominator); !it.Done(); it.Advance()) {
23  if (it.Current()->HasStackCheck()) {
24  block->loop_information()->stack_check()->Eliminate();
25  break;
26  }
27  }
28 
29  // Done when the loop header is processed.
30  if (dominator == block) break;
31 
32  // Move up the dominator tree.
33  dominator = dominator->dominator();
34  }
35  }
36  }
37 }

References v8::internal::HPhase::graph().

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: