RFR: 8256823: C2 compilation fails with "assert(isShiftCount(imm8 >> 1)) failed: illegal shift count"
Tobias Hartmann
thartmann at openjdk.java.net
Mon Nov 23 13:32:09 UTC 2020
The ideal transformation added by [JDK-8254872](https://bugs.openjdk.java.net/browse/JDK-8254872) converts `RotateLeftNode(val, shift)` into `RotateRightNode(val, 32/64 - (shift & 31/63))`. If `shift` later becomes zero, we end up trying to emit a rotate with a 32/64 shift value which triggers an assert.
I've added an identity transformation similar to what is implemented for ShiftNodes that takes care of this. I've also noticed that the corresponding assert is not strong enough for `roll` and `rorl` (probably the author used the assert corresponding to the 64-bit version by accident). The patch also includes some refactoring.
Thanks,
Tobias
-------------
Commit messages:
- 8256823: C2 compilation fails with "assert(isShiftCount(imm8 >> 1)) failed: illegal shift count"
Changes: https://git.openjdk.java.net/jdk/pull/1384/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1384&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8256823
Stats: 111 lines in 5 files changed: 88 ins; 3 del; 20 mod
Patch: https://git.openjdk.java.net/jdk/pull/1384.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/1384/head:pull/1384
PR: https://git.openjdk.java.net/jdk/pull/1384
More information about the hotspot-compiler-dev
mailing list