RFR: 8315066: Add unsigned bounds and known bits to TypeInt/Long

Quan Anh Mai qamai at openjdk.org
Sat Jan 20 19:29:41 UTC 2024


Hi,

This patch adds unsigned bounds and known bits constraints to TypeInt and TypeLong. This opens more transformation opportunities in an elegant manner as well as helps avoid some ad-hoc rules in Hotspot.

In general, a TypeInt/Long represents a set of values x that satisfies: x s>= lo && x s<= hi && x u>= ulo && x u<= uhi && (x & zeros) == 0 && (~x & ones) == 0. These constraints are not independent, e.g. an int that lies in [0, 3] in signed domain must also lie in [0, 3] in unsigned domain and have all bits but the last 2 being unset. As a result, we must normalize the constraints (tighten the constraints so that they are optimal) before constructing a TypeInt/Long instance.

This is extracted from #15440 , node value transformations are left for later PRs. I have also added unit tests to verify the soundness of constraint normalization.

Please kindly review, thanks a lot.

Testing

- [ ] GHA
- [ ] Linux x64, tier 1-4

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

Commit messages:
 - add unit tests
 - fix template parameter
 - refactor
 - implement unsigned bounds and known bits

Changes: https://git.openjdk.org/jdk/pull/17508/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17508&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8315066
  Stats: 1442 lines in 16 files changed: 887 ins; 282 del; 273 mod
  Patch: https://git.openjdk.org/jdk/pull/17508.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17508/head:pull/17508

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


More information about the hotspot-compiler-dev mailing list