Mercurial > hg > truffle
annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java @ 21556:48c1ebd24120
renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 27 May 2015 00:36:16 +0200 |
parents | b1530a6cce8c |
children | 47bebae7454f |
rev | line source |
---|---|
9108 | 1 /* |
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
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 package com.oracle.graal.hotspot; | |
24 | |
21556
48c1ebd24120
renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21554
diff
changeset
|
25 import com.oracle.jvmci.meta.TriState; |
48c1ebd24120
renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21554
diff
changeset
|
26 import com.oracle.jvmci.meta.DefaultProfilingInfo; |
48c1ebd24120
renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21554
diff
changeset
|
27 import com.oracle.jvmci.meta.ConstantPool; |
48c1ebd24120
renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21554
diff
changeset
|
28 import com.oracle.jvmci.meta.MetaAccessProvider; |
48c1ebd24120
renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21554
diff
changeset
|
29 import com.oracle.jvmci.meta.ProfilingInfo; |
15259
d90e5c22ba55
Move GraalOptions to graal.compiler.common.
Josef Eisl <josef.eisl@jku.at>
parents:
15193
diff
changeset
|
30 import static com.oracle.graal.compiler.common.GraalOptions.*; |
9289
261a43921c5e
rename: HotSpotGraalRuntime.getInstance() -> graalRuntime()
Doug Simon <doug.simon@oracle.com>
parents:
9108
diff
changeset
|
31 import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
32 import static com.oracle.graal.nodes.StructuredGraph.*; |
21554
b1530a6cce8c
renamed com.oracle.graal.[debug|options|hotspotvmconfig]* modules to com.oracle.jvmci.[debug|options|hotspotvmconfig]* modules (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21551
diff
changeset
|
33 import static com.oracle.jvmci.debug.internal.MemUseTrackerImpl.*; |
9289
261a43921c5e
rename: HotSpotGraalRuntime.getInstance() -> graalRuntime()
Doug Simon <doug.simon@oracle.com>
parents:
9108
diff
changeset
|
34 |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
10672
diff
changeset
|
35 import java.io.*; |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
10672
diff
changeset
|
36 import java.lang.reflect.*; |
9108 | 37 import java.net.*; |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
10672
diff
changeset
|
38 import java.util.*; |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
39 import java.util.concurrent.*; |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
40 import java.util.concurrent.atomic.*; |
9108 | 41 import java.util.jar.*; |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
42 import java.util.stream.*; |
9108 | 43 |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
10672
diff
changeset
|
44 import com.oracle.graal.bytecode.*; |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
45 import com.oracle.graal.compiler.*; |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
46 import com.oracle.graal.compiler.CompilerThreadFactory.DebugConfigAccess; |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
47 import com.oracle.graal.printer.*; |
9108 | 48 import com.oracle.graal.replacements.*; |
21543
93c50cefb9e8
moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
49 import com.oracle.jvmci.common.*; |
21554
b1530a6cce8c
renamed com.oracle.graal.[debug|options|hotspotvmconfig]* modules to com.oracle.jvmci.[debug|options|hotspotvmconfig]* modules (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21551
diff
changeset
|
50 import com.oracle.jvmci.debug.*; |
b1530a6cce8c
renamed com.oracle.graal.[debug|options|hotspotvmconfig]* modules to com.oracle.jvmci.[debug|options|hotspotvmconfig]* modules (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21551
diff
changeset
|
51 import com.oracle.jvmci.debug.internal.*; |
21551
5324104ac4f3
moved com.oracle.graal.hotspot.jvmci classes to com.oracle.jvmci.hotspot module (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21543
diff
changeset
|
52 import com.oracle.jvmci.hotspot.*; |
21554
b1530a6cce8c
renamed com.oracle.graal.[debug|options|hotspotvmconfig]* modules to com.oracle.jvmci.[debug|options|hotspotvmconfig]* modules (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21551
diff
changeset
|
53 import com.oracle.jvmci.options.*; |
b1530a6cce8c
renamed com.oracle.graal.[debug|options|hotspotvmconfig]* modules to com.oracle.jvmci.[debug|options|hotspotvmconfig]* modules (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21551
diff
changeset
|
54 import com.oracle.jvmci.options.OptionUtils.OptionConsumer; |
b1530a6cce8c
renamed com.oracle.graal.[debug|options|hotspotvmconfig]* modules to com.oracle.jvmci.[debug|options|hotspotvmconfig]* modules (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21551
diff
changeset
|
55 import com.oracle.jvmci.options.OptionValue.OverrideScope; |
9108 | 56 |
57 /** | |
58 * This class implements compile-the-world functionality in Graal. | |
59 */ | |
60 public final class CompileTheWorld { | |
61 | |
13361
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
62 /** |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
63 * Magic token to trigger reading files from the boot class path. |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
64 */ |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
65 public static final String SUN_BOOT_CLASS_PATH = "sun.boot.class.path"; |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
66 |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
67 public static class Options { |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
68 // @formatter:off |
18674
ecb9d0cedbab
First draft of option classification.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18525
diff
changeset
|
69 @Option(help = "Compile all methods in all classes on given class path", type = OptionType.Debug) |
13361
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
70 public static final OptionValue<String> CompileTheWorldClasspath = new OptionValue<>(SUN_BOOT_CLASS_PATH); |
18674
ecb9d0cedbab
First draft of option classification.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18525
diff
changeset
|
71 @Option(help = "Verbose CompileTheWorld operation", type = OptionType.Debug) |
13361
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
72 public static final OptionValue<Boolean> CompileTheWorldVerbose = new OptionValue<>(true); |
18674
ecb9d0cedbab
First draft of option classification.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18525
diff
changeset
|
73 @Option(help = "The number of CompileTheWorld iterations to perform", type = OptionType.Debug) |
13361
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
74 public static final OptionValue<Integer> CompileTheWorldIterations = new OptionValue<>(1); |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
75 @Option(help = "Only compile methods matching this filter", type = OptionType.Debug) |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
76 public static final OptionValue<String> CompileTheWorldMethodFilter = new OptionValue<>(null); |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
77 @Option(help = "Exclude methods matching this filter from compilation", type = OptionType.Debug) |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
78 public static final OptionValue<String> CompileTheWorldExcludeMethodFilter = new OptionValue<>(null); |
18674
ecb9d0cedbab
First draft of option classification.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18525
diff
changeset
|
79 @Option(help = "First class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug) |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
80 public static final OptionValue<Integer> CompileTheWorldStartAt = new OptionValue<>(1); |
18674
ecb9d0cedbab
First draft of option classification.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18525
diff
changeset
|
81 @Option(help = "Last class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug) |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
82 public static final OptionValue<Integer> CompileTheWorldStopAt = new OptionValue<>(Integer.MAX_VALUE); |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
83 @Option(help = "Option value overrides to use during compile the world. For example, " + |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
84 "to disable inlining and partial escape analysis specify '-PartialEscapeAnalysis -Inline'. " + |
18674
ecb9d0cedbab
First draft of option classification.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18525
diff
changeset
|
85 "The format for each option is the same as on the command line just without the '-G:' prefix.", type = OptionType.Debug) |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
86 public static final OptionValue<String> CompileTheWorldConfig = new OptionValue<>(null); |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
87 |
20007
83539d28f95c
Fixed help text and add CompileTheWorldThreads flag
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19968
diff
changeset
|
88 @Option(help = "Run CTW using as many threads as there are processors on the system", type = OptionType.Debug) |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
89 public static final OptionValue<Boolean> CompileTheWorldMultiThreaded = new OptionValue<>(false); |
20007
83539d28f95c
Fixed help text and add CompileTheWorldThreads flag
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19968
diff
changeset
|
90 @Option(help = "Number of threads to use for multithreaded CTW. Defaults to Runtime.getRuntime().availableProcessors()", type = OptionType.Debug) |
83539d28f95c
Fixed help text and add CompileTheWorldThreads flag
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19968
diff
changeset
|
91 public static final OptionValue<Integer> CompileTheWorldThreads = new OptionValue<>(0); |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
92 // @formatter:on |
13361
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
93 |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
94 /** |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
95 * Overrides {@link #CompileTheWorldStartAt} and {@link #CompileTheWorldStopAt} from |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
96 * {@code -XX} HotSpot options of the same name if the latter have non-default values. |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
97 */ |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
98 static void overrideWithNativeOptions(HotSpotVMConfig c) { |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
99 if (c.compileTheWorldStartAt != 1) { |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
100 CompileTheWorldStartAt.setValue(c.compileTheWorldStartAt); |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
101 } |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
102 if (c.compileTheWorldStopAt != Integer.MAX_VALUE) { |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
103 CompileTheWorldStopAt.setValue(c.compileTheWorldStopAt); |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
104 } |
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
105 } |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
106 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
107 |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
108 /** |
13371
4db09b7304da
read DontCompileHugeMethods and HugeMethodLimit from VM
Doug Simon <doug.simon@oracle.com>
parents:
13366
diff
changeset
|
109 * A mechanism for overriding Graal options that affect compilation. A {@link Config} object |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
110 * should be used in a try-with-resources statement to ensure overriding of options is scoped |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
111 * properly. For example: |
14906 | 112 * |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
113 * <pre> |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
114 * Config config = ...; |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
115 * try (AutoCloseable s = config == null ? null : config.apply()) { |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
116 * // perform a Graal compilation |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
117 * } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
118 * </pre> |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
119 */ |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
120 @SuppressWarnings("serial") |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
121 public static class Config extends HashMap<OptionValue<?>, Object> implements OptionConsumer { |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
122 /** |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
123 * Creates a {@link Config} object by parsing a set of space separated override options. |
14906 | 124 * |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
125 * @param options a space separated set of option value settings with each option setting in |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
126 * a format compatible with |
13365
bfc5acea3c12
consolidated mechanism for overriding options in CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
13362
diff
changeset
|
127 * {@link HotSpotOptions#parseOption(String, OptionConsumer)}. Ignored if null. |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
128 */ |
13361
5a6c617a66ac
added -G:+CompileTheWorldVerbose and -G:CompileTheWorldIterations options
Doug Simon <doug.simon@oracle.com>
parents:
13353
diff
changeset
|
129 public Config(String options) { |
13365
bfc5acea3c12
consolidated mechanism for overriding options in CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
13362
diff
changeset
|
130 if (options != null) { |
bfc5acea3c12
consolidated mechanism for overriding options in CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
13362
diff
changeset
|
131 for (String option : options.split("\\s+")) { |
bfc5acea3c12
consolidated mechanism for overriding options in CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
13362
diff
changeset
|
132 if (!HotSpotOptions.parseOption(option, this)) { |
21543
93c50cefb9e8
moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
133 throw new JVMCIError("Invalid option specified: %s", option); |
13365
bfc5acea3c12
consolidated mechanism for overriding options in CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
13362
diff
changeset
|
134 } |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
135 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
136 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
137 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
138 |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
139 /** |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
140 * Applies the overrides represented by this object. The overrides are in effect until |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
141 * {@link OverrideScope#close()} is called on the returned object. |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
142 */ |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
143 OverrideScope apply() { |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
144 return OptionValue.override(this); |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
145 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
146 |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
147 public void set(OptionDescriptor desc, Object value) { |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
148 put(desc.getOptionValue(), value); |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
149 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
150 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
151 |
9108 | 152 // Some runtime instances we need. |
18525
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18373
diff
changeset
|
153 private final HotSpotGraalRuntimeProvider runtime = runtime(); |
9108 | 154 |
14906 | 155 /** List of Zip/Jar files to compile (see {@link Options#CompileTheWorldClasspath}). */ |
9108 | 156 private final String files; |
157 | |
14906 | 158 /** Class index to start compilation at (see {@link Options#CompileTheWorldStartAt}). */ |
9108 | 159 private final int startAt; |
160 | |
14906 | 161 /** Class index to stop compilation at (see {@link Options#CompileTheWorldStopAt}). */ |
9108 | 162 private final int stopAt; |
163 | |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
164 /** Only compile methods matching one of the filters in this array if the array is non-null. */ |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
165 private final MethodFilter[] methodFilters; |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
166 |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
167 /** Exclude methods matching one of the filters in this array if the array is non-null. */ |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
168 private final MethodFilter[] excludeMethodFilters; |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
169 |
9108 | 170 // Counters |
171 private int classFileCounter = 0; | |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
172 private AtomicLong compiledMethodsCounter = new AtomicLong(); |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
173 private AtomicLong compileTime = new AtomicLong(); |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
174 private AtomicLong memoryUsed = new AtomicLong(); |
9108 | 175 |
13200
ebdc13d9845d
replaced use of graal.compileTheWorldTest.log system property with a field to control CTW verbosity which is true by default but is set to false by CTW unit test
Doug Simon <doug.simon@oracle.com>
parents:
13199
diff
changeset
|
176 private boolean verbose; |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
177 private final Config config; |
13200
ebdc13d9845d
replaced use of graal.compileTheWorldTest.log system property with a field to control CTW verbosity which is true by default but is set to false by CTW unit test
Doug Simon <doug.simon@oracle.com>
parents:
13199
diff
changeset
|
178 |
20014
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
179 /** |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
180 * Signal that the threads should start compiling in multithreaded mode. |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
181 */ |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
182 private boolean running; |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
183 |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
184 private ThreadPoolExecutor threadPool; |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
185 |
9108 | 186 /** |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
187 * Creates a compile-the-world instance. |
14906 | 188 * |
9108 | 189 * @param files {@link File#pathSeparator} separated list of Zip/Jar files to compile |
190 * @param startAt index of the class file to start compilation at | |
191 * @param stopAt index of the class file to stop compilation at | |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
192 * @param methodFilters |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
193 * @param excludeMethodFilters |
9108 | 194 */ |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
195 public CompileTheWorld(String files, Config config, int startAt, int stopAt, String methodFilters, String excludeMethodFilters, boolean verbose) { |
9108 | 196 this.files = files; |
197 this.startAt = startAt; | |
198 this.stopAt = stopAt; | |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
199 this.methodFilters = methodFilters == null || methodFilters.isEmpty() ? null : MethodFilter.parse(methodFilters); |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
200 this.excludeMethodFilters = excludeMethodFilters == null || excludeMethodFilters.isEmpty() ? null : MethodFilter.parse(excludeMethodFilters); |
13200
ebdc13d9845d
replaced use of graal.compileTheWorldTest.log system property with a field to control CTW verbosity which is true by default but is set to false by CTW unit test
Doug Simon <doug.simon@oracle.com>
parents:
13199
diff
changeset
|
201 this.verbose = verbose; |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
202 this.config = config; |
9108 | 203 |
13113 | 204 // We don't want the VM to exit when a method fails to compile... |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
205 config.putIfAbsent(ExitVMOnException, false); |
13113 | 206 |
207 // ...but we want to see exceptions. | |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
208 config.putIfAbsent(PrintBailout, true); |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
209 config.putIfAbsent(PrintStackTraceOnException, true); |
9108 | 210 } |
211 | |
212 /** | |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
213 * Compiles all methods in all classes in the Zip/Jar archive files in |
14906 | 214 * {@link Options#CompileTheWorldClasspath}. If {@link Options#CompileTheWorldClasspath} |
215 * contains the magic token {@link #SUN_BOOT_CLASS_PATH} passed up from HotSpot we take the | |
216 * files from the boot class path. | |
9108 | 217 */ |
218 public void compile() throws Throwable { | |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
219 // By default only report statistics for the CTW threads themselves |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
220 if (GraalDebugConfig.DebugValueThreadFilter.hasInitialValue()) { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
221 GraalDebugConfig.DebugValueThreadFilter.setValue("^CompileTheWorld"); |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
222 } |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
223 |
9108 | 224 if (SUN_BOOT_CLASS_PATH.equals(files)) { |
225 final String[] entries = System.getProperty(SUN_BOOT_CLASS_PATH).split(File.pathSeparator); | |
226 String bcpFiles = ""; | |
227 for (int i = 0; i < entries.length; i++) { | |
228 final String entry = entries[i]; | |
229 | |
230 // We stop at rt.jar, unless it is the first boot class path entry. | |
231 if (entry.endsWith("rt.jar") && (i > 0)) { | |
232 break; | |
233 } | |
234 if (i > 0) { | |
235 bcpFiles += File.pathSeparator; | |
236 } | |
237 bcpFiles += entry; | |
238 } | |
239 compile(bcpFiles); | |
240 } else { | |
241 compile(files); | |
242 } | |
243 } | |
244 | |
13200
ebdc13d9845d
replaced use of graal.compileTheWorldTest.log system property with a field to control CTW verbosity which is true by default but is set to false by CTW unit test
Doug Simon <doug.simon@oracle.com>
parents:
13199
diff
changeset
|
245 public void println() { |
13199
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
246 println(""); |
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
247 } |
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
248 |
13200
ebdc13d9845d
replaced use of graal.compileTheWorldTest.log system property with a field to control CTW verbosity which is true by default but is set to false by CTW unit test
Doug Simon <doug.simon@oracle.com>
parents:
13199
diff
changeset
|
249 public void println(String format, Object... args) { |
13199
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
250 println(String.format(format, args)); |
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
251 } |
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
252 |
13200
ebdc13d9845d
replaced use of graal.compileTheWorldTest.log system property with a field to control CTW verbosity which is true by default but is set to false by CTW unit test
Doug Simon <doug.simon@oracle.com>
parents:
13199
diff
changeset
|
253 public void println(String s) { |
ebdc13d9845d
replaced use of graal.compileTheWorldTest.log system property with a field to control CTW verbosity which is true by default but is set to false by CTW unit test
Doug Simon <doug.simon@oracle.com>
parents:
13199
diff
changeset
|
254 if (verbose) { |
13199
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
255 TTY.println(s); |
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
256 } |
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
257 } |
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
258 |
9108 | 259 /** |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
260 * Compiles all methods in all classes in the Zip/Jar files passed. |
14906 | 261 * |
9108 | 262 * @param fileList {@link File#pathSeparator} separated list of Zip/Jar files to compile |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
263 * @throws IOException |
9108 | 264 */ |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
265 private void compile(String fileList) throws IOException { |
9108 | 266 final String[] entries = fileList.split(File.pathSeparator); |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
267 long start = System.currentTimeMillis(); |
9108 | 268 |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
269 CompilerThreadFactory factory = new CompilerThreadFactory("CompileTheWorld", new DebugConfigAccess() { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
270 public GraalDebugConfig getDebugConfig() { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
271 if (Debug.isEnabled() && DebugScope.getConfig() == null) { |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
272 return DebugEnvironment.initialize(System.out); |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
273 } |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
274 return null; |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
275 } |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
276 }); |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
277 |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
278 /* |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
279 * Always use a thread pool, even for single threaded mode since it simplifies the use of |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
280 * DebugValueThreadFilter to filter on the thread names. |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
281 */ |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
282 int threadCount = 1; |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
283 if (Options.CompileTheWorldMultiThreaded.getValue()) { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
284 threadCount = Options.CompileTheWorldThreads.getValue(); |
20007
83539d28f95c
Fixed help text and add CompileTheWorldThreads flag
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19968
diff
changeset
|
285 if (threadCount == 0) { |
83539d28f95c
Fixed help text and add CompileTheWorldThreads flag
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19968
diff
changeset
|
286 threadCount = Runtime.getRuntime().availableProcessors(); |
83539d28f95c
Fixed help text and add CompileTheWorldThreads flag
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19968
diff
changeset
|
287 } |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
288 } else { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
289 running = true; |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
290 } |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
291 threadPool = new ThreadPoolExecutor(threadCount, threadCount, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), factory); |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
292 |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
293 try (OverrideScope s = config.apply()) { |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
294 for (int i = 0; i < entries.length; i++) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
295 final String entry = entries[i]; |
9108 | 296 |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
297 // For now we only compile all methods in all classes in zip/jar files. |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
298 if (!entry.endsWith(".zip") && !entry.endsWith(".jar")) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
299 println("CompileTheWorld : Skipped classes in " + entry); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
300 println(); |
9108 | 301 continue; |
302 } | |
303 | |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
304 if (methodFilters == null || methodFilters.length == 0) { |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
305 println("CompileTheWorld : Compiling all classes in " + entry); |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
306 } else { |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
307 String include = Arrays.asList(methodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", ")); |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
308 println("CompileTheWorld : Compiling all methods in " + entry + " matching one of the following filters: " + include); |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
309 } |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
310 if (excludeMethodFilters != null && excludeMethodFilters.length > 0) { |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
311 String exclude = Arrays.asList(excludeMethodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", ")); |
21283 | 312 println("CompileTheWorld : Excluding all methods matching one of the following filters: " + exclude); |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
313 } |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
314 println(); |
9108 | 315 |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
316 URL url = new URL("jar", "", "file:" + entry + "!/"); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
317 ClassLoader loader = new URLClassLoader(new URL[]{url}); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
318 |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
319 JarFile jarFile = new JarFile(entry); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
320 Enumeration<JarEntry> e = jarFile.entries(); |
9108 | 321 |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
322 while (e.hasMoreElements()) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
323 JarEntry je = e.nextElement(); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
324 if (je.isDirectory() || !je.getName().endsWith(".class")) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
325 continue; |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
326 } |
9108 | 327 |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
328 // Are we done? |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
329 if (classFileCounter >= stopAt) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
330 break; |
9108 | 331 } |
332 | |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
333 String className = je.getName().substring(0, je.getName().length() - ".class".length()); |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
334 String dottedClassName = className.replace('/', '.'); |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
335 classFileCounter++; |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
336 |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
337 if (methodFilters != null && !MethodFilter.matchesClassName(methodFilters, dottedClassName)) { |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
338 continue; |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
339 } |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
340 if (excludeMethodFilters != null && MethodFilter.matchesClassName(excludeMethodFilters, dottedClassName)) { |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
341 continue; |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
342 } |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
343 |
20831
5a97208e1824
CTW: Black-list some package to avoid linking problems when using an Oracle JDK >= 8u40
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
20031
diff
changeset
|
344 if (dottedClassName.startsWith("jdk.management.") || dottedClassName.startsWith("jdk.internal.cmm.*")) { |
5a97208e1824
CTW: Black-list some package to avoid linking problems when using an Oracle JDK >= 8u40
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
20031
diff
changeset
|
345 continue; |
5a97208e1824
CTW: Black-list some package to avoid linking problems when using an Oracle JDK >= 8u40
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
20031
diff
changeset
|
346 } |
5a97208e1824
CTW: Black-list some package to avoid linking problems when using an Oracle JDK >= 8u40
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
20031
diff
changeset
|
347 |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
348 try { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
349 // Load and initialize class |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
350 Class<?> javaClass = Class.forName(dottedClassName, true, loader); |
9108 | 351 |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
352 // Pre-load all classes in the constant pool. |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
353 try { |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18167
diff
changeset
|
354 HotSpotResolvedObjectType objectType = HotSpotResolvedObjectTypeImpl.fromObjectClass(javaClass); |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
355 ConstantPool constantPool = objectType.constantPool(); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
356 for (int cpi = 1; cpi < constantPool.length(); cpi++) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
357 constantPool.loadReferencedType(cpi, Bytecodes.LDC); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
358 } |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
359 } catch (Throwable t) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
360 // If something went wrong during pre-loading we just ignore it. |
17395
c8bd29658465
be more verbose about class resolution during CTW
Doug Simon <doug.simon@oracle.com>
parents:
17377
diff
changeset
|
361 println("Preloading failed for (%d) %s: %s", classFileCounter, className, t); |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
362 } |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
363 |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
364 // Are we compiling this class? |
18301
0f41072d8bbc
moved use of HotSpotMetaAccessProvider to locations on the "local" side of remote compilation
Doug Simon <doug.simon@oracle.com>
parents:
18223
diff
changeset
|
365 MetaAccessProvider metaAccess = runtime.getHostProviders().getMetaAccess(); |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
366 if (classFileCounter >= startAt) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
367 println("CompileTheWorld (%d) : %s", classFileCounter, className); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
368 |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
369 // Compile each constructor/method in the class. |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
370 for (Constructor<?> constructor : javaClass.getDeclaredConstructors()) { |
18373
91283d4a1218
Use the base class Executable (introduced in Java 8) to unify the handling of Method and Constructor in MetaAccessProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
18301
diff
changeset
|
371 HotSpotResolvedJavaMethod javaMethod = (HotSpotResolvedJavaMethod) metaAccess.lookupJavaMethod(constructor); |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
372 if (canBeCompiled(javaMethod, constructor.getModifiers())) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
373 compileMethod(javaMethod); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
374 } |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
375 } |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
376 for (Method method : javaClass.getDeclaredMethods()) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
377 HotSpotResolvedJavaMethod javaMethod = (HotSpotResolvedJavaMethod) metaAccess.lookupJavaMethod(method); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
378 if (canBeCompiled(javaMethod, method.getModifiers())) { |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
379 compileMethod(javaMethod); |
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
380 } |
9108 | 381 } |
382 } | |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
383 } catch (Throwable t) { |
21023
3ceda1f37dcc
[SPARC] Remove redundant compare type (kind) for CMOVE
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20967
diff
changeset
|
384 println("CompileTheWorld (%d) : Skipping %s %s", classFileCounter, className, t.toString()); |
3ceda1f37dcc
[SPARC] Remove redundant compare type (kind) for CMOVE
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20967
diff
changeset
|
385 t.printStackTrace(); |
9108 | 386 } |
387 } | |
16872
ce8ac92efb14
Don't recreate suites on every CTW compile.
Roland Schatz <roland.schatz@oracle.com>
parents:
16831
diff
changeset
|
388 jarFile.close(); |
9108 | 389 } |
390 } | |
391 | |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
392 if (!running) { |
20014
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
393 startThreads(); |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
394 } |
21139
a17dc2584e81
Fix time reporting in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21023
diff
changeset
|
395 int wakeups = 0; |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
396 while (threadPool.getCompletedTaskCount() != threadPool.getTaskCount()) { |
21139
a17dc2584e81
Fix time reporting in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21023
diff
changeset
|
397 if (wakeups % 15 == 0) { |
a17dc2584e81
Fix time reporting in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21023
diff
changeset
|
398 TTY.println("CompileTheWorld : Waiting for " + (threadPool.getTaskCount() - threadPool.getCompletedTaskCount()) + " compiles"); |
a17dc2584e81
Fix time reporting in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21023
diff
changeset
|
399 } |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
400 try { |
21139
a17dc2584e81
Fix time reporting in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21023
diff
changeset
|
401 threadPool.awaitTermination(1, TimeUnit.SECONDS); |
a17dc2584e81
Fix time reporting in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21023
diff
changeset
|
402 wakeups++; |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
403 } catch (InterruptedException e) { |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
404 } |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
405 } |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
406 threadPool = null; |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
407 |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
408 long elapsedTime = System.currentTimeMillis() - start; |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
409 |
13199
bae0869c829a
put CompileTheWorldTest logging behind the graal.compileTheWorldTest.log system property
Doug Simon <doug.simon@oracle.com>
parents:
13113
diff
changeset
|
410 println(); |
20017
926850b25c65
Restore old CTW output format
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20014
diff
changeset
|
411 if (Options.CompileTheWorldMultiThreaded.getValue()) { |
20029
d3b3a094df52
Alway print final CTW messages
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20018
diff
changeset
|
412 TTY.println("CompileTheWorld : Done (%d classes, %d methods, %d ms elapsed, %d ms compile time, %d bytes of memory used)", classFileCounter, compiledMethodsCounter.get(), elapsedTime, |
20017
926850b25c65
Restore old CTW output format
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20014
diff
changeset
|
413 compileTime.get(), memoryUsed.get()); |
926850b25c65
Restore old CTW output format
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20014
diff
changeset
|
414 } else { |
20029
d3b3a094df52
Alway print final CTW messages
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20018
diff
changeset
|
415 TTY.println("CompileTheWorld : Done (%d classes, %d methods, %d ms, %d bytes of memory used)", classFileCounter, compiledMethodsCounter.get(), compileTime.get(), memoryUsed.get()); |
20017
926850b25c65
Restore old CTW output format
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20014
diff
changeset
|
416 } |
9108 | 417 } |
418 | |
20014
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
419 private synchronized void startThreads() { |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
420 running = true; |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
421 // Wake up any waiting threads |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
422 notifyAll(); |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
423 } |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
424 |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
425 private synchronized void waitToRun() { |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
426 while (!running) { |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
427 try { |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
428 wait(); |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
429 } catch (InterruptedException e) { |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
430 } |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
431 } |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
432 } |
dab7f071220a
Wait until all classes are loaded before compiling in multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20007
diff
changeset
|
433 |
13452
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
434 class CTWCompilationTask extends CompilationTask { |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
435 |
13859
1e01e2644a5d
Make blocking compiles safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13630
diff
changeset
|
436 CTWCompilationTask(HotSpotBackend backend, HotSpotResolvedJavaMethod method) { |
17377
58f45b63b802
CompileTheWorld compilations are no longer installed as default nmethods
Doug Simon <doug.simon@oracle.com>
parents:
16872
diff
changeset
|
437 super(backend, method, INVOCATION_ENTRY_BCI, 0L, method.allocateCompileId(INVOCATION_ENTRY_BCI), false); |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
438 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
439 |
13452
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
440 /** |
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
441 * Returns empty profiling info to be as close to the CTW behavior of C1 and C2 as possible. |
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
442 */ |
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
443 @Override |
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
444 protected ProfilingInfo getProfilingInfo() { |
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
445 // Be optimistic and return false for exceptionSeen. |
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
446 return DefaultProfilingInfo.get(TriState.FALSE); |
8275a0d0c90a
create profiling info, phase plan and optimistic opts when running a CompilationTask, not when creating it (GRAAL-640)
Doug Simon <doug.simon@oracle.com>
parents:
13371
diff
changeset
|
447 } |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
448 } |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
449 |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
450 private void compileMethod(HotSpotResolvedJavaMethod method) throws InterruptedException, ExecutionException { |
20018
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
451 if (methodFilters != null && !MethodFilter.matches(methodFilters, method)) { |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
452 return; |
3cbb0846337c
added -G:CompileTheWorldMethodFilter option
Doug Simon <doug.simon@oracle.com>
parents:
20017
diff
changeset
|
453 } |
20967
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
454 if (excludeMethodFilters != null && MethodFilter.matches(excludeMethodFilters, method)) { |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
455 return; |
f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
20831
diff
changeset
|
456 } |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
457 Future<?> task = threadPool.submit(new Runnable() { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
458 public void run() { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
459 waitToRun(); |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
460 try (OverrideScope s = config.apply()) { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
461 compileMethod(method, classFileCounter); |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
462 } |
20031
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
463 } |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
464 }); |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
465 if (threadPool.getCorePoolSize() == 1) { |
c5c8193325fa
Only report debug values for CTW threads by default
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
20029
diff
changeset
|
466 task.get(); |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
467 } |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
468 } |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
469 |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
470 /** |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
471 * Compiles a method and gathers some statistics. |
9108 | 472 */ |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
473 private void compileMethod(HotSpotResolvedJavaMethod method, int counter) { |
9108 | 474 try { |
475 long start = System.currentTimeMillis(); | |
16722
46eaf7cd8275
added memory usage analysis to CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
16480
diff
changeset
|
476 long allocatedAtStart = getCurrentThreadAllocatedBytes(); |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
477 |
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
478 HotSpotBackend backend = runtime.getHostBackend(); |
13859
1e01e2644a5d
Make blocking compiles safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13630
diff
changeset
|
479 CompilationTask task = new CTWCompilationTask(backend, method); |
15695
128359d7cddc
once the Graal compilation queue has been shutdown, don't process any pending compilations and be more defensive about preventing future compilations to be queued
Doug Simon <doug.simon@oracle.com>
parents:
15463
diff
changeset
|
480 task.runCompilation(); |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
481 |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
482 memoryUsed.getAndAdd(getCurrentThreadAllocatedBytes() - allocatedAtStart); |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
483 compileTime.getAndAdd(System.currentTimeMillis() - start); |
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
484 compiledMethodsCounter.incrementAndGet(); |
9108 | 485 } catch (Throwable t) { |
486 // Catch everything and print a message | |
19968
ccdcd530a3ec
Add support for multithreaded CTW
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19717
diff
changeset
|
487 println("CompileTheWorld (%d) : Error compiling method: %s", counter, method.format("%H.%n(%p):%r")); |
9108 | 488 t.printStackTrace(TTY.cachedOut); |
489 } | |
490 } | |
491 | |
492 /** | |
13353
0e5c4f9fa9a5
enabled non-hosted CompileTheWorld execution with complete bootstrapping and the ability to override compilation options separately for CTW compilations
Doug Simon <doug.simon@oracle.com>
parents:
13200
diff
changeset
|
493 * Determines if a method should be compiled (Cf. CompilationPolicy::can_be_compiled). |
14906 | 494 * |
9108 | 495 * @return true if it can be compiled, false otherwise |
496 */ | |
13371
4db09b7304da
read DontCompileHugeMethods and HugeMethodLimit from VM
Doug Simon <doug.simon@oracle.com>
parents:
13366
diff
changeset
|
497 private boolean canBeCompiled(HotSpotResolvedJavaMethod javaMethod, int modifiers) { |
9108 | 498 if (Modifier.isAbstract(modifiers) || Modifier.isNative(modifiers)) { |
499 return false; | |
500 } | |
13371
4db09b7304da
read DontCompileHugeMethods and HugeMethodLimit from VM
Doug Simon <doug.simon@oracle.com>
parents:
13366
diff
changeset
|
501 HotSpotVMConfig c = runtime.getConfig(); |
4db09b7304da
read DontCompileHugeMethods and HugeMethodLimit from VM
Doug Simon <doug.simon@oracle.com>
parents:
13366
diff
changeset
|
502 if (c.dontCompileHugeMethods && javaMethod.getCodeSize() > c.hugeMethodLimit) { |
9108 | 503 return false; |
504 } | |
16831
217eee2ddead
support use of -XX:CompileCommand=dontinline to exclude problematic methods from CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
16722
diff
changeset
|
505 // Allow use of -XX:CompileCommand=dontinline to exclude problematic methods |
217eee2ddead
support use of -XX:CompileCommand=dontinline to exclude problematic methods from CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
16722
diff
changeset
|
506 if (!javaMethod.canBeInlined()) { |
217eee2ddead
support use of -XX:CompileCommand=dontinline to exclude problematic methods from CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
16722
diff
changeset
|
507 return false; |
217eee2ddead
support use of -XX:CompileCommand=dontinline to exclude problematic methods from CompileTheWorld
Doug Simon <doug.simon@oracle.com>
parents:
16722
diff
changeset
|
508 } |
9108 | 509 // Skip @Snippets for now |
510 if (javaMethod.getAnnotation(Snippet.class) != null) { | |
511 return false; | |
512 } | |
513 return true; | |
514 } | |
515 | |
516 } |