[14] RFR(S): 8229994: assert(false) failed: Bad graph detected in get_early_ctrl_for_expensive

Christian Hagedorn christian.hagedorn at oracle.com
Thu Dec 5 13:22:16 UTC 2019


Hi

Please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8229994
http://cr.openjdk.java.net/~chagedorn/8229994/webrev.00/

As a part of loop peeling, loop-invariant dominating tests are moved out 
of the loop [1]. Doing so requires to change all control inputs coming 
from an independent test 'test' to data nodes inside the loop body to 
use the peeled version 'peeled_test' of 'test' instead [2]: the control 
test->data will be changed to peeled_test->data. If a data node is 
expensive then an assertion [3] checks the dominance relation of 'test' 
and 'peeled_test' ('peeled_test' should dominate 'test') but fails to 
find 'peeled_test' as part of the idom chain starting from the previous 
control input 'test' of that expensive node.

The reason is that the idom information was not correctly set before at 
[4] after creating the peeled nodes. If 'head' (a CountedLoop node) has 
another OuterStripMinedLoop node, let's say 'outer_head', as an input 
then 'outer_head' is set as idom of 'head' instead of setting the idom 
of 'outer_head' to the new loop entry from the peeled iteration. We then 
miss all the idom information of the peeled iteration and the idom of 
'outer_head' still points to the old loop entry node before peeling.

The fix is straight forward to also account for loop strip mined loops 
when correcting the idom to the new loop entry from the peeled iteration 
at [4].

Thank you!

Best regards,
Christian


[1] 
http://hg.openjdk.java.net/jdk/jdk/file/99b71c5b02ff/src/hotspot/share/opto/loopTransform.cpp#l669
[2] 
http://hg.openjdk.java.net/jdk/jdk/file/99b71c5b02ff/src/hotspot/share/opto/loopopts.cpp#l271
[3] 
http://hg.openjdk.java.net/jdk/jdk/file/99b71c5b02ff/src/hotspot/share/opto/loopnode.cpp#l153
[4] 
http://hg.openjdk.java.net/jdk/jdk/file/99b71c5b02ff/src/hotspot/share/opto/loopTransform.cpp#l658


More information about the hotspot-compiler-dev mailing list