Request for reviews (L): 6695810 and 6703890

Vladimir Kozlov Vladimir.Kozlov at Sun.COM
Mon May 19 21:31:21 PDT 2008

As Chuck suggested, I divided the original 6695810 changes into 3 parts.

6703888 was reviewed by Tom and Coleen and is ready to go
but I want to push it after 6695810 and 6703890.

6695810 and 6703890 were reviewed only by Tom and I need
a second review for both.



After CastPP is removed by PhaseCCP EncodeP was moved above the null check
(EncodeP and DecodeN don't have control edge). As result the NotNULL type
is not valid any more.

Set control edge for EncodeP and DecodeN nodes using MemNode::Ideal_DU_PostCCP().

Also fix next problems:
  - replace Type::is_narrow() with more precise Type::is_ptr_to_narrowoop()
    defined during TypeOopPtr construction,
  - use subclass check instead of alias types check in CallNode::may_modify(),
  - call PhiNode::split_out_instance() also for Phi nodes with
    non-instance OopPtr type which matches the instance type,
  - stop compilation instead of VM exit when there is no space
    for scratch buffer in CodeCache,
  - don't flatten instance type in alias types,
  - skip the split through phi in LoadNode::Ideal() if the Region node
    dominates load's address,
  - an allocation is not scalar replaceable if the resuilt is stored
    into unknown array's element,
  - try 2 Region's input paths in Node::dominates(),
  - add missing checks for ConN node.

Added the test case. Also added the test case for 6689060.

Reviewed by: never
Fix verified (y/n): y, failed test

Other testing:
JPRT, CTW, nsk tests


Fixed 6703890: Compressed Oops: add LoadNKlass node to generate narrow oops (32-bits) compare instructions

Currently C2 generates DecodeN and CmpP (64-bits) instructions for
klass and oop NULL checks with Compressed Oops.

Add LoadNKlass and CMoveN nodes, use CmpN and ConN nodes and
add correspondent platform specific assembler instructions
to generate narrow oops (32-bits) compare instructions
to avoid decoding.

Reviewed by: never
Fix verified (y/n): y, check generated code

Other testing:
JPRT, CTW, nsk tests


Fixed 6703888: Compressed Oops: use the 32-bits gap after klass in a object

With Compressed Oops there is 32-bits gap after narrow 'klass' field
in a object. Currently it is filled only with primitive type fields.

Use the gap also for a narrow oop field and a boxing object value
(except Long and Double). Use heapOopSize for
instanceKlass::_nonstatic_field_size value instead of wordSize
to define the size more precisely.

Reviewed by: coleen, never
Fix verified (y/n): y, check generated offsets

Other testing:
JPRT, CTW, nsk tests

More information about the hotspot-compiler-dev mailing list