440 }
441 }
442 return -1;
443 }
444 int replace_edge(Node* old, Node* neww);
445 int replace_edges_in_range(Node* old, Node* neww, int start, int end);
446 // NULL out all inputs to eliminate incoming Def-Use edges.
447 // Return the number of edges between 'n' and 'this'
448 int disconnect_inputs(Node *n, Compile *c);
449
450 // Quickly, return true if and only if I am Compile::current()->top().
451 bool is_top() const {
452 assert((this == (Node*) Compile::current()->top()) == (_out == NULL), "");
453 return (_out == NULL);
454 }
455 // Reaffirm invariants for is_top. (Only from Compile::set_cached_top_node.)
456 void setup_is_top();
457
458 // Strip away casting. (It is depth-limited.)
459 Node* uncast() const;
460 // Return whether two Nodes are equivalent, after stripping casting.
461 bool eqv_uncast(const Node* n) const {
462 return (this->uncast() == n->uncast());
463 }
464
465 // Find out of current node that matches opcode.
466 Node* find_out_with(int opcode);
467 // Return true if the current node has an out that matches opcode.
468 bool has_out_with(int opcode);
469 // Return true if the current node has an out that matches any of the opcodes.
470 bool has_out_with(int opcode1, int opcode2, int opcode3, int opcode4);
471
472 private:
473 static Node* uncast_helper(const Node* n);
474
475 // Add an output edge to the end of the list
476 void add_out( Node *n ) {
477 if (is_top()) return;
478 if( _outcnt == _outmax ) out_grow(_outcnt);
479 _out[_outcnt++] = n;
480 }
481 // Delete an output edge
482 void del_out( Node *n ) {
483 if (is_top()) return;
|
440 }
441 }
442 return -1;
443 }
444 int replace_edge(Node* old, Node* neww);
445 int replace_edges_in_range(Node* old, Node* neww, int start, int end);
446 // NULL out all inputs to eliminate incoming Def-Use edges.
447 // Return the number of edges between 'n' and 'this'
448 int disconnect_inputs(Node *n, Compile *c);
449
450 // Quickly, return true if and only if I am Compile::current()->top().
451 bool is_top() const {
452 assert((this == (Node*) Compile::current()->top()) == (_out == NULL), "");
453 return (_out == NULL);
454 }
455 // Reaffirm invariants for is_top. (Only from Compile::set_cached_top_node.)
456 void setup_is_top();
457
458 // Strip away casting. (It is depth-limited.)
459 Node* uncast() const;
460 // Return whether two Nodes are equivalent, after stripping casting
461 // and GC barriers.
462 bool eqv_uncast(const Node* n) const;
463
464 // Find out of current node that matches opcode.
465 Node* find_out_with(int opcode);
466 // Return true if the current node has an out that matches opcode.
467 bool has_out_with(int opcode);
468 // Return true if the current node has an out that matches any of the opcodes.
469 bool has_out_with(int opcode1, int opcode2, int opcode3, int opcode4);
470
471 private:
472 static Node* uncast_helper(const Node* n);
473
474 // Add an output edge to the end of the list
475 void add_out( Node *n ) {
476 if (is_top()) return;
477 if( _outcnt == _outmax ) out_grow(_outcnt);
478 _out[_outcnt++] = n;
479 }
480 // Delete an output edge
481 void del_out( Node *n ) {
482 if (is_top()) return;
|