diff src/share/vm/jvmci/jvmci_globals.cpp @ 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 740feb10d15a
children 1fece5f8307c
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;
+  }
+}