United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-6726999 : nsk/stress/jck12a/jck12a010 assert(n != __null,"Bad immediate dominator info.")

Details
Type:
Bug
Submit Date:
2008-07-17
Status:
Closed
Updated Date:
2011-03-08
Project Name:
JDK
Resolved Date:
2011-03-08
Component:
hotspot
OS:
linux
Sub-Component:
compiler
CPU:
x86
Priority:
P4
Resolution:
Fixed
Affected Versions:
hs10
Fixed Versions:
hs14 (b03)

Related Reports
Backport:
Backport:
Relates:

Sub Tasks

Description
After 6723160 changes nsk/stress/jck12a/jck12a010 failed on all platforms:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/tmp/jprt-jprtadm/P1/B/230701.kvn/source/src/share/vm/opto/loopnode.hpp:634), pid=20237, tid=1086507360
#  Error: assert(n != __null,"Bad immediate dominator info.")
#
# Java VM: OpenJDK 64-Bit Server VM (14.0-b01-2008-07-16-230701.kvn.6723160-fastdebug compiled mode linux-amd64 )
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0000002abee93800):  JavaThread "CompilerThread1" daemon [_thread_in_native, id=20251, stack(0x0000000040b2c000,0x0000000040c2d000)]

Stack: [0x0000000040b2c000,0x0000000040c2d000],  sp=0x0000000040c25b50,  free space=998k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0xa4e622];;  _ZN7VMError14report_and_dieEv+0x262
V  [libjvm.so+0x4071fe];;  _Z24report_assertion_failurePKciS0_+0x6e
V  [libjvm.so+0x77f109];;  _ZNK14PhaseIdealLoop14idom_no_updateEP4Node+0xd9
V  [libjvm.so+0x792fb0];;  _ZN14PhaseIdealLoop20build_loop_late_postEP4NodePKS_+0x230
V  [libjvm.so+0x7929ca];;  _ZN14PhaseIdealLoop15build_loop_lateER9VectorSetR9Node_ListR10Node_StackPKS_+0xda
V  [libjvm.so+0x78c7c3];;  _ZN14PhaseIdealLoopC1ER12PhaseIterGVNPKS_b+0x8c3
V  [libjvm.so+0x3a111a];;  _ZN7Compile8OptimizeEv+0x1ea
V  [libjvm.so+0x39c2ad];;  _ZN7CompileC1EP5ciEnvP10C2CompilerP8ciMethodibb+0x8fd
V  [libjvm.so+0x2cda6c];;  _ZN10C2Compiler14compile_methodEP5ciEnvP8ciMethodi+0x8c
V  [libjvm.so+0x3accc9];;  _ZN13CompileBroker25invoke_compiler_on_methodEP11CompileTask+0x4c9
V  [libjvm.so+0x3ac0df];;  _ZN13CompileBroker20compiler_thread_loopEv+0x55f
V  [libjvm.so+0x9eb4b3];;  _Z21compiler_thread_entryP10JavaThreadP6Thread+0x13
V  [libjvm.so+0x9e0915];;  _ZN10JavaThread17thread_main_innerEv+0xd5
V  [libjvm.so+0x9e07dd];;  _ZN10JavaThread3runEv+0xfd
V  [libjvm.so+0x85faa6];;  _Z10java_startP6Thread+0x166


Current CompileTask:
C2: 27% !b  javasoft.sqe.tests.api.java.io.LineNumberInputStream.MarkResetTests.LineNumberInputStream2009()Ljavasoft/sqe/harness/Status; @ 47 (604 bytes)

                                    

Comments
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/b0fe4deeb9fb
                                     
2008-07-29
SUGGESTED FIX

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

Other fixes:
- 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
in Block::schedule_local().
- 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().
- Fix -XX:-PrintVMOptions flag processing.
- Change legal header in test files added recently.

New optimizations:
- Set AddP node's Base and Address to the corresponding scalar replaceable
allocation projection.
- 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.
                                     
2008-07-29
EVALUATION

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[1];
if ( x ) p[0] = new Point();
if (p[0] != NULL) p[0].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.
                                     
2008-07-29



Hardware and Software, Engineered to Work Together