[14] RFR(S): 8233529: loopTransform.cpp:2984: Error: assert(p_f->Opcode() == Op_IfFalse) failed

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri Nov 8 17:00:42 UTC 2019


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