RFR: 8181633: Vectorization fails for some multiplication with constant cases

Yang Zhang yang.zhang at linaro.org
Wed Jun 21 02:44:25 UTC 2017


 In OpenJDK 9/10 hotspot c2, for the test case:
public static void mulCInt( int[] a, int[] b, int[] c, int loop) {
  for (int i = 0; i < loop; i++) {
    int t0 = a[i] * 5;
    int t1 = b[i] * 10;
    c[i] = t0 + t1;

This should be vectorized. At first, C2 optimizes such multiplications
to shift and add. Then vectorization is done. But vectorization fails
both on aarch64 and x86 platform.

This bug results from that the rules of matching two similar
independent nodes are not strict enough. So that I add more matching
rules. With this patch, both on x86 and aarch64, SIMD instructions can
be generated for above test case. And there is obvious performance
improvement (~30% in jmh).



Would you please help to review it?


More information about the hotspot-compiler-dev mailing list