< prev index next >

src/hotspot/share/opto/node.hpp

Print this page
rev 52175 : JDK-8212603: Need to step over GC barriers in Node::eqv_uncast()


 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;


< prev index next >