changeset 23775:d66c74920c43

move MethodProfileWidth to jvmci_globals.hpp (JDK-8163864) EnableJVMCI should only be required when its not implied by other flags (JDK-8161265)
author Doug Simon <doug.simon@oracle.com>
date Tue, 04 Oct 2016 21:58:49 +0200
parents 038908669316
children 450e0bafd83d
files src/cpu/sparc/vm/c1_globals_sparc.hpp src/cpu/sparc/vm/c2_globals_sparc.hpp src/cpu/sparc/vm/jvmci_globals_sparc.hpp src/cpu/x86/vm/c1_globals_x86.hpp src/cpu/x86/vm/c2_globals_x86.hpp src/share/vm/jvmci/jvmci_globals.cpp src/share/vm/jvmci/jvmci_globals.hpp src/share/vm/runtime/globals.hpp
diffstat 8 files changed, 60 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/sparc/vm/c1_globals_sparc.hpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/cpu/sparc/vm/c1_globals_sparc.hpp	Tue Oct 04 21:58:49 2016 +0200
@@ -57,7 +57,6 @@
 define_pd_global(uint64_t,MaxRAM,                    1ULL*G);
 define_pd_global(intx, InitialCodeCacheSize,         160*K);
 define_pd_global(intx, TypeProfileWidth,             0);
-define_pd_global(intx, MethodProfileWidth,           0);
 #endif // !TIERED
 
 define_pd_global(bool, UseTypeProfile,               false);
--- a/src/cpu/sparc/vm/c2_globals_sparc.hpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/cpu/sparc/vm/c2_globals_sparc.hpp	Tue Oct 04 21:58:49 2016 +0200
@@ -38,7 +38,6 @@
 define_pd_global(bool, ProfileTraps,                 true);
 define_pd_global(bool, UseOnStackReplacement,        true);
 define_pd_global(intx, TypeProfileWidth,             2   );
-define_pd_global(intx, MethodProfileWidth,           0   );
 #ifdef CC_INTERP
 define_pd_global(bool, ProfileInterpreter,           false);
 #else
--- a/src/cpu/sparc/vm/jvmci_globals_sparc.hpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/cpu/sparc/vm/jvmci_globals_sparc.hpp	Tue Oct 04 21:58:49 2016 +0200
@@ -57,7 +57,6 @@
 define_pd_global(uintx,CodeCacheMinBlockLength,      4);
 define_pd_global(uintx, CodeCacheMinimumUseSpace,    400*K);
 define_pd_global(intx, TypeProfileWidth,             8);
-define_pd_global(intx, MethodProfileWidth,           0);
 #endif
 
 define_pd_global(intx, MaxVectorSize,                8);
--- a/src/cpu/x86/vm/c1_globals_x86.hpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/cpu/x86/vm/c1_globals_x86.hpp	Tue Oct 04 21:58:49 2016 +0200
@@ -57,7 +57,6 @@
 define_pd_global(uint64_t,MaxRAM,                    1ULL*G);
 define_pd_global(bool, CICompileOSR,                 true );
 define_pd_global(intx, TypeProfileWidth,             0);
-define_pd_global(intx, MethodProfileWidth,           0);
 #endif // !TIERED
 define_pd_global(bool, UseTypeProfile,               false);
 define_pd_global(bool, RoundFPResults,               true );
--- a/src/cpu/x86/vm/c2_globals_x86.hpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/cpu/x86/vm/c2_globals_x86.hpp	Tue Oct 04 21:58:49 2016 +0200
@@ -39,7 +39,6 @@
 define_pd_global(bool, ProfileTraps,                 true);
 define_pd_global(bool, UseOnStackReplacement,        true);
 define_pd_global(intx, TypeProfileWidth,             2   );
-define_pd_global(intx, MethodProfileWidth,           0   );
 #ifdef CC_INTERP
 define_pd_global(bool, ProfileInterpreter,           false);
 #else
