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
    
    
  
http://cr.openjdk.java.net/~kvn/8014811/webrev
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.
Thanks,
Vladimir
    
    
More information about the hotspot-compiler-dev
mailing list