Request for reviews (S): 7042327: assert(opaq->outcnt() == 1 && opaq->in(1) == limit)

Vladimir Kozlov vladimir.kozlov at
Thu May 5 16:03:57 PDT 2011

Fixed 7042327: assert(opaq->outcnt() == 1 && opaq->in(1) == limit)

New loop unrolling code calculate new_limit = limit-stride. If limit is
trip-counter (phi+stride) with the same stride from a previous loop then 
new_limit will be optimized to pre-incremented value: new_limit = phi.
reorg_offsets() optimization will create a separate Opaque2 node for each use of 
trip-counter (phi) and as result zero trip guard limit will be different from 
loop limit and it causes the assert to fail.

Separate limit by Opaque2 node when calculating new limit for unroll if limit is 
an incremented variable from previous loop to avoid using pre-incremented value 
and reduce register pressure.
I also removed code which creates dead loops since limit is input to new_limit.

Tested with failed case and CTW.

More information about the hotspot-compiler-dev mailing list