RFR: 8254887: C2: assert(cl->trip_count() > 0) failed: peeling a fully unrolled loop
Roland Westrelin
roland at openjdk.java.net
Thu Nov 12 14:26:58 UTC 2020
On Mon, 9 Nov 2020 08:24:29 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:
>> A loop's trip count is computed to have exact trip count 6. Then:
>>
>> 1- pre/main/post loops are created which brings the trip count from 6
>> to 5
>> 2- main loop is unrolled which brings the trip count to 2
>> 3- main loop is peeled: Trip count is 1
>> 4- pre/main/post loops are created again. Trip count of main loop is 0.
>> 5- peeling is attempted again and the assert fires
>>
>> IdealLoopTree::policy_peeling() doesn't attempt peeling if the trip
>> count is 1. I propose that IdealLoopTree::policy_range_check() (that
>> causes the pre/main/post loops insertion the second time) performs the
>> same check so step 4 doesn't happen.
>
> src/hotspot/share/opto/loopTransform.cpp line 1066:
>
>> 1064: Node *trip_counter = cl->phi();
>> 1065:
>> 1066: // check for vectorized loops, some opts are no longer needed
>
> Maybe you can update this comment to also include the new check.
I will do that before I push it. Thanks for the review.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1096
More information about the hotspot-compiler-dev
mailing list