Mercurial > hg > truffle
comparison src/share/vm/opto/escape.cpp @ 957:159d56b94894
6880574: C2 assert in escape.cpp:445 on linux-amd64
Summary: Look through chained AddP nodes in get_addp_base().
Reviewed-by: jrose
author | kvn |
---|---|
date | Thu, 10 Sep 2009 10:36:24 -0700 |
parents | 18f526145aea |
children | 7e309ecb83ce |
comparison
equal
deleted
inserted
replaced
956:9a4e87ba1a90 | 957:159d56b94894 |
---|---|
437 // AddP ( base == address ) | 437 // AddP ( base == address ) |
438 // | 438 // |
439 Node *base = addp->in(AddPNode::Base)->uncast(); | 439 Node *base = addp->in(AddPNode::Base)->uncast(); |
440 if (base->is_top()) { // The AddP case #3 and #6. | 440 if (base->is_top()) { // The AddP case #3 and #6. |
441 base = addp->in(AddPNode::Address)->uncast(); | 441 base = addp->in(AddPNode::Address)->uncast(); |
442 while (base->is_AddP()) { | |
443 // Case #6 (unsafe access) may have several chained AddP nodes. | |
444 assert(base->in(AddPNode::Base)->is_top(), "expected unsafe access address only"); | |
445 base = base->in(AddPNode::Address)->uncast(); | |
446 } | |
442 assert(base->Opcode() == Op_ConP || base->Opcode() == Op_ThreadLocal || | 447 assert(base->Opcode() == Op_ConP || base->Opcode() == Op_ThreadLocal || |
443 base->Opcode() == Op_CastX2P || base->is_DecodeN() || | 448 base->Opcode() == Op_CastX2P || base->is_DecodeN() || |
444 (base->is_Mem() && base->bottom_type() == TypeRawPtr::NOTNULL) || | 449 (base->is_Mem() && base->bottom_type() == TypeRawPtr::NOTNULL) || |
445 (base->is_Proj() && base->in(0)->is_Allocate()), "sanity"); | 450 (base->is_Proj() && base->in(0)->is_Allocate()), "sanity"); |
446 } | 451 } |