Request for reviews (M): 6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
Vladimir.Kozlov at Sun.COM
Fri Jul 25 10:56:03 PDT 2008
Fixed 6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
The flow-insensitive escape analysis can't separate cases
when an allocation happened on the main path or in a loop
or on a different control branch. A dominator info processing
may not find it when such allocation is referenced further
in a graph:
Point p = new Point;
if ( x ) p = new Point();
if (p != NULL) p.x = x;
The main cause of it is that a default initialization by NULL
captured by Initialize node is not recorded in EA Connection Graph.
As result EA thinks that there is only one value - new object and
mark it as scalar replaceable. For scalar replaceable objects
we do aggressive memory nodes moves (for example, skip calls).
And this is where the dominator info processing hits the problem
when it tries to find the place where to put a memory node.
- Add a field's initialization by NULL to Connection Graph if it is
not recorded already.
- Disable scalar replacement if the object reference is stored into
unknown element of an array of objects (in a loop, for example).
- Disable scalar replacement if a object's field is referenced
by LoadStore node (CompareAndSwapL, for example) since
the field value is unknown after it.
Also add missing checks for LoadStore node where there are checks
for memory nodes since LoadStore is not memory node.
- Prevent incorrect removal of MemBarAcquire node's input
- Add missing check for CompareAndSwapN in split_if_with_blocks_pre().
- Add the check for phis with one unique input in SuperWord::construct_bb()
to avoid the assert in SuperWord::mem_slice_preds().
- Change legal header in test files added recently.
- Set AddP node's Base and Address to the corresponding scalar replaceable
- Increase the recursion limit to 1000 in PhaseMacroExpand::value_from_mem_phi()
when searching for fields values during scalar replacement processing.
Added new regression test with several cases for EA.
Fix verified (y/n): y, failed test cases.
JPRT, CTW, NSK testing, JDI and HS REGRESSION tests.
All with 32 and 64-bits VM and Compressed Oops.
More information about the hotspot-compiler-dev