Merge
This commit is contained in:
commit
7d47034bd3
@ -50,12 +50,11 @@ define_pd_global(intx, ConditionalMoveLimit, 3);
|
||||
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);
|
||||
|
@ -70,7 +70,6 @@ define_pd_global(bool, UseTLAB, true);
|
||||
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
|
||||
|
@ -55,7 +55,6 @@ define_pd_global(bool, UseTLAB, true);
|
||||
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.
|
||||
|
@ -56,7 +56,6 @@ define_pd_global(bool, UseTLAB, true);
|
||||
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
|
||||
|
@ -53,7 +53,6 @@ define_pd_global(bool, UseTLAB, true);
|
||||
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
|
||||
|
@ -47,7 +47,6 @@ define_pd_global(intx, ConditionalMoveLimit, 3);
|
||||
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);
|
||||
|
@ -116,9 +116,10 @@ define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong);
|
||||
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) \
|
||||
constraint(UseAVXConstraintFunc, AtParse) \
|
||||
\
|
||||
product(bool, UseCLMUL, false, \
|
||||
"Control whether CLMUL instructions can be used on x86/x64") \
|
||||
|
@ -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 @@ import java.util.Formatter;
|
||||
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 @@ class JVMCIVersionCheck {
|
||||
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 @@ class JVMCIVersionCheck {
|
||||
"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 @@ class JVMCIVersionCheck {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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, \
|
||||
|
@ -332,6 +332,17 @@ Flag::Error InitArrayShortSizeConstraintFunc(intx value, bool verbose) {
|
||||
}
|
||||
}
|
||||
|
||||
Flag::Error UseAVXConstraintFunc(intx value, bool verbose) {
|
||||
if (value > 2 && !UnlockExperimentalVMOptions) {
|
||||
CommandLineError::print(verbose,
|
||||
"UseAVX (" UINTX_FORMAT ") is experimental and must be "
|
||||
"enabled via -XX:+UnlockExperimentalVMOptions \n", value);
|
||||
return Flag::VIOLATES_CONSTRAINT;
|
||||
} else {
|
||||
return Flag::SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef COMPILER2
|
||||
Flag::Error InteriorEntryAlignmentConstraintFunc(intx value, bool verbose) {
|
||||
if (InteriorEntryAlignment > CodeEntryAlignment) {
|
||||
|
@ -64,6 +64,8 @@ Flag::Error TypeProfileLevelConstraintFunc(uintx value, bool verbose);
|
||||
|
||||
Flag::Error InitArrayShortSizeConstraintFunc(intx value, bool verbose);
|
||||
|
||||
Flag::Error UseAVXConstraintFunc(intx value, bool verbose);
|
||||
|
||||
#ifdef COMPILER2
|
||||
Flag::Error InteriorEntryAlignmentConstraintFunc(intx value, bool verbose);
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user