JDK-8157906 : aarch64: some more integer rotate instructions are never emitted
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: linux
  • CPU: aarch64
  • Submitted: 2016-05-26
  • Updated: 2021-02-01
  • Resolved: 2016-05-27
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9 Other
9 b126Fixed openjdk8u292Fixed
Related Reports
Relates :  
Description
    The left rotate instructions have the same issue with https://bugs.openjdk.java.net/browse/JDK-8154537.

    (src << shift) | (src >>> -shift) with src an int have some support in the aarch64.ad ad file: rolI_rReg_Var_C_32 and rolI_rReg_Var_C0, but their definitions is broken and never match any ideal graph subtree.

    Simpe test case:
import java.lang.Integer.*;

public class test {
  public static int foo (int x) {
    return Integer.rotateLeft(x, 1);
  }

  public static void main(String[] args) { 
    int x = 0x1234; 

    for (int i = 0; i < 50000; i++) {
      x = foo(x); 
    }
  }
}

    before optimizing:
  0x0000007f74d13454: neg   w11, w2
  0x0000007f74d13458: lsr   w12, w1, w11 
  0x0000007f74d1345c: lsl   w10, w1, w2
  0x0000007f74d13460: orr   w0, w10, w12    ;*ior {reexecute=0 rethrow=0 return_oop=0}
                                                ; - java.lang.Integer::rotateLeft@7 (line 1751)
after optimizing:
  0x0000007f6cd135d4: neg   w8, w2
  0x0000007f6cd135d8: ror   w0, w1, w8      ;*ior {reexecute=0 rethrow=0 return_oop=0}
                                                ; - java.lang.Integer::rotateLeft@7 (line 1751)