[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