src/hotspot/share/jvmci/jvmci_globals.cpp
changeset 58821 5ec8aeda451e
parent 54982 b18c8301b8c2
--- a/src/hotspot/share/jvmci/jvmci_globals.cpp	Mon Oct 28 11:33:28 2019 -0400
+++ b/src/hotspot/share/jvmci/jvmci_globals.cpp	Mon Oct 28 16:06:08 2019 +0000
@@ -57,6 +57,7 @@
 
   JVMCI_FLAG_CHECKED(UseJVMCICompiler)
   JVMCI_FLAG_CHECKED(EnableJVMCI)
+  JVMCI_FLAG_CHECKED(EnableJVMCIProduct)
 
   CHECK_NOT_SET(BootstrapJVMCI,   UseJVMCICompiler)
   CHECK_NOT_SET(PrintBootstrap,   UseJVMCICompiler)
@@ -64,6 +65,14 @@
   CHECK_NOT_SET(JVMCIHostThreads, UseJVMCICompiler)
 
   if (UseJVMCICompiler) {
+    if (FLAG_IS_DEFAULT(UseJVMCINativeLibrary) && !UseJVMCINativeLibrary) {
+      char path[JVM_MAXPATHLEN];
+      if (os::dll_locate_lib(path, sizeof(path), Arguments::get_dll_dir(), JVMCI_SHARED_LIBRARY_NAME)) {
+        // If a JVMCI native library is present,
+        // we enable UseJVMCINativeLibrary by default.
+        FLAG_SET_DEFAULT(UseJVMCINativeLibrary, true);
+      }
+    }
     if (!FLAG_IS_DEFAULT(EnableJVMCI) && !EnableJVMCI) {
       jio_fprintf(defaultStream::error_stream(),
           "Improperly specified VM option UseJVMCICompiler: EnableJVMCI cannot be disabled\n");
@@ -122,6 +131,47 @@
   return true;
 }
 
+// Convert JVMCI flags from experimental to product
+bool JVMCIGlobals::enable_jvmci_product_mode(JVMFlag::Flags origin) {
+  const char *JVMCIFlags[] = {
+    "EnableJVMCI",
+    "EnableJVMCIProduct",
+    "UseJVMCICompiler",
+    "JVMCIPrintProperties",
+    "EagerJVMCI",
+    "JVMCIThreads",
+    "JVMCICounterSize",
+    "JVMCICountersExcludeCompiler",
+    "JVMCINMethodSizeLimit",
+    "JVMCILibPath",
+    "JVMCILibDumpJNIConfig",
+    "UseJVMCINativeLibrary",
+    NULL
+  };
+
+  for (int i = 0; JVMCIFlags[i] != NULL; i++) {
+    JVMFlag *jvmciFlag = (JVMFlag *)JVMFlag::find_declared_flag(JVMCIFlags[i]);
+    if (jvmciFlag == NULL) {
+      return false;
+    }
+    jvmciFlag->clear_experimental();
+    jvmciFlag->set_product();
+  }
+
+  bool value = true;
+  JVMFlag *jvmciEnableFlag = JVMFlag::find_flag("EnableJVMCIProduct");
+  if (JVMFlag::boolAtPut(jvmciEnableFlag, &value, origin) != JVMFlag::SUCCESS) {
+    return false;
+  }
+  value = true;
+  JVMFlag *jvmciCompilerFlag = JVMFlag::find_flag("UseJVMCICompiler");
+  if (JVMFlag::boolAtPut(jvmciCompilerFlag, &value, origin) != JVMFlag::SUCCESS) {
+    return false;
+  }
+
+  return true;
+}
+
 void JVMCIGlobals::check_jvmci_supported_gc() {
   if (EnableJVMCI) {
     // Check if selected GC is supported by JVMCI and Java compiler