JDK-6726999 : nsk/stress/jck12a/jck12a010 assert(n != __null,"Bad immediate dominator info.")
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs10
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: linux
  • CPU: x86
  • Submitted: 2008-07-17
  • Updated: 2011-03-08
  • Resolved: 2011-03-08
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 Availabitlity Release.

To download the current JDK release, click here.
JDK 6 JDK 7 Other
6u14Fixed 7Fixed hs14Fixed
Related Reports
Relates :  
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)

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.

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.

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/b0fe4deeb9fb