RFR: 8330853: Add missing checks for ConnectionGraph::can_reduce_cmp() call

Vladimir Kozlov kvn at openjdk.org
Tue Apr 23 14:40:49 UTC 2024


In Leyden testing CI we start hitting assert:


# Internal Error (/workspace/open/src/hotspot/share/opto/node.hpp:407), pid=3216007, tid=3216030
# assert(i < _max) failed: oob: i=2, _max=2

Stack: [0x00007f20b011b000,0x00007f20b021b000], sp=0x00007f20b02157e0, free space=1001k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0xbf5bb4] Node::in(unsigned int) const [clone .part.0]+0x24 (node.hpp:407)
V [libjvm.so+0xbf69ea] ConnectionGraph::can_reduce_cmp(Node*, Node*) const+0x9a (node.hpp:407)
V [libjvm.so+0xbf74a6] ConnectionGraph::can_reduce_check_users(Node*, unsigned int) const+0x996 (escape.cpp:578)


[JDK-8316991](https://bugs.openjdk.org/browse/JDK-8316991) added new code which assumes that we always have sequence : IfNode->Bool->Cmp: [escape.cpp#L569](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/escape.cpp#L569)
which is not true in some cases. In failed cases there is additional Opaque4 node between If and Bool nodes.

The fix is to add missing checks for If, Bool and Cmp nodes.

The fix is verified in Leyden CI testing. The failure happens only with special C2 mode compilation in Leyden.

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

Commit messages:
 - 8330853: Add missing checks for ConnectionGraph::can_reduce_cmp() call

Changes: https://git.openjdk.org/jdk/pull/18916/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18916&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8330853
  Stats: 9 lines in 1 file changed: 4 ins; 0 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/18916.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18916/head:pull/18916

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


More information about the hotspot-compiler-dev mailing list