policy_maximally_unroll ignores the current compilation size and can blow out the node counts. The following suggested fix added the cutout from policy_peel into it. ==== //java/main-dev/java/hotspot/src/share/vm/opto/loopTransform.cpp#15 - /home/cliffc/HotSpot/cliffc-main/hotspot/src/share/vm/opto/loopTransform.cpp ==== @@ -216,7 +216,8 @@ uint unroll_limit = (uint)LoopUnrollLimit * 4; assert( (intx)unroll_limit == LoopUnrollLimit * 4, "LoopUnrollLimit must fit in 32bits"); if( trip_count <= unroll_limit && body_size <= unroll_limit && - (body_size * trip_count <= unroll_limit) ) { + (body_size * trip_count <= unroll_limit) && + body_size*body_size+phase->C->unique() < 65000 ) { return trip_count; // maximally unroll }
|