[16] RFR(XS): 8249602: C2: assert(cnt == _outcnt) failed: no insertions allowed

Christian Hagedorn christian.hagedorn at oracle.com
Fri Jul 24 12:57:57 UTC 2020


Hi

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

The testcase hits the assert when inserting a post loop. When correcting 
the fall-in values to the post-loop phis to take the values from the 
main-loop, we have to separately handle nodes that belong to the 
backedge control block and cannot float. In this process, we clone data 
nodes in PhaseIdealLoop::clone_up_backedge_goo and then hit the assert 
because some nodes to be cloned have a control input from the main-loop 
header node (main_head). These nodes are cloned and the main_head node 
gets these nodes as additional output nodes. This should be fine but the 
DUIterator_Fast forbids insertions.

The fix simply switches to a normal DUIterator which allows insertions. 
This should also be done when correcting the fall-in values to the 
main-loop to take the values from the pre-loop.

Best regards,
Christian


More information about the hotspot-compiler-dev mailing list