173 _zcon_max = (uint)T_CONFLICT 174 }; 175 ConINode* _icons[_icon_max - _icon_min + 1]; // cached jint constant nodes 176 ConLNode* _lcons[_lcon_max - _lcon_min + 1]; // cached jlong constant nodes 177 ConNode* _zcons[_zcon_max + 1]; // cached is_zero_type nodes 178 void init_con_caches(); 179 180 // Support both int and long caches because either might be an intptr_t, 181 // so they show up frequently in address computations. 182 183 public: 184 PhaseTransform( PhaseNumber pnum ); 185 PhaseTransform( Arena *arena, PhaseNumber pnum ); 186 PhaseTransform( PhaseTransform *phase, PhaseNumber pnum ); 187 188 Arena* arena() { return _arena; } 189 Type_Array& types() { return _types; } 190 // _nodes is used in varying ways by subclasses, which define local accessors 191 192 public: 193 // Get a previously recorded type for the node n. 194 // This type must already have been recorded. 195 // If you want the type of a very new (untransformed) node, 196 // you must use type_or_null, and test the result for NULL. 197 const Type* type(const Node* n) const { 198 assert(n != NULL, "must not be null"); 199 const Type* t = _types.fast_lookup(n->_idx); 200 assert(t != NULL, "must set before get"); 201 return t; 202 } 203 // Get a previously recorded type for the node n, 204 // or else return NULL if there is none. 205 const Type* type_or_null(const Node* n) const { 206 return _types.fast_lookup(n->_idx); 207 } 208 // Record a type for a node. 209 void set_type(const Node* n, const Type *t) { 210 assert(t != NULL, "type must not be null"); 211 _types.map(n->_idx, t); 212 } | 173 _zcon_max = (uint)T_CONFLICT 174 }; 175 ConINode* _icons[_icon_max - _icon_min + 1]; // cached jint constant nodes 176 ConLNode* _lcons[_lcon_max - _lcon_min + 1]; // cached jlong constant nodes 177 ConNode* _zcons[_zcon_max + 1]; // cached is_zero_type nodes 178 void init_con_caches(); 179 180 // Support both int and long caches because either might be an intptr_t, 181 // so they show up frequently in address computations. 182 183 public: 184 PhaseTransform( PhaseNumber pnum ); 185 PhaseTransform( Arena *arena, PhaseNumber pnum ); 186 PhaseTransform( PhaseTransform *phase, PhaseNumber pnum ); 187 188 Arena* arena() { return _arena; } 189 Type_Array& types() { return _types; } 190 // _nodes is used in varying ways by subclasses, which define local accessors 191 192 public: 193 virtual PhaseIterGVN *is_IterGVN() { return 0; } 194 195 // Get a previously recorded type for the node n. 196 // This type must already have been recorded. 197 // If you want the type of a very new (untransformed) node, 198 // you must use type_or_null, and test the result for NULL. 199 const Type* type(const Node* n) const { 200 assert(n != NULL, "must not be null"); 201 const Type* t = _types.fast_lookup(n->_idx); 202 assert(t != NULL, "must set before get"); 203 return t; 204 } 205 // Get a previously recorded type for the node n, 206 // or else return NULL if there is none. 207 const Type* type_or_null(const Node* n) const { 208 return _types.fast_lookup(n->_idx); 209 } 210 // Record a type for a node. 211 void set_type(const Node* n, const Type *t) { 212 assert(t != NULL, "type must not be null"); 213 _types.map(n->_idx, t); 214 } |