RFR: 8280123: C2: Infinite loop in CMoveINode::Ideal during IGVN
Vladimir Ivanov
vlivanov at openjdk.java.net
Wed Jan 19 13:35:50 UTC 2022
There's a discrepancy between `CMoveNode::Ideal()` and `CMoveINode::Ideal()` in the way how constants are detected:
the former looks for `Con` nodes (`in(IfFalse)->is_Con()`) while the latter checks node types (e.g., `phase->type(in(IfFalse)) == TypeInt::ZERO`). It leads to infinite loop during IGVN (where `CMoveNode::Ideal()` and `CMoveINode::Ideal()` repeatedly rotate `CMoveI` node) because `CMoveNode::Ideal()` don't consider `CastII` to a constant as a constant while `CMoveINode::Ideal()` does.
The fix migrates `CMoveNode::Ideal()` away from `Node::is_Con()` to node types.
Testing: hs-tier1 - hs-tier4
-------------
Commit messages:
- 8280123: C2: Infinite loop in CMoveINode::Ideal during IGVN
Changes: https://git.openjdk.java.net/jdk/pull/7133/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7133&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8280123
Stats: 87 lines in 2 files changed: 70 ins; 4 del; 13 mod
Patch: https://git.openjdk.java.net/jdk/pull/7133.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/7133/head:pull/7133
PR: https://git.openjdk.java.net/jdk/pull/7133
More information about the hotspot-compiler-dev
mailing list