RFR: 8304948: [vectorapi] C2 crashes when expanding VectorBox

Eric Liu eliu at openjdk.org
Mon Apr 17 08:50:52 UTC 2023


This patch fixes C2 failure with SIGSEGV due to endless recursion.

With test case VectorBoxExpandTest.java in this patch, C2 would generate IR graph like below:


               ------------
              /            \
      Region |  VectorBox   |
           \ | /            |
            Phi             |
             |              |
             |              |
      Region |  VectorBox   |
           \ | /            |
            Phi             |
             |              |
             |------------/
             |



This Phi will be optimized by merge_through_phi [1], which transforms `Phi (VectorBox VectorBox)` into `VectorBox (Phi Phi)` to pursue opportunity of combining VectorBox with VectorUnbox. In this process, either the pre type check [2] or the process cloning Phi nodes [3], the circle case is well considered to avoid falling into endless loop.

After merge_through_phi, each input Phi of new VectorBox has the same shape with original root Phi before merging (only VectorBox has been replaced). After several other optimizations, C2 would expand VectorBox [4] on a graph like below:


               ------------
              /            \
      Region |  Proj        |
           \ | /            |
            Phi             |
             |              |
             |              |
      Region |  Proj        |
           \ | /            |
            Phi             |
             |              |
             |------------/
             |
             |     Phi
             |     /
          VectorBox


which the circle case should be taken into consideration as well.

[TEST]
Full Jtreg passed without new failure.

[1] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/cfgnode.cpp#L2554
[2] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/cfgnode.cpp#L2571
[3] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/cfgnode.cpp#L2531
[4] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/vector.cpp#L311

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

Commit messages:
 - 8304948: [vectorapi] C2 crashes when expanding VectorBox

Changes: https://git.openjdk.org/jdk/pull/13489/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13489&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8304948
  Stats: 119 lines in 3 files changed: 113 ins; 0 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/13489.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13489/head:pull/13489

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


More information about the hotspot-compiler-dev mailing list