5#ifndef V8_MAGLEV_MAGLEV_GRAPH_PROCESSOR_H_ 
    6#define V8_MAGLEV_MAGLEV_GRAPH_PROCESSOR_H_ 
   44template <
typename NodeProcessor, 
bool visit_
identity_nodes = false>
 
   89template <
typename NodeProcessor, 
bool visit_
identity_nodes>
 
   92  template <
typename... Args>
 
  101    auto process_constants = [&](
auto& 
map) {
 
  102      for (
auto it = map.begin(); it != map.end();) {
 
  119    process_constants(graph->constants());
 
  120    process_constants(graph->root());
 
  121    process_constants(graph->smi());
 
  122    process_constants(graph->tagged_index());
 
  123    process_constants(graph->int32());
 
  124    process_constants(graph->uint32());
 
  125    process_constants(graph->float64());
 
  126    process_constants(graph->external_references());
 
  127    process_constants(graph->trusted_constants());
 
  134      switch (preprocess_result) {
 
  141      if (block->has_phi()) {
 
  142        auto& phis = *block->phis();
 
  143        for (
auto it = phis.begin(); it != phis.end();) {
 
  152              it = phis.RemoveAt(it);
 
  169        if (node == 
nullptr) 
continue;
 
  178            DCHECK(block->predecessor_count() == 1 ||
 
  179                   (block->predecessor_count() == 2 && block->is_loop()));
 
  181            DCHECK(target->successors().size() == 1);
 
  185            target->nodes().push_back(cur);
 
  199        switch (control_result) {
 
 
  227    switch (node->opcode()) {
 
  228#define CASE(OPCODE)                                        \ 
  229  case Opcode::k##OPCODE:                                   \ 
  230    if constexpr (!visit_identity_nodes &&                  \ 
  231                  Opcode::k##OPCODE == Opcode::kIdentity) { \ 
  232      return ProcessResult::kContinue;                      \ 
  234    PreProcess(node->Cast<OPCODE>(), state);                \ 
  235    return node_processor_.Process(node->Cast<OPCODE>(), state); 
 
 
  252template <
typename... Processors>
 
  271template <
typename Processor, 
typename... Processors>
 
  277  template <
typename... Args>
 
  279      : 
Base(
std::forward<Args>(processors)...),
 
 
  281  template <
typename... Args>
 
  283      : 
Base(
std::forward<Args>(processors)...) {}
 
 
  285  template <
typename Node>
 
  290        return Base::Process(node, state);
 
 
  303    Base::PreProcessGraph(graph);
 
 
  307    Base::PostProcessGraph(graph);
 
 
  311    Base::PostProcessBasicBlock(block);
 
 
  318        return Base::PreProcessBasicBlock(block);
 
 
  327    Base::PostPhiProcessing();
 
 
 
  334template <
typename... Processors>
 
BasicBlock * predecessor_at(int i) const
 
void ProcessGraph(Graph *graph)
 
const NodeProcessor & node_processor() const
 
ProcessingState GetCurrentState()
 
ProcessResult ProcessNodeBase(NodeBase *node, const ProcessingState &state)
 
BlockConstIterator block_it_
 
NodeProcessor & node_processor()
 
NodeProcessor node_processor_
 
GraphProcessor(Args &&... args)
 
void PreProcess(NodeBase *node, const ProcessingState &state)
 
void set_owner(BasicBlock *block)
 
NodeMultiProcessor(Processor &&processor, Args &&... processors)
 
void PostProcessBasicBlock(BasicBlock *block)
 
ProcessResult Process(Node *node, const ProcessingState &state)
 
BlockProcessResult PreProcessBasicBlock(BasicBlock *block)
 
void PostProcessGraph(Graph *graph)
 
NodeMultiProcessor(Args &&... processors)
 
void PreProcessGraph(Graph *graph)
 
void PostProcessBasicBlock(BasicBlock *block)
 
BlockProcessResult PreProcessBasicBlock(BasicBlock *block)
 
V8_INLINE ProcessResult Process(NodeBase *node, const ProcessingState &state)
 
void PreProcessGraph(Graph *graph)
 
void PostProcessGraph(Graph *graph)
 
BasicBlock * block() const
 
ProcessingState & operator=(const ProcessingState &)=delete
 
BlockConstIterator block_it_
 
ProcessingState(BlockConstIterator block_it, NodeIterator *node_it=nullptr)
 
NodeIterator * node_it() const
 
BasicBlock * next_block() const
 
ProcessingState(const ProcessingState &)=delete
 
base::Vector< const DirectHandle< Object > > args
 
ZoneVector< RpoNumber > & result
 
ProcessorImpl * processor_
 
ZoneVector< Node * >::iterator NodeIterator
 
#define DCHECK_NOT_NULL(val)
 
#define DCHECK(condition)