880 // The invariants on this call are subtle. If in doubt, read the
881 // treatise in node.cpp above the default implemention AND TEST WITH
882 // +VerifyIterativeGVN!
883 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
884
885 // Some nodes have specific Ideal subgraph transformations only if they are
886 // unique users of specific nodes. Such nodes should be put on IGVN worklist
887 // for the transformations to happen.
888 bool has_special_unique_user() const;
889
890 // Skip Proj and CatchProj nodes chains. Check for Null and Top.
891 Node* find_exact_control(Node* ctrl);
892
893 // Check if 'this' node dominates or equal to 'sub'.
894 bool dominates(Node* sub, Node_List &nlist);
895
896 protected:
897 bool remove_dead_region(PhaseGVN *phase, bool can_reshape);
898 public:
899
900 // Idealize graph, using DU info. Done after constant propagation
901 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp );
902
903 // See if there is valid pipeline info
904 static const Pipeline *pipeline_class();
905 virtual const Pipeline *pipeline() const;
906
907 // Compute the latency from the def to this instruction of the ith input node
908 uint latency(uint i);
909
910 // Hash & compare functions, for pessimistic value numbering
911
912 // If the hash function returns the special sentinel value NO_HASH,
913 // the node is guaranteed never to compare equal to any other node.
914 // If we accidentally generate a hash with value NO_HASH the node
915 // won't go into the table and we'll lose a little optimization.
916 enum { NO_HASH = 0 };
917 virtual uint hash() const;
918 virtual uint cmp( const Node &n ) const;
919
920 // Operation appears to be iteratively computed (such as an induction variable)
921 // It is possible for this operation to return false for a loop-varying
922 // value, if it appears (by local graph inspection) to be computed by a simple conditional.
|
880 // The invariants on this call are subtle. If in doubt, read the
881 // treatise in node.cpp above the default implemention AND TEST WITH
882 // +VerifyIterativeGVN!
883 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
884
885 // Some nodes have specific Ideal subgraph transformations only if they are
886 // unique users of specific nodes. Such nodes should be put on IGVN worklist
887 // for the transformations to happen.
888 bool has_special_unique_user() const;
889
890 // Skip Proj and CatchProj nodes chains. Check for Null and Top.
891 Node* find_exact_control(Node* ctrl);
892
893 // Check if 'this' node dominates or equal to 'sub'.
894 bool dominates(Node* sub, Node_List &nlist);
895
896 protected:
897 bool remove_dead_region(PhaseGVN *phase, bool can_reshape);
898 public:
899
900 // See if there is valid pipeline info
901 static const Pipeline *pipeline_class();
902 virtual const Pipeline *pipeline() const;
903
904 // Compute the latency from the def to this instruction of the ith input node
905 uint latency(uint i);
906
907 // Hash & compare functions, for pessimistic value numbering
908
909 // If the hash function returns the special sentinel value NO_HASH,
910 // the node is guaranteed never to compare equal to any other node.
911 // If we accidentally generate a hash with value NO_HASH the node
912 // won't go into the table and we'll lose a little optimization.
913 enum { NO_HASH = 0 };
914 virtual uint hash() const;
915 virtual uint cmp( const Node &n ) const;
916
917 // Operation appears to be iteratively computed (such as an induction variable)
918 // It is possible for this operation to return false for a loop-varying
919 // value, if it appears (by local graph inspection) to be computed by a simple conditional.
|