RFR: 8366888: C2: incorrect assertion predicate with short running long counted loop
    Roland Westrelin 
    roland at openjdk.org
       
    Mon Oct 13 15:15:57 UTC 2025
    
    
  
On Fri, 10 Oct 2025 10:25:43 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:
>> In:
>> 
>> 
>>         for (int i = 100; i < 1100; i++) {
>>             v += floatArray[i - 100];
>>             Objects.checkIndex(i, longRange);
>>         }
>> 
>> 
>> The int counted loop has both an int range check and a long range. The
>> int range check is optimized first. Assertion predicates are inserted
>> above the loop. One predicates checks that:
>> 
>> 
>> init - 100 <u floatArray.length
>> 
>> 
>> The loop is then transformed to enable the optimization of the long
>> range check. The loop is short running, so there's no need to create a
>> loop nest. The counted loop is mostly left as is but, the loop's
>> bounds are changed from:
>> 
>> 
>>         for (int i = 100; i < 1100; i++) {
>> 
>> 
>> to:
>> 
>> 
>>         for (int i = 0; i < 1000; i++) {
>> 
>> 
>> The reason for that the long range check transformation expects the
>> loop to start at 0.
>> 
>> Pre/main/post loops are created. Template Assertion predicates are
>> added above the main loop. The loop is unrolled. Initialized assertion
>> predicates are created. The one created from the condition:
>> 
>> 
>> init - 100 <u floatArray.length
>> 
>> 
>> checks the value of `i` out of the pre loop which is 1. That check fails.
>> 
>> The root cause of the failure is that when bounds of the counted loop
>> are changed, template assertion predicates need to be updated with and
>> adjusted init input.
>> 
>> When the bounds of the loop are known, the assertion predicates can be
>> updated in place. Otherwise, when the loop is speculated to be short
>> running, the assertion predicates are updated when they are cloned.
>
> I'll have a look today or on Monday :-)
@chhagedorn new commit should address your comments and suggestions.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/27250#issuecomment-3397918786
    
    
More information about the hotspot-compiler-dev
mailing list