14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24
25 package org.graalvm.compiler.hotspot.test;
26
27 import static java.util.Collections.singletonList;
28 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.Print;
29 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationBailoutAction;
30 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction;
31 import static org.graalvm.compiler.core.test.ReflectionOptionDescriptors.extractEntries;
32 import static org.graalvm.compiler.debug.MemUseTrackerKey.getCurrentThreadAllocatedBytes;
33 import static org.graalvm.compiler.hotspot.test.CompileTheWorld.Options.DESCRIPTORS;
34 import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier;
35
36 import java.io.Closeable;
37 import java.io.File;
38 import java.io.IOException;
39 import java.lang.annotation.Annotation;
40 import java.lang.reflect.Constructor;
41 import java.lang.reflect.Method;
42 import java.lang.reflect.Modifier;
43 import java.net.URI;
44 import java.net.URL;
45 import java.net.URLClassLoader;
46 import java.nio.file.FileSystem;
47 import java.nio.file.FileSystems;
48 import java.nio.file.FileVisitResult;
49 import java.nio.file.Files;
50 import java.nio.file.Path;
51 import java.nio.file.SimpleFileVisitor;
52 import java.nio.file.attribute.BasicFileAttributes;
53 import java.util.ArrayList;
54 import java.util.Arrays;
73 import java.util.stream.Collectors;
74
75 import jdk.internal.vm.compiler.collections.EconomicMap;
76 import jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap;
77 import org.graalvm.compiler.api.replacements.Snippet;
78 import org.graalvm.compiler.bytecode.Bytecodes;
79 import org.graalvm.compiler.core.CompilerThreadFactory;
80 import org.graalvm.compiler.core.test.ReflectionOptionDescriptors;
81 import org.graalvm.compiler.debug.DebugOptions;
82 import org.graalvm.compiler.debug.GraalError;
83 import org.graalvm.compiler.debug.MethodFilter;
84 import org.graalvm.compiler.debug.TTY;
85 import org.graalvm.compiler.hotspot.CompilationTask;
86 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
87 import org.graalvm.compiler.hotspot.HotSpotGraalCompiler;
88 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
89 import org.graalvm.compiler.options.OptionDescriptors;
90 import org.graalvm.compiler.options.OptionKey;
91 import org.graalvm.compiler.options.OptionValues;
92 import org.graalvm.compiler.options.OptionsParser;
93 import org.graalvm.compiler.serviceprovider.GraalServices;
94
95 import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
96 import jdk.vm.ci.hotspot.HotSpotCompilationRequest;
97 import jdk.vm.ci.hotspot.HotSpotInstalledCode;
98 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
99 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
100 import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
101 import jdk.vm.ci.meta.ConstantPool;
102 import jdk.vm.ci.meta.MetaAccessProvider;
103 import jdk.vm.ci.runtime.JVMCI;
104 import jdk.vm.ci.runtime.JVMCICompiler;
105
106 /**
107 * This class implements compile-the-world functionality with JVMCI.
108 */
109 public final class CompileTheWorld {
110
111 /**
112 * Magic token to denote that JDK classes are to be compiled. If
113 * {@link GraalServices#Java8OrEarlier}, then the classes in {@code rt.jar} are compiled.
114 * Otherwise the classes in the Java runtime image are compiled.
115 */
116 public static final String SUN_BOOT_CLASS_PATH = "sun.boot.class.path";
117
118 /**
119 * Magic token to denote the classes in the Java runtime image (i.e. in the {@code jrt:/} file
120 * system).
121 */
122 public static final String JRT_CLASS_PATH_ENTRY = "<jrt>";
123
124 /**
125 * @param options a space separated set of option value settings with each option setting in a
126 * {@code -Dgraal.<name>=<value>} format but without the leading {@code -Dgraal.}.
127 * Ignored if null.
128 */
129 public static EconomicMap<OptionKey<?>, Object> parseOptions(String options) {
130 if (options != null) {
131 EconomicMap<String, String> optionSettings = EconomicMap.create();
132 for (String optionSetting : options.split("\\s+|#")) {
133 OptionsParser.parseOptionSettingTo(optionSetting, optionSettings);
|
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24
25 package org.graalvm.compiler.hotspot.test;
26
27 import static java.util.Collections.singletonList;
28 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.Print;
29 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationBailoutAction;
30 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction;
31 import static org.graalvm.compiler.core.test.ReflectionOptionDescriptors.extractEntries;
32 import static org.graalvm.compiler.debug.MemUseTrackerKey.getCurrentThreadAllocatedBytes;
33 import static org.graalvm.compiler.hotspot.test.CompileTheWorld.Options.DESCRIPTORS;
34 import static org.graalvm.compiler.serviceprovider.JavaVersionUtil.Java8OrEarlier;
35
36 import java.io.Closeable;
37 import java.io.File;
38 import java.io.IOException;
39 import java.lang.annotation.Annotation;
40 import java.lang.reflect.Constructor;
41 import java.lang.reflect.Method;
42 import java.lang.reflect.Modifier;
43 import java.net.URI;
44 import java.net.URL;
45 import java.net.URLClassLoader;
46 import java.nio.file.FileSystem;
47 import java.nio.file.FileSystems;
48 import java.nio.file.FileVisitResult;
49 import java.nio.file.Files;
50 import java.nio.file.Path;
51 import java.nio.file.SimpleFileVisitor;
52 import java.nio.file.attribute.BasicFileAttributes;
53 import java.util.ArrayList;
54 import java.util.Arrays;
73 import java.util.stream.Collectors;
74
75 import jdk.internal.vm.compiler.collections.EconomicMap;
76 import jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap;
77 import org.graalvm.compiler.api.replacements.Snippet;
78 import org.graalvm.compiler.bytecode.Bytecodes;
79 import org.graalvm.compiler.core.CompilerThreadFactory;
80 import org.graalvm.compiler.core.test.ReflectionOptionDescriptors;
81 import org.graalvm.compiler.debug.DebugOptions;
82 import org.graalvm.compiler.debug.GraalError;
83 import org.graalvm.compiler.debug.MethodFilter;
84 import org.graalvm.compiler.debug.TTY;
85 import org.graalvm.compiler.hotspot.CompilationTask;
86 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
87 import org.graalvm.compiler.hotspot.HotSpotGraalCompiler;
88 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
89 import org.graalvm.compiler.options.OptionDescriptors;
90 import org.graalvm.compiler.options.OptionKey;
91 import org.graalvm.compiler.options.OptionValues;
92 import org.graalvm.compiler.options.OptionsParser;
93 import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
94
95 import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
96 import jdk.vm.ci.hotspot.HotSpotCompilationRequest;
97 import jdk.vm.ci.hotspot.HotSpotInstalledCode;
98 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
99 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
100 import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
101 import jdk.vm.ci.meta.ConstantPool;
102 import jdk.vm.ci.meta.MetaAccessProvider;
103 import jdk.vm.ci.runtime.JVMCI;
104 import jdk.vm.ci.runtime.JVMCICompiler;
105
106 /**
107 * This class implements compile-the-world functionality with JVMCI.
108 */
109 public final class CompileTheWorld {
110
111 /**
112 * Magic token to denote that JDK classes are to be compiled. If
113 * {@link JavaVersionUtil#Java8OrEarlier}, then the classes in {@code rt.jar} are compiled.
114 * Otherwise the classes in the Java runtime image are compiled.
115 */
116 public static final String SUN_BOOT_CLASS_PATH = "sun.boot.class.path";
117
118 /**
119 * Magic token to denote the classes in the Java runtime image (i.e. in the {@code jrt:/} file
120 * system).
121 */
122 public static final String JRT_CLASS_PATH_ENTRY = "<jrt>";
123
124 /**
125 * @param options a space separated set of option value settings with each option setting in a
126 * {@code -Dgraal.<name>=<value>} format but without the leading {@code -Dgraal.}.
127 * Ignored if null.
128 */
129 public static EconomicMap<OptionKey<?>, Object> parseOptions(String options) {
130 if (options != null) {
131 EconomicMap<String, String> optionSettings = EconomicMap.create();
132 for (String optionSetting : options.split("\\s+|#")) {
133 OptionsParser.parseOptionSettingTo(optionSetting, optionSettings);
|