Integrated: 8290432: C2 compilation fails with assert(node->_last_del == _last) failed: must have deleted the edge just produced

Yi Yang yyang at openjdk.org
Wed Dec 7 03:11:12 UTC 2022


On Sun, 31 Jul 2022 09:28:59 GMT, Yi Yang <yyang at openjdk.org> wrote:

> Hi, can I have a review for this patch? [JDK-8273585](https://bugs.openjdk.org/browse/JDK-8273585) recognized the form of `Phi->CastII->AddI` as additional parallel induction variables. In the following program:
> 
> class Test {
>     static int dontInline() {
>         return 0;
>     }
> 
>     static long test(int val, boolean b) {
>         long ret = 0;
>         long dArr[] = new long[100];
>         for (int i = 15; 293 > i; ++i) {
>             ret = val;
>             int j = 1;
>             while (++j < 6) {
>                 int k = (val--);
>                 for (long l = i; 1 > l; ) {
>                     if (k != 0) {
>                         ret += dontInline();
>                     }
>                 }
>                 if (b) {
>                     break;
>                 }
>             }
>         }
>         return ret;
>     }
> 
>     public static void main(String[] args) {
>         for (int i = 0; i < 1000; i++) {
>             test(0, false);
>         }
>     }
> }
> 
> `val` is incorrectly matched with the new parallel IV form:
> ![image](https://user-images.githubusercontent.com/5010047/182059398-fc5204bc-8d95-4e3e-8c66-15776af457b8.png)
> And C2 further replaces it with newly added nodes, which finally leads the crash:
> ![image](https://user-images.githubusercontent.com/5010047/182059498-13148d46-b10f-4e18-b84a-f6b9f626ac7b.png)
> 
> I think we can add more constraints to the new form. The form of `Phi->CastXX->AddX` appears when using Preconditions.checkIndex, and it would be recognized as additional IV when 1) Phi != phi2, 2) CastXX is controlled by RangeCheck(to reflect changes in Preconditions checkindex intrinsic)

This pull request has now been integrated.

Changeset: acf96c64
Author:    Yi Yang <yyang at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/acf96c64b750b1a7badbb2cd1c7021dad36aae1e
Stats:     111 lines in 2 files changed: 105 ins; 0 del; 6 mod

8290432: C2 compilation fails with assert(node->_last_del == _last) failed: must have deleted the edge just produced

Reviewed-by: kvn, thartmann, chagedorn

-------------

PR: https://git.openjdk.org/jdk/pull/9695


More information about the hotspot-compiler-dev mailing list