JDK-7059047 : EA: can't find initializing store with several CheckCastPP
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs23
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2011-06-24
  • Updated: 2012-03-22
  • Resolved: 2012-01-23
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 7 JDK 8 Other
7u4Fixed 8Fixed hs23Fixed
The could be several CheckCastPP nodes (with different type) associated with allocation. The code in adjust_escape_state() does take it into account when looking for initializing store. As result an allocation could be marked as ArgEscape when it could be scalar replaced.

Also EA should split escape state ArgEscape into two: ArgEscape when object passed as argument into not inlined call and ControlEscape when an non escaping object can't be scalar replaced because of complex control flow (for example, merge of two allocations).

EVALUATION http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/59e515ee9354


EVALUATION http://hg.openjdk.java.net/hsx/hotspot-emb/hotspot/rev/59e515ee9354

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/59e515ee9354

EVALUATION Split adjust_escape_state() method into two. New find_init_values() method is used to find fields initializing values for not escaped allocations. It is called before deferred edges are removed since it affects results. adjust_escape_state() now is called after all deferred edges are removed to get correct results. Factored out escape state propagation code into new method propagate_escape_state(). Removed methods is_scalar_replaceable() and hidden_alias() which are not used and corresponding fields in PointsToNode (which will reduce used memory).

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/59e515ee9354