< prev index next >

src/hotspot/share/opto/phaseX.hpp

Print this page

640 //------------------------------PhaseCCP---------------------------------------
641 // Phase for performing global Conditional Constant Propagation.
642 // Should be replaced with combined CCP & GVN someday.
643 class PhaseCCP : public PhaseIterGVN {
644   Unique_Node_List _root_and_safepoints;
645   Unique_Node_List _maybe_top_type_nodes;
646   // Non-recursive.  Use analysis to transform single Node.
647   virtual Node* transform_once(Node* n);
648 
649   Node* fetch_next_node(Unique_Node_List& worklist);
650   static void dump_type_and_node(const Node* n, const Type* t) PRODUCT_RETURN;
651 
652   void push_child_nodes_to_worklist(Unique_Node_List& worklist, Node* n) const;
653   void push_if_not_bottom_type(Unique_Node_List& worklist, Node* n) const;
654   void push_more_uses(Unique_Node_List& worklist, Node* parent, const Node* use) const;
655   void push_phis(Unique_Node_List& worklist, const Node* use) const;
656   static void push_catch(Unique_Node_List& worklist, const Node* use);
657   void push_cmpu(Unique_Node_List& worklist, const Node* use) const;
658   static void push_counted_loop_phi(Unique_Node_List& worklist, Node* parent, const Node* use);
659   void push_loadp(Unique_Node_List& worklist, const Node* use) const;
660   static void push_load_barrier(Unique_Node_List& worklist, const BarrierSetC2* barrier_set, const Node* use);
661   void push_and(Unique_Node_List& worklist, const Node* parent, const Node* use) const;
662   void push_cast_ii(Unique_Node_List& worklist, const Node* parent, const Node* use) const;
663   void push_opaque_zero_trip_guard(Unique_Node_List& worklist, const Node* use) const;
664   void push_bool_with_cmpu_and_mask(Unique_Node_List& worklist, const Node* use) const;
665   void push_bool_matching_case1b(Unique_Node_List& worklist, const Node* cmpu) const;
666 
667  public:
668   PhaseCCP( PhaseIterGVN *igvn ); // Compute conditional constants
669   NOT_PRODUCT( ~PhaseCCP(); )
670 
671   // Worklist algorithm identifies constants
672   void analyze();
673   void analyze_step(Unique_Node_List& worklist, Node* n);
674   bool needs_revisit(Node* n) const;
675 #ifdef ASSERT
676   void verify_type(Node* n, const Type* tnew, const Type* told);
677   // For every node n on verify list, check if type(n) == n->Value()
678   void verify_analyze(Unique_Node_List& worklist_verify);
679 #endif
680   // Recursive traversal of program.  Used analysis to modify program.

640 //------------------------------PhaseCCP---------------------------------------
641 // Phase for performing global Conditional Constant Propagation.
642 // Should be replaced with combined CCP & GVN someday.
643 class PhaseCCP : public PhaseIterGVN {
644   Unique_Node_List _root_and_safepoints;
645   Unique_Node_List _maybe_top_type_nodes;
646   // Non-recursive.  Use analysis to transform single Node.
647   virtual Node* transform_once(Node* n);
648 
649   Node* fetch_next_node(Unique_Node_List& worklist);
650   static void dump_type_and_node(const Node* n, const Type* t) PRODUCT_RETURN;
651 
652   void push_child_nodes_to_worklist(Unique_Node_List& worklist, Node* n) const;
653   void push_if_not_bottom_type(Unique_Node_List& worklist, Node* n) const;
654   void push_more_uses(Unique_Node_List& worklist, Node* parent, const Node* use) const;
655   void push_phis(Unique_Node_List& worklist, const Node* use) const;
656   static void push_catch(Unique_Node_List& worklist, const Node* use);
657   void push_cmpu(Unique_Node_List& worklist, const Node* use) const;
658   static void push_counted_loop_phi(Unique_Node_List& worklist, Node* parent, const Node* use);
659   void push_loadp(Unique_Node_List& worklist, const Node* use) const;

660   void push_and(Unique_Node_List& worklist, const Node* parent, const Node* use) const;
661   void push_cast_ii(Unique_Node_List& worklist, const Node* parent, const Node* use) const;
662   void push_opaque_zero_trip_guard(Unique_Node_List& worklist, const Node* use) const;
663   void push_bool_with_cmpu_and_mask(Unique_Node_List& worklist, const Node* use) const;
664   void push_bool_matching_case1b(Unique_Node_List& worklist, const Node* cmpu) const;
665 
666  public:
667   PhaseCCP( PhaseIterGVN *igvn ); // Compute conditional constants
668   NOT_PRODUCT( ~PhaseCCP(); )
669 
670   // Worklist algorithm identifies constants
671   void analyze();
672   void analyze_step(Unique_Node_List& worklist, Node* n);
673   bool needs_revisit(Node* n) const;
674 #ifdef ASSERT
675   void verify_type(Node* n, const Type* tnew, const Type* told);
676   // For every node n on verify list, check if type(n) == n->Value()
677   void verify_analyze(Unique_Node_List& worklist_verify);
678 #endif
679   // Recursive traversal of program.  Used analysis to modify program.
< prev index next >