RFR (S) 8014811: loopTransform.cpp assert(cmp_end->in(2) == limit) failed
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