JDK-8212673 : jtreg/applications/runthese/RunThese30M.java fails in C2 with "assert(!had_error) failed: bad dominance"
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 11,12
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2018-10-19
  • Updated: 2019-09-09
  • Resolved: 2018-11-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 Availability Release.

To download the current JDK release, click here.
JDK 11 JDK 12
11.0.6-oracleFixed 12 b20Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Description
#  Internal Error (/scratch/opt/mach5/mesos/work_dir/slaves/14a03e04-9f3c-408e-8ddf-efd6aa9b759f-S120773/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/31870ebb-882a-498f-a5af-2d68060462a0/runs/65cb4dcb-5761-4359-b170-f7591a4bf605/workspace/open/src/hotspot/share/opto/loopnode.cpp:3834), pid=1719, tid=1756
#  assert(!had_error) failed: bad dominance

Current CompileTask:
C2: 609879 70015       4       java.util.ArraysParallelSortHelpers$FJObject$Merger::compute (453 bytes)

Stack: [0x00007fe0d98c5000,0x00007fe0d99c6000],  sp=0x00007fe0d99c0210,  free space=1004k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x18669a3]  VMError::report_and_die(int, char const*, char const*, __va_list_tag*, Thread*, unsigned char*, void*, void*, char const*, int, unsigned long)+0x2c3
V  [libjvm.so+0x186776f]  VMError::report_and_die(Thread*, void*, char const*, int, char const*, char const*, __va_list_tag*)+0x2f
V  [libjvm.so+0xb12fc0]  report_vm_error(char const*, int, char const*, char const*, ...)+0x100
V  [libjvm.so+0x1259bbb]  PhaseIdealLoop::compute_lca_of_uses(Node*, Node*, bool)+0x32b
V  [libjvm.so+0x125a2e0]  PhaseIdealLoop::build_loop_late_post(Node*)+0x160
V  [libjvm.so+0x125aa02]  PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)+0xa2
V  [libjvm.so+0x125f5b7]  PhaseIdealLoop::build_and_optimize(LoopOptsMode)+0x827
V  [libjvm.so+0xa36b2e]  Compile::Optimize()+0x4de
V  [libjvm.so+0xa382bc]  Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool, DirectiveSet*)+0xd6c
V  [libjvm.so+0x830b51]  C2Compiler::compile_method(ciEnv*, ciMethod*, int, DirectiveSet*)+0xd1
V  [libjvm.so+0xa45649]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x409
V  [libjvm.so+0xa46758]  CompileBroker::compiler_thread_loop()+0x458
V  [libjvm.so+0x179d847]  JavaThread::thread_main_inner()+0x2c7
V  [libjvm.so+0x179db7a]  JavaThread::run()+0x22a
V  [libjvm.so+0x1490e10]  thread_native_entry(Thread*)+0x100

Output:

Bad graph detected in compute_lca_of_uses
n:  1545	CheckCastPP	===  1387  1544  [[ 503 ]]  #java/util/Arrays$NaturalOrder:NotNull:exact * carry dependency  Oop:java/util/Arrays$NaturalOrder:NotNull:exact * !orig=[1421]
early(n):  1387	Region	===  1387  1386  1695  [[ 1387  1218  1407  1545  1429  1442  1461  1494  1544 ]] 
n->in(1):  1544	CastPP	===  1387  27  [[ 1545 ]]  #java/util/Comparator:NotNull * carry dependency  Interface:java/util/Comparator:NotNull *
early(n->in(1)):  1387	Region	===  1387  1386  1695  [[ 1387  1218  1407  1545  1429  1442  1461  1494  1544 ]] 
n->in(1)->in(1):  27	Proj	===  25  [[ 171  66  79  93  105  117  171  122  128  1538  1540  1542  1544 ]] #2  Interface:java/util/Comparator * !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:1
early(n->in(1)->in(1)):  25	LoadBarrier	===  5  7  24  23  1  [[ 26  27 ]]  !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:1

