445
446 Node_Stack _stack; // Stack used to avoid recursion
447
448 protected:
449
450 // Warm up hash table, type table and initial worklist
451 void init_worklist( Node *a_root );
452
453 virtual const Type* saturate(const Type* new_type, const Type* old_type,
454 const Type* limit_type) const;
455 // Usually returns new_type. Returns old_type if new_type is only a slight
456 // improvement, such that it would take many (>>10) steps to reach 2**32.
457
458 public:
459 PhaseIterGVN( PhaseIterGVN *igvn ); // Used by CCP constructor
460 PhaseIterGVN( PhaseGVN *gvn ); // Used after Parser
461 PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ); // Used after +VerifyOpto
462
463 // Idealize new Node 'n' with respect to its inputs and its value
464 virtual Node *transform( Node *a_node );
465 virtual void record_for_igvn(Node *n) { }
466
467 virtual PhaseIterGVN *is_IterGVN() { return this; }
468
469 Unique_Node_List _worklist; // Iterative worklist
470
471 // Given def-use info and an initial worklist, apply Node::Ideal,
472 // Node::Value, Node::Identity, hash-based value numbering, Node::Ideal_DU
473 // and dominator info to a fixed point.
474 void optimize();
475
476 #ifndef PRODUCT
477 void trace_PhaseIterGVN(Node* n, Node* nn, const Type* old_type);
478 void init_verifyPhaseIterGVN();
479 void verify_PhaseIterGVN();
480 #endif
481
482 #ifdef ASSERT
483 void dump_infinite_loop_info(Node* n);
484 void trace_PhaseIterGVN_verbose(Node* n, int num_processed);
485 #endif
|
445
446 Node_Stack _stack; // Stack used to avoid recursion
447
448 protected:
449
450 // Warm up hash table, type table and initial worklist
451 void init_worklist( Node *a_root );
452
453 virtual const Type* saturate(const Type* new_type, const Type* old_type,
454 const Type* limit_type) const;
455 // Usually returns new_type. Returns old_type if new_type is only a slight
456 // improvement, such that it would take many (>>10) steps to reach 2**32.
457
458 public:
459 PhaseIterGVN( PhaseIterGVN *igvn ); // Used by CCP constructor
460 PhaseIterGVN( PhaseGVN *gvn ); // Used after Parser
461 PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ); // Used after +VerifyOpto
462
463 // Idealize new Node 'n' with respect to its inputs and its value
464 virtual Node *transform( Node *a_node );
465 virtual void record_for_igvn(Node *n) { _worklist.push(n); }
466
467 virtual PhaseIterGVN *is_IterGVN() { return this; }
468
469 Unique_Node_List _worklist; // Iterative worklist
470
471 // Given def-use info and an initial worklist, apply Node::Ideal,
472 // Node::Value, Node::Identity, hash-based value numbering, Node::Ideal_DU
473 // and dominator info to a fixed point.
474 void optimize();
475
476 #ifndef PRODUCT
477 void trace_PhaseIterGVN(Node* n, Node* nn, const Type* old_type);
478 void init_verifyPhaseIterGVN();
479 void verify_PhaseIterGVN();
480 #endif
481
482 #ifdef ASSERT
483 void dump_infinite_loop_info(Node* n);
484 void trace_PhaseIterGVN_verbose(Node* n, int num_processed);
485 #endif
|