RFR (S) 8014811: loopTransform.cpp assert(cmp_end->in(2) == limit) failed

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue May 21 18:23:46 PDT 2013


partial_peel() method leaves other loop's info in incorrect state if it 
bailouts due to new phi nodes creation. clone_for_use_outside_loop() 
places node clones near uses which is not correct in some cases. In the 
bug case it places loop's limit node inside the loop which use it.
It is fine in case partial_peel() exits normally since it stops current 
iteration of loop opts and nodes placement is redone during next iteration.
The fix is to do the same if partial_peel() failed but it created node 
clones outside processed loop.
Note, fixing clone_for_use_outside_loop() to find a correct place for 
clones is much more difficult. And this failing path is rare.

jtreg and JPRT testing.


More information about the hotspot-compiler-dev mailing list