800 801 // Return an existing node which computes the same function as this node. 802 // The optimistic combined algorithm requires this to return a Node which 803 // is a small number of steps away (e.g., one of my inputs). 804 virtual Node *Identity( PhaseTransform *phase ); 805 806 // Return the set of values this Node can take on at runtime. 807 virtual const Type *Value( PhaseTransform *phase ) const; 808 809 // Return a node which is more "ideal" than the current node. 810 // The invariants on this call are subtle. If in doubt, read the 811 // treatise in node.cpp above the default implemention AND TEST WITH 812 // +VerifyIterativeGVN! 813 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 814 815 // Some nodes have specific Ideal subgraph transformations only if they are 816 // unique users of specific nodes. Such nodes should be put on IGVN worklist 817 // for the transformations to happen. 818 bool has_special_unique_user() const; 819 820 protected: 821 bool remove_dead_region(PhaseGVN *phase, bool can_reshape); 822 public: 823 824 // Idealize graph, using DU info. Done after constant propagation 825 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp ); 826 827 // See if there is valid pipeline info 828 static const Pipeline *pipeline_class(); 829 virtual const Pipeline *pipeline() const; 830 831 // Compute the latency from the def to this instruction of the ith input node 832 uint latency(uint i); 833 834 // Hash & compare functions, for pessimistic value numbering 835 836 // If the hash function returns the special sentinel value NO_HASH, 837 // the node is guaranteed never to compare equal to any other node. 838 // If we accidently generate a hash with value NO_HASH the node 839 // won't go into the table and we'll lose a little optimization. | 800 801 // Return an existing node which computes the same function as this node. 802 // The optimistic combined algorithm requires this to return a Node which 803 // is a small number of steps away (e.g., one of my inputs). 804 virtual Node *Identity( PhaseTransform *phase ); 805 806 // Return the set of values this Node can take on at runtime. 807 virtual const Type *Value( PhaseTransform *phase ) const; 808 809 // Return a node which is more "ideal" than the current node. 810 // The invariants on this call are subtle. If in doubt, read the 811 // treatise in node.cpp above the default implemention AND TEST WITH 812 // +VerifyIterativeGVN! 813 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 814 815 // Some nodes have specific Ideal subgraph transformations only if they are 816 // unique users of specific nodes. Such nodes should be put on IGVN worklist 817 // for the transformations to happen. 818 bool has_special_unique_user() const; 819 820 // Skip Proj and CatchProj nodes chains. Check for Null and Top. 821 Node* find_exact_control(Node* ctrl); 822 823 // Check if 'this' node dominates or equal to 'sub'. 824 bool dominates(Node* sub, Node_List &nlist); 825 826 protected: 827 bool remove_dead_region(PhaseGVN *phase, bool can_reshape); 828 public: 829 830 // Idealize graph, using DU info. Done after constant propagation 831 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp ); 832 833 // See if there is valid pipeline info 834 static const Pipeline *pipeline_class(); 835 virtual const Pipeline *pipeline() const; 836 837 // Compute the latency from the def to this instruction of the ith input node 838 uint latency(uint i); 839 840 // Hash & compare functions, for pessimistic value numbering 841 842 // If the hash function returns the special sentinel value NO_HASH, 843 // the node is guaranteed never to compare equal to any other node. 844 // If we accidently generate a hash with value NO_HASH the node 845 // won't go into the table and we'll lose a little optimization. |