RFR(M): 8080289: Intermediate writes in a loop not eliminated by optimizer

Roland Westrelin roland.westrelin at oracle.com
Wed Jun 10 15:03:55 UTC 2015


http://cr.openjdk.java.net/~roland/8080289/webrev.00/

Sink stores out of loops when possible:

for (int i = 0; i < 1000; i++) {
    // Some stuff that doesn’t prevent the optimization
    array[idx] = i;
}

becomes:

for (int i = 0; i < 1000; i++) {
    // Some stuff
}
array[idx] = 999;

Or move stores before the loop when possible:

for (int i = 0; i < 1000; i++) {
    array[idx] = 999;
    // Some stuff that doesn’t prevent the optimization
}

becomes:

array[idx] = 999;
for (int i = 0; i < 1000; i++) {
    // Some stuff
}

The change in memnode.cpp is useful to clean up code generated from test_after_5 because the stores are moved out of the loop only after the loop is split and unrolled. That code removes duplicate stores.

Roland.


More information about the hotspot-compiler-dev mailing list