| 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).