Code Review for 6732698

Prepared by: Thomas Rodriguez (never) on Mon Aug 25 13:22:26 PDT 2008
Workspace:/export/ws/baseline
Compare against: ssh://hg.openjdk.java.net/jdk7/hotspot-comp-gate/hotspot
Summary of changes: 8 lines changed: 8 ins; 0 del; 0 mod; 2216 unchg
Patch of changes: 6732698.patch
Author comments:
6732698: crash with dead code from compressed oops in gcm
Reviewed-by: rasbold

Crashes were occurring because the matching of an increment memory
expression resulted in dead code. The memory appears twice in this
match so we get two copies of the node. During Expand we remove the
extra unneeded copies. Normally the nodes that make up the two copies
of the memory inputs should all be the same so removing the extra
inputs doesn't really change anything. In this case the loadN that
formed the base was two separate instances so deleting the extra
reference lead to dead code which gcm was unprepared for.

The base node of address expressions needs to be considered shared by
the matcher, otherwise every use could issue a seperate load.
Normally this is taken care of by the fact that AddP nodes always
reference the base multiple times. In the case of narrow oops there's
a DecodeN between the AddP and the base so the base may appear to have
a single user. The fix is simply to mark the compressed base as
shared when it's encountered. An assert was added that would have
caught during ctw runs.

tested with 32 and 64 bit intel, ctw, nsk, runthese jck

Bug id: 6732698: crash with dead code from compressed oops in gcm
Legend: Modified file
Deleted file
New file

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/opto/matcher.cpp

8 lines changed: 8 ins; 0 del; 0 mod; 2216 unchg

This code review page was prepared using /net/smite.sfbay/never/bin/hgwebrev (vers 23.12-hg-never).