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