Merge
diff --git a/.hgtags b/.hgtags
index a4580d1..a09db32 100644
--- a/.hgtags
+++ b/.hgtags
@@ -578,3 +578,6 @@
e64b1cb48d6e7703928a9d1da106fc27f8cb65fd jdk-9+173
944791f8160185bffa13fbb821fc09b6198f1f25 jdk-9+174
8f04d457168b9f1f4a1b2c37f49e0513ca9d33a7 jdk-9+175
+2ab74e5dbdc2b6a962c865500cafd23cf387dc60 jdk-9+176
+1ca8f038fceb88c640badf9bd18905205bc63b43 jdk-9+177
+9d032191f82fca5ba0aac98682f69c4ff0f1283d jdk-9+178
diff --git a/src/cpu/aarch64/vm/c2_globals_aarch64.hpp b/src/cpu/aarch64/vm/c2_globals_aarch64.hpp
index 9a16dd7..69c8cc0 100644
--- a/src/cpu/aarch64/vm/c2_globals_aarch64.hpp
+++ b/src/cpu/aarch64/vm/c2_globals_aarch64.hpp
@@ -50,12 +50,11 @@
define_pd_global(intx, FLOATPRESSURE, 64);
define_pd_global(intx, FreqInlineSize, 325);
define_pd_global(intx, MinJumpTableSize, 10);
-define_pd_global(intx, INTPRESSURE, 25);
+define_pd_global(intx, INTPRESSURE, 24);
define_pd_global(intx, InteriorEntryAlignment, 16);
define_pd_global(intx, NewSizeThreadIncrease, ScaleForWordSize(4*K));
define_pd_global(intx, LoopUnrollLimit, 60);
define_pd_global(intx, LoopPercentProfileLimit, 10);
-define_pd_global(intx, PostLoopMultiversioning, false);
// InitialCodeCacheSize derived from specjbb2000 run.
define_pd_global(intx, InitialCodeCacheSize, 2496*K); // Integral multiple of CodeCacheExpansionSize
define_pd_global(intx, CodeCacheExpansionSize, 64*K);
diff --git a/src/cpu/arm/vm/c2_globals_arm.hpp b/src/cpu/arm/vm/c2_globals_arm.hpp
index 4b424ed..2c09196 100644
--- a/src/cpu/arm/vm/c2_globals_arm.hpp
+++ b/src/cpu/arm/vm/c2_globals_arm.hpp
@@ -70,7 +70,6 @@
define_pd_global(bool, ResizeTLAB, true);
define_pd_global(intx, LoopUnrollLimit, 60); // Design center runs on 1.3.1
define_pd_global(intx, LoopPercentProfileLimit, 10);
-define_pd_global(intx, PostLoopMultiversioning, false);
define_pd_global(intx, MinJumpTableSize, 16);
// Peephole and CISC spilling both break the graph, and so makes the
diff --git a/src/cpu/ppc/vm/c2_globals_ppc.hpp b/src/cpu/ppc/vm/c2_globals_ppc.hpp
index e755e98..fd61e5d 100644
--- a/src/cpu/ppc/vm/c2_globals_ppc.hpp
+++ b/src/cpu/ppc/vm/c2_globals_ppc.hpp
@@ -55,7 +55,6 @@
define_pd_global(bool, ResizeTLAB, true);
define_pd_global(intx, LoopUnrollLimit, 60);
define_pd_global(intx, LoopPercentProfileLimit, 10);
-define_pd_global(intx, PostLoopMultiversioning, false);
// Peephole and CISC spilling both break the graph, and so make the
// scheduler sick.
diff --git a/src/cpu/s390/vm/c2_globals_s390.hpp b/src/cpu/s390/vm/c2_globals_s390.hpp
index 2c00ec8..86a1d10 100644
--- a/src/cpu/s390/vm/c2_globals_s390.hpp
+++ b/src/cpu/s390/vm/c2_globals_s390.hpp
@@ -56,7 +56,6 @@
define_pd_global(bool, ResizeTLAB, true);
define_pd_global(intx, LoopUnrollLimit, 60);
define_pd_global(intx, LoopPercentProfileLimit, 10);
-define_pd_global(intx, PostLoopMultiversioning, false);
define_pd_global(intx, MinJumpTableSize, 18);
// Peephole and CISC spilling both break the graph, and so makes the
diff --git a/src/cpu/sparc/vm/c2_globals_sparc.hpp b/src/cpu/sparc/vm/c2_globals_sparc.hpp
index 10e6799..7e7cddc 100644
--- a/src/cpu/sparc/vm/c2_globals_sparc.hpp
+++ b/src/cpu/sparc/vm/c2_globals_sparc.hpp
@@ -53,7 +53,6 @@
define_pd_global(bool, ResizeTLAB, true);
define_pd_global(intx, LoopUnrollLimit, 60); // Design center runs on 1.3.1
define_pd_global(intx, LoopPercentProfileLimit, 10);
-define_pd_global(intx, PostLoopMultiversioning, false);
define_pd_global(intx, MinJumpTableSize, 5);
// Peephole and CISC spilling both break the graph, and so makes the
diff --git a/src/cpu/x86/vm/c2_globals_x86.hpp b/src/cpu/x86/vm/c2_globals_x86.hpp
index c193029..e805cad 100644
--- a/src/cpu/x86/vm/c2_globals_x86.hpp
+++ b/src/cpu/x86/vm/c2_globals_x86.hpp
@@ -47,7 +47,6 @@
define_pd_global(intx, FreqInlineSize, 325);
define_pd_global(intx, MinJumpTableSize, 10);
define_pd_global(intx, LoopPercentProfileLimit, 30);
-define_pd_global(intx, PostLoopMultiversioning, true);
#ifdef AMD64
define_pd_global(intx, INTPRESSURE, 13);
define_pd_global(intx, FLOATPRESSURE, 14);
diff --git a/src/cpu/x86/vm/globals_x86.hpp b/src/cpu/x86/vm/globals_x86.hpp
index 5673abb..748a1af 100644
--- a/src/cpu/x86/vm/globals_x86.hpp
+++ b/src/cpu/x86/vm/globals_x86.hpp
@@ -116,7 +116,7 @@
product(bool, UseStoreImmI16, true, \
"Use store immediate 16-bits value instruction on x86") \
\
- product(intx, UseAVX, 99, \
+ product(intx, UseAVX, 2, \
"Highest supported AVX instructions set on x86/x64") \
range(0, 99) \
\
diff --git a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java
index abae7a3..ba759b7 100644
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java
@@ -23,6 +23,7 @@
package org.graalvm.compiler.hotspot;
import java.util.Formatter;
+import java.util.Objects;
/**
* Mechanism for checking that the current Java runtime environment supports the minimum JVMCI API
@@ -37,10 +38,11 @@
class JVMCIVersionCheck {
private static final int JVMCI8_MIN_MAJOR_VERSION = 0;
- private static final int JVMCI8_MIN_MINOR_VERSION = 23;
+ private static final int JVMCI8_MIN_MINOR_VERSION = 26;
- // Will be updated once an ea build with the required JVMCI API is available.
- private static final int JVMCI9_MIN_EA_BUILD = 143;
+ // MAX_VALUE indicates that no current EA version is compatible with Graal.
+ // Note: Keep README.md in sync with the EA version support checked here.
+ private static final int JVMCI9_MIN_EA_BUILD = 176;
private static void failVersionCheck(boolean exit, String reason, Object... args) {
Formatter errorMessage = new Formatter().format(reason, args);
@@ -77,13 +79,27 @@
start += "-jvmci-".length();
int end = vmVersion.indexOf('.', start);
if (end > 0) {
- int major = Integer.parseInt(vmVersion.substring(start, end));
+ int major;
+ try {
+ major = Integer.parseInt(vmVersion.substring(start, end));
+ } catch (NumberFormatException e) {
+ failVersionCheck(exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
+ "Cannot read JVMCI major version from java.vm.version property: %s.%n", vmVersion);
+ return;
+ }
start = end + 1;
end = start;
while (end < vmVersion.length() && Character.isDigit(vmVersion.charAt(end))) {
end++;
}
- int minor = Integer.parseInt(vmVersion.substring(start, end));
+ int minor;
+ try {
+ minor = Integer.parseInt(vmVersion.substring(start, end));
+ } catch (NumberFormatException e) {
+ failVersionCheck(exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
+ "Cannot read JVMCI minor version from java.vm.version property: %s.%n", vmVersion);
+ return;
+ }
if (major >= JVMCI8_MIN_MAJOR_VERSION && minor >= JVMCI8_MIN_MINOR_VERSION) {
return;
}
@@ -96,7 +112,7 @@
"Cannot read JVMCI version from java.vm.version property: %s.%n", vmVersion);
} else {
if (vmVersion.contains("SNAPSHOT")) {
- // The snapshot of http://hg.openjdk.java.net/jdk9/hs tip is expected to work
+ // The snapshot of http://hg.openjdk.java.net/jdk9/dev tip is expected to work
return;
}
if (vmVersion.contains("internal")) {
@@ -104,23 +120,36 @@
return;
}
// http://openjdk.java.net/jeps/223
- // Only support EA builds until GA is available
- if (vmVersion.startsWith("9-ea+")) {
- int start = "9-ea+".length();
+ if (vmVersion.startsWith("9+")) {
+ int start = "9+".length();
int end = start;
end = start;
while (end < vmVersion.length() && Character.isDigit(vmVersion.charAt(end))) {
end++;
}
- int build = Integer.parseInt(vmVersion.substring(start, end));
+ int build;
+ try {
+ build = Integer.parseInt(vmVersion.substring(start, end));
+ } catch (NumberFormatException e) {
+ failVersionCheck(exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
+ "Cannot read JDK9 EA build number from java.vm.version property: %s.%n", vmVersion);
+ return;
+ }
if (build >= JVMCI9_MIN_EA_BUILD) {
return;
}
- failVersionCheck(exitOnFailure, "The VM is an insufficiently recent EA JDK9 build for Graal: %d < %d.%n", build, JVMCI9_MIN_EA_BUILD);
+ // Using Object.equals suppresses Eclipse's "Dead code" warning.
+ // Unfortunately @SuppressWarnings("unused") can only be applied at method level.
+ if (Objects.equals(JVMCI9_MIN_EA_BUILD, Integer.MAX_VALUE)) {
+ failVersionCheck(exitOnFailure, "This version of Graal is not compatible with any JDK 9 Early Access build.%n");
+ } else {
+ failVersionCheck(exitOnFailure, "The VM is an insufficiently recent EA JDK9 build for Graal: %d < %d.%n", build, JVMCI9_MIN_EA_BUILD);
+ }
return;
+ } else {
+ // Graal will be compatible with all JDK versions as of 9 GA
+ // until a JVMCI API change is made in a 9u or later release.
}
- failVersionCheck(exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
- "Cannot read JDK9 EA build number from java.vm.version property: %s.%n", vmVersion);
}
}
diff --git a/src/share/vm/opto/c2_globals.hpp b/src/share/vm/opto/c2_globals.hpp
index 49bcbf4..3ae2e20 100644
--- a/src/share/vm/opto/c2_globals.hpp
+++ b/src/share/vm/opto/c2_globals.hpp
@@ -181,7 +181,7 @@
"Map number of unrolls for main loop via " \
"Superword Level Parallelism analysis") \
\
- diagnostic_pd(bool, PostLoopMultiversioning, \
+ experimental(bool, PostLoopMultiversioning, false, \
"Multi versioned post loops to eliminate range checks") \
\
notproduct(bool, TraceSuperWordLoopUnrollAnalysis, false, \
diff --git a/test/compiler/rangechecks/TestRangeCheckEliminationDisabled.java b/test/compiler/rangechecks/TestRangeCheckEliminationDisabled.java
index 2c1b5e9..c55a9ad 100644
--- a/test/compiler/rangechecks/TestRangeCheckEliminationDisabled.java
+++ b/test/compiler/rangechecks/TestRangeCheckEliminationDisabled.java
@@ -26,7 +26,7 @@
* @bug 8154763
* @summary Tests PostLoopMultiversioning with RangeCheckElimination disabled.
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions
- * -XX:+PostLoopMultiversioning -XX:-RangeCheckElimination
+ * -XX:+UnlockExperimentalVMOptions -XX:+PostLoopMultiversioning -XX:-RangeCheckElimination
* compiler.rangechecks.TestRangeCheckEliminationDisabled
*/