annotate graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java @ 21543:93c50cefb9e8

moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
author Doug Simon <doug.simon@oracle.com>
date Mon, 25 May 2015 23:30:34 +0200
parents 706ffad4d773
children b1530a6cce8c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10484
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
1 /*
18208
abe9758da9d9 Truffle: add headers for new compilation listener files.
Christian Humer <christian.humer@gmail.com>
parents: 18207
diff changeset
2 * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
10484
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
4 *
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
8 *
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
13 * accompanied this code).
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
14 *
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
18 *
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
21 * questions.
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
22 */
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
23 package com.oracle.graal.truffle;
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
24
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
25 import static com.oracle.graal.truffle.TruffleCompilerOptions.*;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
26
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
27 import java.util.*;
17005
112ab4a3de3a Truffle: added Graal runtime API to wait for the completion of a compilation.
Christian Humer <christian.humer@gmail.com>
parents: 15222
diff changeset
28 import java.util.concurrent.*;
112ab4a3de3a Truffle: added Graal runtime API to wait for the completion of a compilation.
Christian Humer <christian.humer@gmail.com>
parents: 15222
diff changeset
29
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
30 import com.oracle.graal.api.code.*;
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
31 import com.oracle.graal.api.code.stack.*;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
32 import com.oracle.graal.api.meta.*;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
33 import com.oracle.graal.api.runtime.*;
21394
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
34 import com.oracle.graal.debug.*;
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21394
diff changeset
35 import com.oracle.graal.debug.Debug.Scope;
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
36 import com.oracle.graal.nodes.*;
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
37 import com.oracle.graal.truffle.debug.*;
19309
c386ace07981 Truffle: move unsafe access methods out of CompilerDirectives
Andreas Woess <andreas.woess@oracle.com>
parents: 18961
diff changeset
38 import com.oracle.graal.truffle.unsafe.*;
10484
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
39 import com.oracle.truffle.api.*;
18130
b4e38f4ca414 Truffle: rename @SlowPath to @TruffleBoundary.
Christian Humer <christian.humer@gmail.com>
parents: 17192
diff changeset
40 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
41 import com.oracle.truffle.api.frame.*;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
42 import com.oracle.truffle.api.nodes.*;
19309
c386ace07981 Truffle: move unsafe access methods out of CompilerDirectives
Andreas Woess <andreas.woess@oracle.com>
parents: 18961
diff changeset
43 import com.oracle.truffle.api.unsafe.*;
10484
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
44
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
45 public abstract class GraalTruffleRuntime implements TruffleRuntime {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
46
18961
afa70d3e8159 Allow users to provide their own TruffleRuntime implementation
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18386
diff changeset
47 public static TruffleRuntime alternateRuntime;
afa70d3e8159 Allow users to provide their own TruffleRuntime implementation
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18386
diff changeset
48
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
49 private ArrayList<String> includes;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
50 private ArrayList<String> excludes;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
51
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
52 private StackIntrospection stackIntrospection;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
53 protected ResolvedJavaMethod[] callNodeMethod;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
54 protected ResolvedJavaMethod[] callTargetMethod;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
55 protected ResolvedJavaMethod[] anyFrameMethod;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
56
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
57 private final List<GraalTruffleCompilationListener> compilationListeners = new ArrayList<>();
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
58 private final GraalTruffleCompilationListener compilationNotify = new DispatchTruffleCompilationListener();
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
59
21394
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
60 protected TruffleCompiler truffleCompiler;
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
61 protected LoopNodeFactory loopNodeFactory;
19976
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
62
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
63 public GraalTruffleRuntime() {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
64 Runtime.getRuntime().addShutdownHook(new Thread(this::shutdown));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
65 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
66
19976
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
67 private static <T extends PrioritizedServiceProvider> T loadPrioritizedServiceProvider(Class<T> clazz) {
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
68 ServiceLoader<T> serviceLoader = ServiceLoader.load(clazz, GraalTruffleRuntime.class.getClassLoader());
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
69 T bestFactory = null;
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
70 for (T factory : serviceLoader) {
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
71 if (bestFactory == null) {
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
72 bestFactory = factory;
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
73 } else if (factory.getPriority() > bestFactory.getPriority()) {
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
74 bestFactory = factory;
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
75 }
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
76 }
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
77 if (bestFactory == null) {
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
78 throw new IllegalStateException("Unable to load a factory for " + clazz.getName());
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
79 }
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
80 return bestFactory;
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
81 }
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
82
18200
62de94d5cf73 Truffle: refactor implementation of TraceTruffleCompilation, TraceTruffleCompilationDetails into separate classes.
Christian Humer <christian.humer@gmail.com>
parents: 18199
diff changeset
83 protected void installDefaultListeners() {
62de94d5cf73 Truffle: refactor implementation of TraceTruffleCompilation, TraceTruffleCompilationDetails into separate classes.
Christian Humer <christian.humer@gmail.com>
parents: 18199
diff changeset
84 TraceCompilationFailureListener.install(this);
62de94d5cf73 Truffle: refactor implementation of TraceTruffleCompilation, TraceTruffleCompilationDetails into separate classes.
Christian Humer <christian.humer@gmail.com>
parents: 18199
diff changeset
85 TraceCompilationListener.install(this);
62de94d5cf73 Truffle: refactor implementation of TraceTruffleCompilation, TraceTruffleCompilationDetails into separate classes.
Christian Humer <christian.humer@gmail.com>
parents: 18199
diff changeset
86 TraceCompilationPolymorphismListener.install(this);
18203
b1607c3ebe4f Truffle: refactor TraceTruffleCompilationCallTree into a separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18202
diff changeset
87 TraceCompilationCallTreeListener.install(this);
18204
a1873eefea65 Truffle: refactor TraceTrufflePerformanceWarnings into separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18203
diff changeset
88 TracePerformanceWarningsListener.install(this);
18202
b3f6b210f723 Truffle: refactor TraceTruffleInlining into a separte class.
Christian Humer <christian.humer@gmail.com>
parents: 18201
diff changeset
89 TraceInliningListener.install(this);
18207
881aa0ed3904 Truffle: refactor TraceTruffleSplitting into separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18204
diff changeset
90 TraceSplittingListener.install(this);
18201
ae3b7695f0fb Truffle: refactor TruffleCallTargetProfiling into a separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18200
diff changeset
91 PrintCallTargetProfiling.install(this);
18213
c489edfac1c7 Truffle: implemented new flag -G:+TruffleCompilationStatistics
Christian Humer <christian.humer@gmail.com>
parents: 18212
diff changeset
92 CompilationStatisticsListener.install(this);
18270
1d430dfce76d Truffle: added notifyStartup event to GraalTruffleCompilationListener.
Christian Humer <christian.humer@gmail.com>
parents: 18220
diff changeset
93 compilationNotify.notifyStartup(this);
18200
62de94d5cf73 Truffle: refactor implementation of TraceTruffleCompilation, TraceTruffleCompilationDetails into separate classes.
Christian Humer <christian.humer@gmail.com>
parents: 18199
diff changeset
94 }
62de94d5cf73 Truffle: refactor implementation of TraceTruffleCompilation, TraceTruffleCompilationDetails into separate classes.
Christian Humer <christian.humer@gmail.com>
parents: 18199
diff changeset
95
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
96 protected void lookupCallMethods(MetaAccessProvider metaAccess) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
97 callNodeMethod = new ResolvedJavaMethod[]{metaAccess.lookupJavaMethod(GraalFrameInstance.CallNodeFrame.METHOD)};
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
98 callTargetMethod = new ResolvedJavaMethod[]{metaAccess.lookupJavaMethod(GraalFrameInstance.CallTargetFrame.METHOD)};
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
99 anyFrameMethod = new ResolvedJavaMethod[]{callNodeMethod[0], callTargetMethod[0]};
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
100 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
101
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
102 @Override
19976
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
103 public LoopNode createLoopNode(RepeatingNode repeatingNode) {
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
104 if (!(repeatingNode instanceof Node)) {
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
105 throw new IllegalArgumentException("Repeating node must be of type Node.");
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
106 }
21394
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
107 return getLoopNodeFactory().create(repeatingNode);
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
108 }
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
109
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
110 protected LoopNodeFactory getLoopNodeFactory() {
19976
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
111 if (loopNodeFactory == null) {
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
112 loopNodeFactory = loadPrioritizedServiceProvider(LoopNodeFactory.class);
596f6f9a7412 Truffle: make loop node implementation exchangable for graal runtime versions.
Christian Humer <christian.humer@oracle.com>
parents: 19472
diff changeset
113 }
21394
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
114 return loopNodeFactory;
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
115 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
116
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
117 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
118 public DirectCallNode createDirectCallNode(CallTarget target) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
119 if (target instanceof OptimizedCallTarget) {
18207
881aa0ed3904 Truffle: refactor TraceTruffleSplitting into separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18204
diff changeset
120 return new OptimizedDirectCallNode(this, (OptimizedCallTarget) target);
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
121 } else {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
122 throw new IllegalStateException(String.format("Unexpected call target class %s!", target.getClass()));
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
123 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
124 }
12529
23dc5dfdb9c7 Add OptimizedCallTarget.call(PackedFrame, Arguments) frame prologue injection
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 11934
diff changeset
125
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
126 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
127 public IndirectCallNode createIndirectCallNode() {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
128 return new OptimizedIndirectCallNode();
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
129 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
130
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
131 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
132 public VirtualFrame createVirtualFrame(Object[] arguments, FrameDescriptor frameDescriptor) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
133 return OptimizedCallTarget.createFrame(frameDescriptor, arguments);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
134 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
135
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
136 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
137 public MaterializedFrame createMaterializedFrame(Object[] arguments) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
138 return createMaterializedFrame(arguments, new FrameDescriptor());
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
139 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
140
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
141 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
142 public MaterializedFrame createMaterializedFrame(Object[] arguments, FrameDescriptor frameDescriptor) {
19472
2c6addc91175 Truffle: createMaterializedFrame should respect TruffleUseFrameWithoutBoxing option
Andreas Woess <andreas.woess@oracle.com>
parents: 19437
diff changeset
143 if (TruffleCompilerOptions.TruffleUseFrameWithoutBoxing.getValue()) {
2c6addc91175 Truffle: createMaterializedFrame should respect TruffleUseFrameWithoutBoxing option
Andreas Woess <andreas.woess@oracle.com>
parents: 19437
diff changeset
144 return new FrameWithoutBoxing(frameDescriptor, arguments);
2c6addc91175 Truffle: createMaterializedFrame should respect TruffleUseFrameWithoutBoxing option
Andreas Woess <andreas.woess@oracle.com>
parents: 19437
diff changeset
145 } else {
2c6addc91175 Truffle: createMaterializedFrame should respect TruffleUseFrameWithoutBoxing option
Andreas Woess <andreas.woess@oracle.com>
parents: 19437
diff changeset
146 return new FrameWithBoxing(frameDescriptor, arguments);
2c6addc91175 Truffle: createMaterializedFrame should respect TruffleUseFrameWithoutBoxing option
Andreas Woess <andreas.woess@oracle.com>
parents: 19437
diff changeset
147 }
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
148 }
15210
201f6858a4f3 Restructure the interaction between OptimizedCallTarget and GraalTruffleRuntime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15018
diff changeset
149
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
150 @Override
18386
656331a61829 Truffle: add support for setting a couple of compiler options for individual execution contexts.
Chris Seaton <chris.seaton@oracle.com>
parents: 18271
diff changeset
151 public CompilerOptions createCompilerOptions() {
656331a61829 Truffle: add support for setting a couple of compiler options for individual execution contexts.
Chris Seaton <chris.seaton@oracle.com>
parents: 18271
diff changeset
152 return new GraalCompilerOptions();
656331a61829 Truffle: add support for setting a couple of compiler options for individual execution contexts.
Chris Seaton <chris.seaton@oracle.com>
parents: 18271
diff changeset
153 }
656331a61829 Truffle: add support for setting a couple of compiler options for individual execution contexts.
Chris Seaton <chris.seaton@oracle.com>
parents: 18271
diff changeset
154
656331a61829 Truffle: add support for setting a couple of compiler options for individual execution contexts.
Chris Seaton <chris.seaton@oracle.com>
parents: 18271
diff changeset
155 @Override
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
156 public Assumption createAssumption() {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
157 return createAssumption(null);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
158 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
159
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
160 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
161 public Assumption createAssumption(String name) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
162 return new OptimizedAssumption(name);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
163 }
15210
201f6858a4f3 Restructure the interaction between OptimizedCallTarget and GraalTruffleRuntime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15018
diff changeset
164
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
165 public GraalTruffleCompilationListener getCompilationNotify() {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
166 return compilationNotify;
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
167 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
168
18130
b4e38f4ca414 Truffle: rename @SlowPath to @TruffleBoundary.
Christian Humer <christian.humer@gmail.com>
parents: 17192
diff changeset
169 @TruffleBoundary
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
170 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
171 public <T> T iterateFrames(FrameInstanceVisitor<T> visitor) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
172 initStackIntrospection();
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
173
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
174 InspectedFrameVisitor<T> inspectedFrameVisitor = new InspectedFrameVisitor<T>() {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
175 private boolean skipNext = false;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
176
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
177 public T visitFrame(InspectedFrame frame) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
178 if (skipNext) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
179 assert frame.isMethod(callTargetMethod[0]);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
180 skipNext = false;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
181 return null;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
182 }
15210
201f6858a4f3 Restructure the interaction between OptimizedCallTarget and GraalTruffleRuntime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15018
diff changeset
183
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
184 if (frame.isMethod(callNodeMethod[0])) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
185 skipNext = true;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
186 return visitor.visitFrame(new GraalFrameInstance.CallNodeFrame(frame));
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
187 } else {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
188 assert frame.isMethod(callTargetMethod[0]);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
189 return visitor.visitFrame(new GraalFrameInstance.CallTargetFrame(frame, false));
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
190 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
191
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
192 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
193 };
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
194 return stackIntrospection.iterateFrames(anyFrameMethod, anyFrameMethod, 1, inspectedFrameVisitor);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
195 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
196
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
197 private void initStackIntrospection() {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
198 if (stackIntrospection == null) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
199 stackIntrospection = Graal.getRequiredCapability(StackIntrospection.class);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
200 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
201 }
17005
112ab4a3de3a Truffle: added Graal runtime API to wait for the completion of a compilation.
Christian Humer <christian.humer@gmail.com>
parents: 15222
diff changeset
202
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
203 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
204 public FrameInstance getCallerFrame() {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
205 return iterateFrames(frame -> frame);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
206 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
207
18130
b4e38f4ca414 Truffle: rename @SlowPath to @TruffleBoundary.
Christian Humer <christian.humer@gmail.com>
parents: 17192
diff changeset
208 @TruffleBoundary
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
209 @Override
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
210 public FrameInstance getCurrentFrame() {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
211 initStackIntrospection();
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
212
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
213 return stackIntrospection.iterateFrames(callTargetMethod, callTargetMethod, 0, frame -> new GraalFrameInstance.CallTargetFrame(frame, true));
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
214 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
215
18220
890d284b2771 Truffle: add TruffleRuntime#getCapability method
Andreas Woess <andreas.woess@jku.at>
parents: 18213
diff changeset
216 public <T> T getCapability(Class<T> capability) {
19309
c386ace07981 Truffle: move unsafe access methods out of CompilerDirectives
Andreas Woess <andreas.woess@oracle.com>
parents: 18961
diff changeset
217 if (capability == UnsafeAccessFactory.class) {
c386ace07981 Truffle: move unsafe access methods out of CompilerDirectives
Andreas Woess <andreas.woess@oracle.com>
parents: 18961
diff changeset
218 return capability.cast(new UnsafeAccessFactoryImpl());
c386ace07981 Truffle: move unsafe access methods out of CompilerDirectives
Andreas Woess <andreas.woess@oracle.com>
parents: 18961
diff changeset
219 }
18220
890d284b2771 Truffle: add TruffleRuntime#getCapability method
Andreas Woess <andreas.woess@jku.at>
parents: 18213
diff changeset
220 return null;
890d284b2771 Truffle: add TruffleRuntime#getCapability method
Andreas Woess <andreas.woess@jku.at>
parents: 18213
diff changeset
221 }
890d284b2771 Truffle: add TruffleRuntime#getCapability method
Andreas Woess <andreas.woess@jku.at>
parents: 18213
diff changeset
222
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
223 protected boolean acceptForCompilation(RootNode rootNode) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
224 if (TruffleCompileOnly.getValue() != null) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
225 if (includes == null) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
226 parseCompileOnly();
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
227 }
15211
59f71608aa9a Clean up of relationship between compilation policy and optimized call target.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15210
diff changeset
228
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
229 String name = rootNode.toString();
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
230 boolean included = includes.isEmpty();
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
231 for (int i = 0; !included && i < includes.size(); i++) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
232 if (name.contains(includes.get(i))) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
233 included = true;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
234 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
235 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
236 if (!included) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
237 return false;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
238 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
239 for (String exclude : excludes) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
240 if (name.contains(exclude)) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
241 return false;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
242 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
243 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
244 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
245 return true;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
246 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
247
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
248 protected void parseCompileOnly() {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
249 includes = new ArrayList<>();
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
250 excludes = new ArrayList<>();
15222
58d2c5bdb9cd Truffle: Add option TruffleReturnTypeSpeculation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15211
diff changeset
251
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
252 String[] items = TruffleCompileOnly.getValue().split(",");
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
253 for (String item : items) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
254 if (item.startsWith("~")) {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
255 excludes.add(item.substring(1));
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
256 } else {
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
257 includes.add(item);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
258 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
259 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
260 }
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
261
18162
ab62800259ff Truffle: renamed the splitting to callTargetCloning. Made RootNode cloning an implementation detail of the Truffle runtime.
Christian Humer <christian.humer@gmail.com>
parents: 18130
diff changeset
262 public abstract RootCallTarget createClonedCallTarget(OptimizedCallTarget sourceCallTarget, RootNode root);
ab62800259ff Truffle: renamed the splitting to callTargetCloning. Made RootNode cloning an implementation detail of the Truffle runtime.
Christian Humer <christian.humer@gmail.com>
parents: 18130
diff changeset
263
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
264 public void addCompilationListener(GraalTruffleCompilationListener listener) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
265 compilationListeners.add(listener);
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
266 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
267
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
268 public void removeCompilationListener(GraalTruffleCompilationListener listener) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
269 compilationListeners.remove(listener);
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
270 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
271
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
272 private void shutdown() {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
273 getCompilationNotify().notifyShutdown(this);
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
274 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
275
18212
546cfe7a19b6 Truffle: add getQueuedCallTargets to GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18209
diff changeset
276 public abstract Collection<OptimizedCallTarget> getQueuedCallTargets();
546cfe7a19b6 Truffle: add getQueuedCallTargets to GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18209
diff changeset
277
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
278 public abstract void compile(OptimizedCallTarget optimizedCallTarget, boolean mayBeAsynchronous);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
279
21394
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
280 protected void doCompile(OptimizedCallTarget optimizedCallTarget) {
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
281 boolean success = true;
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
282 try (Scope s = Debug.scope("Truffle", new TruffleDebugJavaMethod(optimizedCallTarget))) {
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
283 truffleCompiler.compileMethod(optimizedCallTarget);
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
284 } catch (Throwable e) {
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
285 optimizedCallTarget.notifyCompilationFailed(e);
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
286 success = false;
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
287 } finally {
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
288 optimizedCallTarget.notifyCompilationFinished(success);
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
289 }
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
290 }
706ffad4d773 Allow subclasses of TruffleCompiler
Christian Wimmer <christian.wimmer@oracle.com>
parents: 21296
diff changeset
291
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
292 public abstract boolean cancelInstalledTask(OptimizedCallTarget optimizedCallTarget, Object source, CharSequence reason);
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
293
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
294 public abstract void waitForCompilation(OptimizedCallTarget optimizedCallTarget, long timeout) throws ExecutionException, TimeoutException;
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
295
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
296 public abstract boolean isCompiling(OptimizedCallTarget optimizedCallTarget);
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
297
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
298 public abstract void invalidateInstalledCode(OptimizedCallTarget optimizedCallTarget, Object source, CharSequence reason);
17192
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
299
d0d76deeacb9 Make more Truffle code HotSpot independent, and allow more customization by subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents: 17005
diff changeset
300 public abstract void reinstallStubs();
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
301
21296
c3a6c85aec82 Add flag for Truffle infopoints
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21157
diff changeset
302 public final boolean enableInfopoints() {
c3a6c85aec82 Add flag for Truffle infopoints
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21157
diff changeset
303 /* Currently infopoints can change code generation so don't enable them automatically */
c3a6c85aec82 Add flag for Truffle infopoints
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21157
diff changeset
304 return platformEnableInfopoints() && TruffleEnableInfopoints.getValue();
c3a6c85aec82 Add flag for Truffle infopoints
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21157
diff changeset
305 }
c3a6c85aec82 Add flag for Truffle infopoints
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21157
diff changeset
306
c3a6c85aec82 Add flag for Truffle infopoints
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21157
diff changeset
307 protected abstract boolean platformEnableInfopoints();
21157
31a1589aecdf Make Truffle respect -XX:+DebugNonSafepoints
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20080
diff changeset
308
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
309 private final class DispatchTruffleCompilationListener implements GraalTruffleCompilationListener {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
310
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
311 public void notifyCompilationQueued(OptimizedCallTarget target) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
312 compilationListeners.forEach(l -> l.notifyCompilationQueued(target));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
313 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
314
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
315 public void notifyCompilationInvalidated(OptimizedCallTarget target, Object source, CharSequence reason) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
316 compilationListeners.forEach(l -> l.notifyCompilationInvalidated(target, source, reason));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
317 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
318
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
319 public void notifyCompilationDequeued(OptimizedCallTarget target, Object source, CharSequence reason) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
320 compilationListeners.forEach(l -> l.notifyCompilationDequeued(target, source, reason));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
321 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
322
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
323 public void notifyCompilationFailed(OptimizedCallTarget target, StructuredGraph graph, Throwable t) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
324 compilationListeners.forEach(l -> l.notifyCompilationFailed(target, graph, t));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
325 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
326
18207
881aa0ed3904 Truffle: refactor TraceTruffleSplitting into separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18204
diff changeset
327 public void notifyCompilationSplit(OptimizedDirectCallNode callNode) {
881aa0ed3904 Truffle: refactor TraceTruffleSplitting into separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18204
diff changeset
328 compilationListeners.forEach(l -> l.notifyCompilationSplit(callNode));
881aa0ed3904 Truffle: refactor TraceTruffleSplitting into separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18204
diff changeset
329 }
881aa0ed3904 Truffle: refactor TraceTruffleSplitting into separate class.
Christian Humer <christian.humer@gmail.com>
parents: 18204
diff changeset
330
18209
dc6b023513b8 Truffle: added compilation graal tier finished event to compilation listener.
Christian Humer <christian.humer@gmail.com>
parents: 18208
diff changeset
331 public void notifyCompilationGraalTierFinished(OptimizedCallTarget target, StructuredGraph graph) {
dc6b023513b8 Truffle: added compilation graal tier finished event to compilation listener.
Christian Humer <christian.humer@gmail.com>
parents: 18208
diff changeset
332 compilationListeners.forEach(l -> l.notifyCompilationGraalTierFinished(target, graph));
dc6b023513b8 Truffle: added compilation graal tier finished event to compilation listener.
Christian Humer <christian.humer@gmail.com>
parents: 18208
diff changeset
333 }
dc6b023513b8 Truffle: added compilation graal tier finished event to compilation listener.
Christian Humer <christian.humer@gmail.com>
parents: 18208
diff changeset
334
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
335 public void notifyCompilationSuccess(OptimizedCallTarget target, StructuredGraph graph, CompilationResult result) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
336 compilationListeners.forEach(l -> l.notifyCompilationSuccess(target, graph, result));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
337 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
338
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
339 public void notifyCompilationStarted(OptimizedCallTarget target) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
340 compilationListeners.forEach(l -> l.notifyCompilationStarted(target));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
341 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
342
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
343 public void notifyCompilationTruffleTierFinished(OptimizedCallTarget target, StructuredGraph graph) {
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
344 compilationListeners.forEach(l -> l.notifyCompilationTruffleTierFinished(target, graph));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
345 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
346
18271
b0a8fb72c721 Truffle: changed argument of GraalTruffleCompilationListener#notifyStartup and #notifyShutdown to GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18270
diff changeset
347 public void notifyShutdown(GraalTruffleRuntime runtime) {
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
348 compilationListeners.forEach(l -> l.notifyShutdown(runtime));
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
349 }
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
350
18271
b0a8fb72c721 Truffle: changed argument of GraalTruffleCompilationListener#notifyStartup and #notifyShutdown to GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18270
diff changeset
351 public void notifyStartup(GraalTruffleRuntime runtime) {
18270
1d430dfce76d Truffle: added notifyStartup event to GraalTruffleCompilationListener.
Christian Humer <christian.humer@gmail.com>
parents: 18220
diff changeset
352 compilationListeners.forEach(l -> l.notifyStartup(runtime));
1d430dfce76d Truffle: added notifyStartup event to GraalTruffleCompilationListener.
Christian Humer <christian.humer@gmail.com>
parents: 18220
diff changeset
353 }
1d430dfce76d Truffle: added notifyStartup event to GraalTruffleCompilationListener.
Christian Humer <christian.humer@gmail.com>
parents: 18220
diff changeset
354
18199
c5c80abc3fc6 Truffle: add support for a CompilationListener in GraalTruffleRuntime.
Christian Humer <christian.humer@gmail.com>
parents: 18162
diff changeset
355 }
10484
0097fb11c16f Add basic version of Graal's Truffle runtime.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
356 }