8071312: compiler/arguments/CheckCompileThresholdScaling.java fails

Change the way VM handles CompileThresholdScaling==0, update test

Reviewed-by: kvn, drchase, fzhinkin
This commit is contained in:
Zoltan Majo 2015-01-26 10:43:42 +01:00
parent b7eaaba943
commit 1da8218179
2 changed files with 33 additions and 19 deletions

View File

@ -1127,7 +1127,7 @@ static void no_shared_spaces(const char* message) {
#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 @@ intx Arguments::scaled_freq_log(intx freq_log, double scale) {
// 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 @@ jint Arguments::finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_req
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);
}

View File

@ -84,6 +84,13 @@ public class CheckCompileThresholdScaling {
"-XX:CompileThresholdScaling=0.75",
"-version"
},
{
"-XX:-TieredCompilation",
"-XX:+PrintFlagsFinal",
"-XX:CompileThreshold=1000",
"-XX:CompileThresholdScaling=0.0",
"-version"
},
{
"-XX:-TieredCompilation",
"-XX:+PrintFlagsFinal",
@ -107,6 +114,11 @@ public class CheckCompileThresholdScaling {
"intx CompileThreshold := 750 {pd product}",
"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}",
@ -295,21 +307,21 @@ public class CheckCompileThresholdScaling {
"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"
}