RFR: 8364970: Redo JDK-8327381 by updating the CmpU type instead of the Bool type [v4]

Quan Anh Mai qamai at openjdk.org
Thu Aug 14 18:26:17 UTC 2025


On Thu, 14 Aug 2025 18:10:29 GMT, Francisco Ferrari Bihurriet <fferrari at openjdk.org> wrote:

>> Hi, this pull request is a second take of 1383fec41756322bf2832c55633e46395b937b40, by updating the `CmpUNode` type as either `TypeInt::CC_LE` (case 1a) or `TypeInt::CC_LT` (case 1b) instead of updating the `BoolNode` type as `TypeInt::ONE`.
>> 
>> With this approach a56cd371a2c497e4323756f8b8a08a0bba059bf2 becomes unnecessary. Additionally, having the right type in `CmpUNode` could potentially enable further optimizations.
>> 
>> #### Testing
>> 
>> In order to evaluate the changes, the following testing has been performed:
>> 
>> * `jdk:tier1` (see [GitHub Actions run](https://github.com/franferrax/jdk/actions/runs/16789994433))
>> * [`TestBoolNodeGVN.java`](https://github.com/openjdk/jdk/blob/jdk-26+9/test/hotspot/jtreg/compiler/c2/gvn/TestBoolNodeGVN.java), created for [JDK-8327381: Refactor type-improving transformations in BoolNode::Ideal to BoolNode::Value](https://bugs.openjdk.org/browse/JDK-8327381) (1383fec41756322bf2832c55633e46395b937b40)
>>     * I also checked it breaks if I remove the `CmpUNode::Value_cmpu_and_mask` call
>> * Private reproducer for [JDK-8349584: Improve compiler processing](https://bugs.openjdk.org/browse/JDK-8349584) (a56cd371a2c497e4323756f8b8a08a0bba059bf2)
>> * A local slowdebug run of the `test/hotspot/jtreg/compiler/c2` category on _Fedora Linux x86_64_
>>     * Same results as with `master` (f95af744b07a9ec87e2507b3d584cbcddc827bbd)
>
> Francisco Ferrari Bihurriet has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Make testCorrectness @Run the C2 compiled versions
>   
>   Correctness of the tests with the following name format should be
>   checked in the TestFramework.run() JVM process, with the C2 compiled
>   version of these methods. TestFramework's warmup ensures this.
>   
>   testCase(1a|1b)(OptimizeAsTrue|OptimizeAsFalse)For(EQ|NE|LE|GE|LT|GT)(xm|mx)

src/hotspot/share/opto/subnode.cpp line 902:

> 900:       const TypeInt* rhs_m_type = phase->type(rhs_m)->isa_int();
> 901:       // Exclude any case where m == -1 is possible.
> 902:       if (rhs_m_type != nullptr && (rhs_m_type->_lo > -1 || rhs_m_type->_hi < -1)) {

Please use `!rhs_m_type->contains(-1)`

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26666#discussion_r2277417174


More information about the hotspot-compiler-dev mailing list