Integrated: 8375653: C2: CmpUNode::sub is not monotonic
Quan Anh Mai
qamai at openjdk.org
Mon Jan 26 11:21:13 UTC 2026
On Tue, 20 Jan 2026 02:42:41 GMT, Quan Anh Mai <qamai at openjdk.org> wrote:
> Hi,
>
> This PR fixes the issue that `CmpUNode::sub` is not monotonic. The root cause is that it returns different values for several cases, but the cases are not mutually exclusive and the return values are not a subset of each other. This leads to the possibilities that a node satisfying both cases will return the first value, but if upon being widen it ceases to satisfy the first case but still satisfies the second case, the method will return the second value, which is not a superset of the previous result.
>
> For example, given `r = CmpU(x, y)`.
>
> At the first iteration, `type(x) = {0}` and `type(y) = {1, -1}`, then `CmpUNode::sub` returns `TypeInt::CC_LE` since it sees that `x` is the constant `0`.
>
> At the second iteration, `type(x) = {0, 2}` and `type(y) = {-1, 1}`, then `CmpUNode::sub` returns `TypeInt::CC_NE` since it sees that `x` and `y` do not overlap. This is not a superset of `TypeInt::CC_LE`, which leads to an assertion.
>
> Please take a look and leave your reviews, thanks a lot.
This pull request has now been integrated.
Changeset: 30675faa
Author: Quan Anh Mai <qamai at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/30675faa67d1bbb4acc729a841493bb8311416af
Stats: 389 lines in 3 files changed: 293 ins; 77 del; 19 mod
8375653: C2: CmpUNode::sub is not monotonic
Reviewed-by: chagedorn, mchevalier
-------------
PR: https://git.openjdk.org/jdk/pull/29308
More information about the hotspot-compiler-dev
mailing list