[14] RFR(S): 8233529: loopTransform.cpp:2984: Error: assert(p_f->Opcode() == Op_IfFalse) failed
Tobias Hartmann
tobias.hartmann at oracle.com
Mon Nov 11 06:10:58 UTC 2019
Thanks Vladimir. On my machine, it takes 30s with Graal as JIT vs. 10s with C2.
Best regards,
Tobias
On 08.11.19 18:00, Vladimir Kozlov wrote:
> Looks good. How much time take for Graal to run the test (you switched off TieredCompilation)?
>
> Vladimir
>
> On 11/8/19 4:52 AM, Tobias Hartmann wrote:
>> Hi,
>>
>> please review the following patch:
>> https://bugs.openjdk.java.net/browse/JDK-8233529
>> http://cr.openjdk.java.net/~thartmann/8233529/webrev.00/
>>
>> We have two loops (see TestRemoveMainPostLoops.java): Loop A with an inner loop followed by Loop B.
>>
>> (1) OSR compilation is triggered in loop B.
>> (2) Pre-/main-/post loops are created for loop B.
>> (3) Main and post loops of B are found empty and are removed.
>> (4) Inner loop A is fully unrolled and removed.
>> (5) Only main and post loops are created for A (no pre loop -> "PeelMainPost") and main is unrolled.
>> (6) Pre loop of A is found empty, attempt to remove main and post loop then incorrectly selects main
>> loop from A.
>>
>> The loop layout looks like this:
>> Loop: N0/N0 has_sfpt
>> Loop: N383/N718 limit_check sfpts={ 160 }
>> Loop: N512/N517 counted [int,int),+1 (4 iters) pre has_sfpt <- belongs to A
>> Loop: N760/N338 counted [1,100),+2 (102 iters) main has_sfpt <- belongs to B
>> Loop: N713/N716 counted [int,101),+1 (4 iters) post has_sfpt <- belongs to B
>>
>> Please note that the order of the two loops is not like in the Java code because it's an OSR
>> compilation that starts execution in the second loop.
>>
>> I've strengthened the asserts in locate_pre_from_main() and added a check for is_main_no_pre_loop()
>> in the caller.
>>
>> The code has been introduced by JDK-8085832 [1].
>>
>> Thanks,
>> Tobias
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-8085832
>>
More information about the hotspot-compiler-dev
mailing list