191 print_alias_types(); |
191 print_alias_types(); |
192 assert(consistent, "adr_check must match alias idx"); |
192 assert(consistent, "adr_check must match alias idx"); |
193 } |
193 } |
194 } |
194 } |
195 #endif |
195 #endif |
196 // TypeInstPtr::NOTNULL+any is an OOP with unknown offset - generally |
196 // TypeOopPtr::NOTNULL+any is an OOP with unknown offset - generally |
197 // means an array I have not precisely typed yet. Do not do any |
197 // means an array I have not precisely typed yet. Do not do any |
198 // alias stuff with it any time soon. |
198 // alias stuff with it any time soon. |
199 const TypeOopPtr *tinst = tp->isa_oopptr(); |
199 const TypeOopPtr *toop = tp->isa_oopptr(); |
200 if( tp->base() != Type::AnyPtr && |
200 if( tp->base() != Type::AnyPtr && |
201 !(tinst && |
201 !(toop && |
202 tinst->klass()->is_java_lang_Object() && |
202 toop->klass() != NULL && |
203 tinst->offset() == Type::OffsetBot) ) { |
203 toop->klass()->is_java_lang_Object() && |
|
204 toop->offset() == Type::OffsetBot) ) { |
204 // compress paths and change unreachable cycles to TOP |
205 // compress paths and change unreachable cycles to TOP |
205 // If not, we can update the input infinitely along a MergeMem cycle |
206 // If not, we can update the input infinitely along a MergeMem cycle |
206 // Equivalent code in PhiNode::Ideal |
207 // Equivalent code in PhiNode::Ideal |
207 Node* m = phase->transform(mmem); |
208 Node* m = phase->transform(mmem); |
208 // If transformed to a MergeMem, get the desired slice |
209 // If transformed to a MergeMem, get the desired slice |