LCA(n):  1218	Region	===  1218  1675  1387  [[ 1218  503  1405  1492  1427  1440  1459 ]]  !orig=[502] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:399
n->out(0):  503	CallStaticJava	===  1218  6  1492  8  9 ( 283  10  1545  72  85  1440  1  1427  1  1233  1  212  213  1  1  1  85  1459  1405 ) [[ 504 ]] # Static uncommon_trap(reason='range_check' action='make_not_entrant' debug_id='0')  void ( int ) C=0,000100 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:399 reexecute !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:399
n->out(0)->out(0):  504	Proj	===  503  [[ 507 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:399

idom[0]  1218	Region	===  1218  1675  1387  [[ 1218  503  1405  1492  1427  1440  1459 ]]  !orig=[502] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:399
idom[1]  1356	RangeCheck	===  1328  1355  [[ 1357  1386 ]] P=0,999999, C=-1,000000 !orig=[1224]
idom[2]  1328	Region	===  1328  1327  1349  [[ 1304  1328  1329  1330  1332  1356 ]]  !orig=488,[1221],[499] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:391
idom[3]  1326	If	===  1325  1255  [[ 1327  1349 ]] P=0,105284, C=33348,000000 !orig=457 !jvms: Integer::compare @ bci:2 Integer::compareTo @ bci:8 Integer::compareTo @ bci:5 Arrays$NaturalOrder::compare @ bci:5 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[4]  1325	IfFalse	===  1324  [[ 1310  1326 ]] #0 !orig=1024,[419] !jvms: Integer::compareTo @ bci:2 Arrays$NaturalOrder::compare @ bci:5 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[5]  1324	If	===  1323  1278  [[ 1325  1378 ]] P=0,100000, C=-1,000000 !orig=1023,[418] !jvms: Integer::compareTo @ bci:2 Arrays$NaturalOrder::compare @ bci:5 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[6]  1323	IfTrue	===  1322  [[ 1311  1324 ]] #1 !orig=405 !jvms: Integer::compareTo @ bci:2 Arrays$NaturalOrder::compare @ bci:5 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[7]  1322	If	===  1321  1242  [[ 1323  1376 ]] P=0,999999, C=-1,000000 !orig=403 !jvms: Integer::compareTo @ bci:2 Arrays$NaturalOrder::compare @ bci:5 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[8]  1321	IfFalse	===  1320  [[ 1300  1322 ]] #0 !orig=1016,[378] !jvms: Arrays$NaturalOrder::compare @ bci:1 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[9]  1320	If	===  1319  1274  [[ 1321  1374 ]] P=0,000000, C=-1,000000 !orig=1015,[377] !jvms: Arrays$NaturalOrder::compare @ bci:1 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[10]  1319	IfTrue	===  1318  [[ 1301  1320 ]] #1 !orig=362 !jvms: Arrays$NaturalOrder::compare @ bci:1 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[11]  1318	If	===  1317  1240  [[ 1319  1372 ]] P=0,999999, C=-1,000000 !orig=360 !jvms: Arrays$NaturalOrder::compare @ bci:1 ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[12]  1317	IfFalse	===  1315  [[ 1318 ]] #0 !orig=[1012],[332] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[13]  1315	If	===  1314  1010  [[ 1317  1370 ]] P=0,000001, C=-1,000000 !orig=[1011],[331] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:366
idom[14]  1314	Proj	===  1313  [[ 1315 ]] #0 !orig=323,[1012],[332] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:362
idom[15]  1313	LoadBarrier	===  1309  7  1263  1264  1  [[ 1312  1314 ]]  !orig=322 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:362
idom[16]  1309	IfTrue	===  1306  [[ 1263  1308  1313 ]] #1 !orig=306 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:362
idom[17]  1306	RangeCheck	===  1305  1251  [[ 1309  1368 ]] P=0,999999, C=-1,000000 !orig=305 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:362
idom[18]  1305	Proj	===  1303  [[ 1306 ]] #0 !orig=299 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:355
idom[19]  1303	LoadBarrier	===  1299  7  1261  1262  1  [[ 1302  1305 ]]  !orig=298 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:355
idom[20]  1299	IfTrue	===  1296  [[ 1261  1298  1303 ]] #1 !orig=279 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:355
idom[21]  1296	RangeCheck	===  1295  1249  [[ 1299  1366 ]] P=0,999999, C=-1,000000 !orig=278 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:355
idom[22]  1295	IfTrue	===  1294  [[ 1296 ]] #1 !orig=264 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:348
idom[23]  1294	If	===  218  1084  [[ 1295  1364 ]] P=0,999921, C=4924541,000000 !orig=263 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:348
idom[24]  218	IfTrue	===  217  [[ 1294 ]] #1 !orig=[234] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:341
idom[25]  217	If	===  202  216  [[ 218  219 ]] P=0,999842, C=4947123,000000 !orig=[580] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:341
idom[26]  202	IfTrue	===  201  [[ 217 ]] #1 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:97
idom[27]  201	If	===  191  200  [[ 202  203 ]] P=1,000000, C=1162,000000 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:97
idom[28]  191	IfFalse	===  189  [[ 201 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:90
idom[29]  189	If	===  127  188  [[ 190  191 ]] P=0,000000, C=1166,000000 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:90
idom[30]  127	IfTrue	===  124  [[ 189  128 ]] #1 !orig=[142],[155],[168] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:75
idom[31]  124	If	===  114  123  [[ 127  170 ]] P=1,000000, C=1164,000000 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:75
idom[32]  114	IfFalse	===  112  [[ 124 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:71
idom[33]  112	If	===  102  111  [[ 113  114 ]] P=0,000000, C=1167,000000 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:71
idom[34]  102	IfFalse	===  100  [[ 112 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:66
idom[35]  100	If	===  90  99  [[ 101  102 ]] P=0,000000, C=1166,000000 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:66
idom[36]  90	IfFalse	===  88  [[ 100 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:61
idom[37]  88	If	===  1009  87  [[ 89  90 ]] P=0,000000, C=1162,000000 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:61
idom[38]  1009	IfTrue	===  1007  [[ 85  88 ]] #1 !orig=[84] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:56
idom[39]  1007	If	===  1005  1006  [[ 1008  1009 ]] P=1,000000, C=1165,000000 !orig=[75] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:56
idom[40]  1005	IfTrue	===  1003  [[ 72  1007 ]] #1 !orig=[71] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:52
idom[41]  1003	If	===  38  1002  [[ 1004  1005 ]] P=1,000000, C=1165,000000 !orig=[61] !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:52
idom[42]  38	Proj	===  37  [[ 1003 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:11
idom[43]  37	LoadBarrier	===  32  7  36  35  1  [[ 38  39 ]]  !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:11
idom[44]  32	Proj	===  31  [[ 37 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:6
idom[45]  31	LoadBarrier	===  26  7  30  29  1  [[ 32  33 ]]  !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:6
idom[46]  26	Proj	===  25  [[ 31 ]] #0 !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:1
idom[47]  25	LoadBarrier	===  5  7  24  23  1  [[ 26  27 ]]  !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:1
idom[48]  5	Parm	===  3  [[ 25 ]] Control !jvms: ArraysParallelSortHelpers$FJObject$Merger::compute @ bci:-1

Comments
Fix Request (11u) This fixes compiler problem with Shenandoah and ZGC, and keeps codebases in sync (I see 11.0.6-oracle). The patch includes the reversal of JDK-8212603, and thus does not apply cleanly. Passes tier1 and tier2. 11u RFR: https://mail.openjdk.java.net/pipermail/jdk-updates-dev/2019-September/001817.html
03-09-2019

In PhiNode::Ideal(): Node* uin = unique_input(phase, false); if (uin == NULL && can_reshape) { uncasted = true; uin = unique_input(phase, true); } can find a unique input by looking trough cast. But code below: if ((is_loop && !uin->eqv_uncast(in(LoopNode::EntryControl))) || (!is_loop && is_unsafe_data_reference(uin))) { eqv_uncast can fail because it looks through casts and load barriers if the unique input is a load barrier. This then causes a valid input to a Phi to be set to top.
19-10-2018

I was able to narrow this down to build jdk12-jdk.677 which only included the fix for JDK-8212603. Roman, could you please have a look? It should be easy to reproduce with the attached replay compilation file and the command line I've posted above.
19-10-2018

I can reproduce this with: java -XX:+ReplayIgnoreInitErrors -XX:+ReplayCompiles -XX:ReplayDataFile=replay_pid1719.log -XX:+PrintCompilation -XX:MaxRAMPercentage=6 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:+IgnoreUnrecognizedVMOptions It does *not* reproduce without ZGC. ILW = Crash during C2 compilation, reproducible with replay compilation and ZGC (experimental), use a different GC = HLM = P3
19-10-2018

This is a crash in C2: # Internal Error (/scratch/opt/mach5/mesos/work_dir/slaves/14a03e04-9f3c-408e-8ddf-efd6aa9b759f-S120773/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/31870ebb-882a-498f-a5af-2d68060462a0/runs/65cb4dcb-5761-4359-b170-f7591a4bf605/workspace/open/src/hotspot/share/opto/loopnode.cpp:3834), pid=1719, tid=1756 # assert(!had_error) failed: bad dominance
19-10-2018