55 debug_only(_adr_type=at; adr_type();)
56 }
57 MemNode( Node *c0, Node *c1, Node *c2, const TypePtr* at, Node *c3, Node *c4)
58 : Node(c0,c1,c2,c3,c4) {
59 init_class_id(Class_Mem);
60 debug_only(_adr_type=at; adr_type();)
61 }
62
63 public:
64 // Helpers for the optimizer. Documented in memnode.cpp.
65 static bool detect_ptr_independence(Node* p1, AllocateNode* a1,
66 Node* p2, AllocateNode* a2,
67 PhaseTransform* phase);
68 static bool adr_phi_is_loop_invariant(Node* adr_phi, Node* cast);
69
70 static Node *optimize_simple_memory_chain(Node *mchain, const TypePtr *t_adr, PhaseGVN *phase);
71 static Node *optimize_memory_chain(Node *mchain, const TypePtr *t_adr, PhaseGVN *phase);
72 // This one should probably be a phase-specific function:
73 static bool all_controls_dominate(Node* dom, Node* sub);
74
75 // Is this Node a MemNode or some descendent? Default is YES.
76 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp );
77
78 virtual const class TypePtr *adr_type() const; // returns bottom_type of address
79
80 // Shared code for Ideal methods:
81 Node *Ideal_common(PhaseGVN *phase, bool can_reshape); // Return -1 for short-circuit NULL.
82
83 // Helper function for adr_type() implementations.
84 static const TypePtr* calculate_adr_type(const Type* t, const TypePtr* cross_check = NULL);
85
86 // Raw access function, to allow copying of adr_type efficiently in
87 // product builds and retain the debug info for debug builds.
88 const TypePtr *raw_adr_type() const {
89 #ifdef ASSERT
90 return _adr_type;
91 #else
92 return 0;
93 #endif
94 }
95
|
55 debug_only(_adr_type=at; adr_type();)
56 }
57 MemNode( Node *c0, Node *c1, Node *c2, const TypePtr* at, Node *c3, Node *c4)
58 : Node(c0,c1,c2,c3,c4) {
59 init_class_id(Class_Mem);
60 debug_only(_adr_type=at; adr_type();)
61 }
62
63 public:
64 // Helpers for the optimizer. Documented in memnode.cpp.
65 static bool detect_ptr_independence(Node* p1, AllocateNode* a1,
66 Node* p2, AllocateNode* a2,
67 PhaseTransform* phase);
68 static bool adr_phi_is_loop_invariant(Node* adr_phi, Node* cast);
69
70 static Node *optimize_simple_memory_chain(Node *mchain, const TypePtr *t_adr, PhaseGVN *phase);
71 static Node *optimize_memory_chain(Node *mchain, const TypePtr *t_adr, PhaseGVN *phase);
72 // This one should probably be a phase-specific function:
73 static bool all_controls_dominate(Node* dom, Node* sub);
74
75 // Find any cast-away of null-ness and keep its control.
76 static Node *Ideal_common_DU_postCCP( PhaseCCP *ccp, Node* n, Node* adr );
77 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp );
78
79 virtual const class TypePtr *adr_type() const; // returns bottom_type of address
80
81 // Shared code for Ideal methods:
82 Node *Ideal_common(PhaseGVN *phase, bool can_reshape); // Return -1 for short-circuit NULL.
83
84 // Helper function for adr_type() implementations.
85 static const TypePtr* calculate_adr_type(const Type* t, const TypePtr* cross_check = NULL);
86
87 // Raw access function, to allow copying of adr_type efficiently in
88 // product builds and retain the debug info for debug builds.
89 const TypePtr *raw_adr_type() const {
90 #ifdef ASSERT
91 return _adr_type;
92 #else
93 return 0;
94 #endif
95 }
96
|