Integrated: 8370481: C2 SuperWord: Long/Integer.compareUnsigned return wrong value in SLP
    Hamlin Li 
    mli at openjdk.org
       
    Wed Oct 29 15:03:48 UTC 2025
    
    
  
On Wed, 22 Oct 2025 20:48:17 GMT, Hamlin Li <mli at openjdk.org> wrote:
> Hi,
> Can you help to review the patch? @eme64 
> 
> ##  Issue
> 
> Currently, in SLP when transform from (Bool + CmpU + CMove) to (VectorMaskCmp + VectorBlend), the unsigned-ness in CmpU is lost, then end up doing a signed instead of unsigned comparison in VectorMaskCmp.
> For details please check code at `SuperWordVTransformBuilder::make_vector_vtnode_for_pack` and `PackSet::get_bool_test`.
> 
> ##  Fix
> Currently, `BoolTest` does not support an unsigned construction (`BoolTest( mask btm ) : _test(btm) { assert((btm & unsigned_compare) == 0, "unsupported");}`), seems to me a feasible solution would be get the unsigned information from CmpU (which could be an input of Bool) and pass it to VectorMaskCmp.
> 
> Thanks
> 
> This pr could also lead to more optimizations, like: https://github.com/openjdk/jdk/pull/25336 and https://github.com/openjdk/jdk/pull/25341.
This pull request has now been integrated.
Changeset: eab5644a
Author:    Hamlin Li <mli at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/eab5644a96e20409f31622d2e6c33636a7a49768
Stats:     782 lines in 3 files changed: 779 ins; 0 del; 3 mod
8370481: C2 SuperWord: Long/Integer.compareUnsigned return wrong value in SLP
Reviewed-by: epeter, tonyp
-------------
PR: https://git.openjdk.org/jdk/pull/27942
    
    
More information about the hotspot-compiler-dev
mailing list