8071312: compiler/arguments/CheckCompileThresholdScaling.java fails
Summary: Change the way VM handles CompileThresholdScaling==0, update test
Reviewed-by: kvn, drchase, fzhinkin
--- a/hotspot/src/share/vm/runtime/arguments.cpp Fri Jan 23 22:39:24 2015 -0500
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Mon Jan 26 10:43:42 2015 +0100
@@ -1127,7 +1127,7 @@
#endif
intx Arguments::scaled_compile_threshold(intx threshold, double scale) {
- if (scale == 1.0 || scale < 0.0) {
+ if (scale == 1.0 || scale <= 0.0) {
return threshold;
} else {
return (intx)(threshold * scale);
@@ -1143,7 +1143,7 @@
// Check value to avoid calculating log2 of 0.
if (scale == 0.0) {
- return 1;
+ return freq_log;
}
intx scaled_freq = scaled_compile_threshold((intx)1 << freq_log, scale);
@@ -3479,8 +3479,10 @@
set_mode_flags(_int);
}
- if ((TieredCompilation && CompileThresholdScaling == 0)
- || (!TieredCompilation && scaled_compile_threshold(CompileThreshold) == 0)) {
+ // CompileThresholdScaling == 0.0 is same as -Xint: Disable compilation (enable interpreter-only mode),
+ // but like -Xint, leave compilation thresholds unaffected.
+ // With tiered compilation disabled, setting CompileThreshold to 0 disables compilation as well.
+ if ((CompileThresholdScaling == 0.0) || (!TieredCompilation && CompileThreshold == 0)) {
set_mode_flags(_int);
}
--- a/hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java Fri Jan 23 22:39:24 2015 -0500
+++ b/hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java Mon Jan 26 10:43:42 2015 +0100
@@ -87,6 +87,13 @@
{
"-XX:-TieredCompilation",
"-XX:+PrintFlagsFinal",
+ "-XX:CompileThreshold=1000",
+ "-XX:CompileThresholdScaling=0.0",
+ "-version"
+ },
+ {
+ "-XX:-TieredCompilation",
+ "-XX:+PrintFlagsFinal",
"-XX:CompileThreshold=0",
"-XX:CompileThresholdScaling=0.75",
"-version"
@@ -108,6 +115,11 @@
"double CompileThresholdScaling := 0.750000 {product}"
},
{
+ "intx CompileThreshold := 1000 {pd product}",
+ "double CompileThresholdScaling := 0.000000 {product}",
+ "interpreted mode"
+ },
+ {
"intx CompileThreshold := 0 {pd product}",
"double CompileThresholdScaling := 0.750000 {product}",
"interpreted mode"
@@ -295,21 +307,21 @@
"double CompileThresholdScaling := 2.000000 {product}"
},
{
- "intx Tier0BackedgeNotifyFreqLog := 0 {product}",
- "intx Tier0InvokeNotifyFreqLog := 0 {product}",
- "intx Tier23InlineeNotifyFreqLog := 0 {product}",
- "intx Tier2BackedgeNotifyFreqLog := 0 {product}",
- "intx Tier2InvokeNotifyFreqLog := 0 {product}",
- "intx Tier3BackEdgeThreshold := 0 {product}",
- "intx Tier3BackedgeNotifyFreqLog := 0 {product}",
- "intx Tier3CompileThreshold := 0 {product}",
- "intx Tier3InvocationThreshold := 0 {product}",
- "intx Tier3InvokeNotifyFreqLog := 0 {product}",
- "intx Tier3MinInvocationThreshold := 0 {product}",
- "intx Tier4BackEdgeThreshold := 0 {product}",
- "intx Tier4CompileThreshold := 0 {product}",
- "intx Tier4InvocationThreshold := 0 {product}",
- "intx Tier4MinInvocationThreshold := 0 {product}",
+ "intx Tier0BackedgeNotifyFreqLog := 10 {product}",
+ "intx Tier0InvokeNotifyFreqLog := 7 {product}",
+ "intx Tier23InlineeNotifyFreqLog := 20 {product}",
+ "intx Tier2BackedgeNotifyFreqLog := 14 {product}",
+ "intx Tier2InvokeNotifyFreqLog := 11 {product}",
+ "intx Tier3BackEdgeThreshold := 60000 {product}",
+ "intx Tier3BackedgeNotifyFreqLog := 13 {product}",
+ "intx Tier3CompileThreshold := 2000 {product}",
+ "intx Tier3InvocationThreshold := 200 {product}",
+ "intx Tier3InvokeNotifyFreqLog := 10 {product}",
+ "intx Tier3MinInvocationThreshold := 100 {product}",
+ "intx Tier4BackEdgeThreshold := 40000 {product}",
+ "intx Tier4CompileThreshold := 15000 {product}",
+ "intx Tier4InvocationThreshold := 5000 {product}",
+ "intx Tier4MinInvocationThreshold := 600 {product}",
"double CompileThresholdScaling := 0.000000 {product}",
"interpreted mode"
}