< prev index next >

src/hotspot/share/opto/addnode.cpp

Print this page

        

*** 653,662 **** --- 653,668 ---- const TypeX *tx = t->is_intptr_t(); intptr_t txoffset = Type::OffsetBot; if (tx->is_con()) { // Left input is an add of a constant? txoffset = tx->get_con(); } + if (tp->isa_aryptr()) { + // In the case of a flattened value type array, each field has its + // own slice so we need to extract the field being accessed from + // the address computation + return tp->is_aryptr()->add_field_offset_and_offset(txoffset); + } return tp->add_offset(txoffset); } //------------------------------Value------------------------------------------ const Type* AddPNode::Value(PhaseGVN* phase) const {
*** 673,682 **** --- 679,694 ---- // Add 'em intptr_t p2offset = Type::OffsetBot; if (p2->is_con()) { // Left input is an add of a constant? p2offset = p2->get_con(); } + if (p1->isa_aryptr()) { + // In the case of a flattened value type array, each field has its + // own slice so we need to extract the field being accessed from + // the address computation + return p1->is_aryptr()->add_field_offset_and_offset(p2offset); + } return p1->add_offset(p2offset); } //------------------------Ideal_base_and_offset-------------------------------- // Split an oop pointer into a base and offset.
< prev index next >