--- a/src/share/vm/jvmci/jvmci_globals.cpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/share/vm/jvmci/jvmci_globals.cpp	Tue Oct 04 21:58:49 2016 +0200
@@ -30,47 +30,73 @@
 JVMCI_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PD_DEVELOPER_FLAG, MATERIALIZE_PRODUCT_FLAG, MATERIALIZE_PD_PRODUCT_FLAG, MATERIALIZE_NOTPRODUCT_FLAG)
 
 bool JVMCIGlobals::check_jvmci_flags_are_consistent() {
-  bool status = true;
-  if (!EnableJVMCI) {
-#define JVMCI_CHECK3(type, name, doc)        JVMCI_CHECK_FLAG(name)
-#define JVMCI_CHECK4(type, name, value, doc) JVMCI_CHECK_FLAG(name)
-#define JVMCI_CHECK_FLAG(FLAG)                         \
-    if (strcmp(#FLAG, "EnableJVMCI") && !FLAG_IS_DEFAULT(FLAG)) {                                   \
-      jio_fprintf(defaultStream::error_stream(), "EnableJVMCI must be enabled to use VM option '%s'\n", #FLAG); \
-      status = false; \
+#ifndef PRODUCT
+#define APPLY_JVMCI_FLAGS(params3, params4) \
+  JVMCI_FLAGS(params4, params3, params4, params3, params4)
+#define JVMCI_DECLARE_CHECK4(type, name, value, doc) bool name##checked = false;
+#define JVMCI_DECLARE_CHECK3(type, name, doc)        bool name##checked = false;
+#define JVMCI_FLAG_CHECKED(name)                          name##checked = true;
+  APPLY_JVMCI_FLAGS(JVMCI_DECLARE_CHECK3, JVMCI_DECLARE_CHECK4)
+#else
+#define JVMCI_FLAG_CHECKED(name)
+#endif
+
+  // Checks that a given flag is not set if a given guard flag is false.
+#define CHECK_NOT_SET(FLAG, GUARD)                     \
+  JVMCI_FLAG_CHECKED(FLAG)                             \
+  if (!GUARD && !FLAG_IS_DEFAULT(FLAG)) {              \
+    jio_fprintf(defaultStream::error_stream(),         \
+        "Improperly specified VM option '%s': '%s' must be enabled\n", #FLAG, #GUARD); \
+    return false;                                      \
+  }
+
+  JVMCI_FLAG_CHECKED(UseJVMCICompiler)
+  JVMCI_FLAG_CHECKED(EnableJVMCI)
+
+  CHECK_NOT_SET(BootstrapJVMCI,   UseJVMCICompiler)
+  CHECK_NOT_SET(PrintBootstrap,   UseJVMCICompiler)
+  CHECK_NOT_SET(JVMCIThreads,     UseJVMCICompiler)
+  CHECK_NOT_SET(JVMCIHostThreads, UseJVMCICompiler)
+
+  if (UseJVMCICompiler) {
+    if (!FLAG_IS_DEFAULT(EnableJVMCI) && !EnableJVMCI) {
+      jio_fprintf(defaultStream::error_stream(),
+          "Improperly specified VM option UseJVMCICompiler: EnableJVMCI cannot be disabled\n");
+      return false;
     }
-    JVMCI_FLAGS(JVMCI_CHECK4, JVMCI_CHECK3, JVMCI_CHECK4, JVMCI_CHECK3, JVMCI_CHECK4)
+    FLAG_SET_DEFAULT(EnableJVMCI, true);
+  }
+  CHECK_NOT_SET(UseJVMCIClassLoader,          EnableJVMCI)
+  CHECK_NOT_SET(CodeInstallSafepointChecks,   EnableJVMCI)
+  CHECK_NOT_SET(JVMCITraceLevel,              EnableJVMCI)
+  CHECK_NOT_SET(JVMCICounterSize,             EnableJVMCI)
+  CHECK_NOT_SET(JVMCICountersExcludeCompiler, EnableJVMCI)
+  CHECK_NOT_SET(JVMCIUseFastLocking,          EnableJVMCI)
+  CHECK_NOT_SET(JVMCINMethodSizeLimit,        EnableJVMCI)
+  CHECK_NOT_SET(MethodProfileWidth,           EnableJVMCI)
+  CHECK_NOT_SET(TraceUncollectedSpeculations, EnableJVMCI)
+
+#ifndef PRODUCT
+#define JVMCI_CHECK4(type, name, value, doc) assert(name##checked, #name " flag not checked");
+#define JVMCI_CHECK3(type, name, doc)        assert(name##checked, #name " flag not checked");
+  // Ensures that all JVMCI flags are checked by this method.
+  APPLY_JVMCI_FLAGS(JVMCI_CHECK3, JVMCI_CHECK4)
+#undef APPLY_JVMCI_FLAGS
+#undef JVMCI_DECLARE_CHECK3
+#undef JVMCI_DECLARE_CHECK4
 #undef JVMCI_CHECK3
 #undef JVMCI_CHECK4
-#undef JVMCI_CHECK_FLAG
-  } else {
-#ifndef TIERED
-    // JVMCI is only usable as a jit compiler if the VM supports tiered compilation.
-#define JVMCI_CHECK_FLAG(FLAG)                         \
-    if (!FLAG_IS_DEFAULT(FLAG)) {                                   \
-      jio_fprintf(defaultStream::error_stream(), "VM option '%s' cannot be set in non-tiered VM\n", #FLAG); \
-      status = false; \
-    }
-    JVMCI_CHECK_FLAG(UseJVMCICompiler)
-    JVMCI_CHECK_FLAG(BootstrapJVMCI)
-    JVMCI_CHECK_FLAG(PrintBootstrap)
-    JVMCI_CHECK_FLAG(JVMCIThreads)
-    JVMCI_CHECK_FLAG(JVMCIHostThreads)
-    JVMCI_CHECK_FLAG(JVMCICountersExcludeCompiler)
-#undef JVMCI_CHECK_FLAG
+#undef JVMCI_FLAG_CHECKED
 #endif
-    if (BootstrapJVMCI && !UseJVMCICompiler) {
-      warning("BootstrapJVMCI has no effect if UseJVMCICompiler is disabled");
-    }
-  }
+#undef CHECK_NOT_SET
   if (UseJVMCICompiler) {
     if(JVMCIThreads < 1) {
       // Check the minimum number of JVMCI compiler threads
       jio_fprintf(defaultStream::error_stream(), "JVMCIThreads of " INTX_FORMAT " is invalid; must be at least 1\n", JVMCIThreads);
-      status = false;
+      return false;
     }
   }
-  return status;
+  return true;
 }
 
 void JVMCIGlobals::set_jvmci_specific_flags() {
--- a/src/share/vm/jvmci/jvmci_globals.hpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/share/vm/jvmci/jvmci_globals.hpp	Tue Oct 04 21:58:49 2016 +0200
@@ -94,6 +94,9 @@
   product(intx, JVMCINMethodSizeLimit, (80*K)*wordSize,                     \
           "Maximum size of a compiled method.")                             \
                                                                             \
+  product(intx, MethodProfileWidth, 0,                                      \
+          "Number of methods to record in call profile")                    \
+                                                                            \
   develop(bool, TraceUncollectedSpeculations, false,                        \
           "Print message when a failed speculation was not collected")
 
--- a/src/share/vm/runtime/globals.hpp	Mon Oct 03 17:54:28 2016 +0000
+++ b/src/share/vm/runtime/globals.hpp	Tue Oct 04 21:58:49 2016 +0200
@@ -3128,9 +3128,6 @@
   product_pd(intx, TypeProfileWidth,                                        \
           "Number of receiver types to record in call/cast profile")        \
                                                                             \
-  product_pd(intx, MethodProfileWidth,                                      \
-          "number of methods to record in call profile")                    \
-                                                                            \
   develop(intx, BciProfileWidth,      2,                                    \
           "Number of return bci's to record in ret profile")                \
                                                                             \