changeset 23760:655fd63024d0

move jvmci flag handling to JVMCIGlobals
author David Leopoldseder <david.d.leopoldseder@oracle.com>
date Fri, 23 Sep 2016 16:33:12 +0200
parents 561a3f3a9b99
children 1fece5f8307c
files src/share/vm/jvmci/jvmci_globals.cpp src/share/vm/jvmci/jvmci_globals.hpp src/share/vm/runtime/arguments.cpp src/share/vm/runtime/arguments.hpp
diffstat 4 files changed, 85 insertions(+), 74 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/jvmci/jvmci_globals.cpp	Thu Sep 22 13:15:59 2016 -0700
+++ b/src/share/vm/jvmci/jvmci_globals.cpp	Fri Sep 23 16:33:12 2016 +0200
@@ -24,5 +24,78 @@
 
 #include "precompiled.hpp"
 #include "jvmci/jvmci_globals.hpp"
+#include "utilities/defaultStream.hpp"
+#include "runtime/globals_extension.hpp"
 
 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; \
+    }
+    JVMCI_FLAGS(JVMCI_CHECK4, JVMCI_CHECK3, JVMCI_CHECK4, JVMCI_CHECK3, JVMCI_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
+#endif
+    if (BootstrapJVMCI && !UseJVMCICompiler) {
+      warning("BootstrapJVMCI has no effect if UseJVMCICompiler is disabled");
+    }
+  }
+  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");
+      status = false;
+    }
+  }
+  return status;
+}
+
+void JVMCIGlobals::set_jvmci_specific_flags() {
+  if (UseJVMCICompiler) {
+    if (FLAG_IS_DEFAULT(TypeProfileWidth)) {
+      FLAG_SET_DEFAULT(TypeProfileWidth, 8);
+    }
+    if (FLAG_IS_DEFAULT(OnStackReplacePercentage)) {
+      FLAG_SET_DEFAULT(OnStackReplacePercentage, 933);
+    }
+    if (FLAG_IS_DEFAULT(ReservedCodeCacheSize)) {
+      FLAG_SET_DEFAULT(ReservedCodeCacheSize, 64*M);
+    }
+    if (FLAG_IS_DEFAULT(InitialCodeCacheSize)) {
+      FLAG_SET_DEFAULT(InitialCodeCacheSize, 16*M);
+    }
+    if (FLAG_IS_DEFAULT(MetaspaceSize)) {
+      FLAG_SET_DEFAULT(MetaspaceSize, 12*M);
+    }
+    if (FLAG_IS_DEFAULT(NewSizeThreadIncrease)) {
+      FLAG_SET_DEFAULT(NewSizeThreadIncrease, 4*K);
+    }
+  }
+  if (!ScavengeRootsInCode) {
+    warning("forcing ScavengeRootsInCode non-zero because JVMCI is enabled");
+    ScavengeRootsInCode = 1;
+  }
+}
--- a/src/share/vm/jvmci/jvmci_globals.hpp	Thu Sep 22 13:15:59 2016 -0700
+++ b/src/share/vm/jvmci/jvmci_globals.hpp	Fri Sep 23 16:33:12 2016 +0200
@@ -102,4 +102,14 @@
 
 JVMCI_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_NOTPRODUCT_FLAG)
 
+
+class JVMCIGlobals {
+ public:
+  static void set_jvmci_specific_flags();
+  // Return true if jvmci flags are consistent. If not consistent,
+  // an error message describing the inconsistency is printed before
+  // returning false.
+  static bool check_jvmci_flags_are_consistent();
+};
+
 #endif // SHARE_VM_JVMCI_JVMCI_GLOBALS_HPP
--- a/src/share/vm/runtime/arguments.cpp	Thu Sep 22 13:15:59 2016 -0700
+++ b/src/share/vm/runtime/arguments.cpp	Fri Sep 23 16:33:12 2016 +0200
@@ -1583,30 +1583,6 @@
 }
 
 
-#if INCLUDE_JVMCI
-void Arguments::set_jvmci_specific_flags() {
-  if (UseJVMCICompiler) {
-    if (FLAG_IS_DEFAULT(TypeProfileWidth)) {
-      FLAG_SET_DEFAULT(TypeProfileWidth, 8);
-    }
-    if (FLAG_IS_DEFAULT(OnStackReplacePercentage)) {
-      FLAG_SET_DEFAULT(OnStackReplacePercentage, 933);
-    }
-    if (FLAG_IS_DEFAULT(ReservedCodeCacheSize)) {
-      FLAG_SET_DEFAULT(ReservedCodeCacheSize, 64*M);
-    }
-    if (FLAG_IS_DEFAULT(InitialCodeCacheSize)) {
-      FLAG_SET_DEFAULT(InitialCodeCacheSize, 16*M);
-    }
-    if (FLAG_IS_DEFAULT(MetaspaceSize)) {
-      FLAG_SET_DEFAULT(MetaspaceSize, 12*M);
-    }
-    if (FLAG_IS_DEFAULT(NewSizeThreadIncrease)) {
-      FLAG_SET_DEFAULT(NewSizeThreadIncrease, 4*K);
-    }
-  }
-}
-#endif
 
 void Arguments::set_ergonomics_flags() {
   select_gc();
@@ -2463,42 +2439,7 @@
 #endif
   }
 #if INCLUDE_JVMCI
-  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; \
-    }
-    JVMCI_FLAGS(JVMCI_CHECK4, JVMCI_CHECK3, JVMCI_CHECK4, JVMCI_CHECK3, JVMCI_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
-#endif
-    if (BootstrapJVMCI && !UseJVMCICompiler) {
-      warning("BootstrapJVMCI has no effect if UseJVMCICompiler is disabled");
-    }
-    if (!ScavengeRootsInCode) {
-      warning("forcing ScavengeRootsInCode non-zero because JVMCI is enabled");
-      ScavengeRootsInCode = 1;
-    }
-  }
+  status = status && JVMCIGlobals::check_jvmci_flags_are_consistent();
 #endif
 
   // Need to limit the extent of the padding to reasonable size.
@@ -2563,14 +2504,6 @@
   assert(min_number_of_compiler_threads <= CI_COMPILER_COUNT, "minimum should be less or equal default number");
   // Check the minimum number of compiler threads
   status &=verify_min_value(CICompilerCount, min_number_of_compiler_threads, "CICompilerCount");
-
-#if INCLUDE_JVMCI
-  if (UseJVMCICompiler) {
-    // Check the minimum number of JVMCI compiler threads
-    status &=verify_min_value(JVMCIThreads, 1, "JVMCIThreads");
-  }
-#endif
-
   return status;
 }
 
@@ -4123,7 +4056,7 @@
 
 #if INCLUDE_JVMCI
   // Set flags specific to JVMCI. This is done prior to computing NMethodSweepFraction.
-  set_jvmci_specific_flags();
+  JVMCIGlobals::set_jvmci_specific_flags();
 #endif
 
   set_shared_spaces_flags();
--- a/src/share/vm/runtime/arguments.hpp	Thu Sep 22 13:15:59 2016 -0700
+++ b/src/share/vm/runtime/arguments.hpp	Fri Sep 23 16:33:12 2016 +0200
@@ -457,11 +457,6 @@
   static inline bool gc_selected(); // whether a gc has been selected
   static void select_gc_ergonomically();
 
-
-#if INCLUDE_JVMCI
-  static void set_jvmci_specific_flags();
-#endif
-
   // Verifies that the given value will fit as a MinHeapFreeRatio. If not, an error
   // message is returned in the provided buffer.
   static bool verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_heap_free_ratio);