annotate jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMetaAccessProvider.java @ 24225:a2dbb6fcc923

Added tag jvmci-0.33 for changeset 3aed4cb813f4
author Doug Simon <doug.simon@oracle.com>
date Fri, 18 Aug 2017 22:47:33 +0200
parents d6bd0b9cd0b6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
1 /*
23322
f8178417d018 Expose SharedRuntime::throw_and_post_jvmti_exception to JVMCI compilers.
Roland Schatz <roland.schatz@oracle.com>
parents: 23316
diff changeset
2 * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
4 *
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
8 *
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
13 * accompanied this code).
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
14 *
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
18 *
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
21 * questions.
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
22 */
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
23 package jdk.vm.ci.hotspot;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
24
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
25 import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
26 import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
27 import static jdk.vm.ci.hotspot.HotSpotResolvedObjectTypeImpl.fromObjectClass;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
28 import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE;
13263
81055aacb98d removed CompilerToVM.getJavaField
twisti
parents: 13257
diff changeset
29
22569
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22555
diff changeset
30 import java.lang.reflect.Array;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22555
diff changeset
31 import java.lang.reflect.Executable;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22555
diff changeset
32 import java.lang.reflect.Field;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22555
diff changeset
33 import java.lang.reflect.Modifier;
23749
d6bd0b9cd0b6 remove uses of setAccessible (JDK-8165434)
Doug Simon <doug.simon@oracle.com>
parents: 23393
diff changeset
34 import java.util.Objects;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
35
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
36 import jdk.vm.ci.code.CodeUtil;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
37 import jdk.vm.ci.code.TargetDescription;
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23390
diff changeset
38 import jdk.vm.ci.common.JVMCIError;
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
39 import jdk.vm.ci.meta.DeoptimizationAction;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
40 import jdk.vm.ci.meta.DeoptimizationReason;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
41 import jdk.vm.ci.meta.JavaConstant;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
42 import jdk.vm.ci.meta.JavaKind;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
43 import jdk.vm.ci.meta.MetaAccessProvider;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
44 import jdk.vm.ci.meta.ResolvedJavaField;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
45 import jdk.vm.ci.meta.ResolvedJavaMethod;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
46 import jdk.vm.ci.meta.ResolvedJavaType;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22570
diff changeset
47 import jdk.vm.ci.meta.Signature;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
48
21665
6166968c6359 Add missing JaCoCo excludes
Josef Eisl <josef.eisl@jku.at>
parents: 21556
diff changeset
49 // JaCoCo Exclude
6166968c6359 Add missing JaCoCo excludes
Josef Eisl <josef.eisl@jku.at>
parents: 21556
diff changeset
50
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
51 /**
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
52 * HotSpot implementation of {@link MetaAccessProvider}.
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
53 */
23393
1d4ce2d19e52 clean up and minimize JVMCI (JDK-8156835)
Doug Simon <doug.simon@oracle.com>
parents: 23392
diff changeset
54 public class HotSpotMetaAccessProvider implements MetaAccessProvider {
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
55
21552
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
56 protected final HotSpotJVMCIRuntimeProvider runtime;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
57
21552
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
58 public HotSpotMetaAccessProvider(HotSpotJVMCIRuntimeProvider runtime) {
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
59 this.runtime = runtime;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
60 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
61
18544
17b5e453ab41 replaced concrete types with interface types to support replay compilation
Doug Simon <doug.simon@oracle.com>
parents: 18540
diff changeset
62 public ResolvedJavaType lookupJavaType(Class<?> clazz) {
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
63 if (clazz == null) {
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
64 throw new IllegalArgumentException("Class parameter was null");
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
65 }
18544
17b5e453ab41 replaced concrete types with interface types to support replay compilation
Doug Simon <doug.simon@oracle.com>
parents: 18540
diff changeset
66 return runtime.fromClass(clazz);
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
67 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
68
18544
17b5e453ab41 replaced concrete types with interface types to support replay compilation
Doug Simon <doug.simon@oracle.com>
parents: 18540
diff changeset
69 public HotSpotResolvedObjectType lookupJavaType(JavaConstant constant) {
15909
e43591136d9f Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 15291
diff changeset
70 if (constant.isNull() || !(constant instanceof HotSpotObjectConstant)) {
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
71 return null;
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
72 }
18544
17b5e453ab41 replaced concrete types with interface types to support replay compilation
Doug Simon <doug.simon@oracle.com>
parents: 18540
diff changeset
73 return ((HotSpotObjectConstant) constant).getType();
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
74 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
75
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
76 public Signature parseMethodDescriptor(String signature) {
18540
21384a8fbb64 removed static accesses to HotSpotGraalRuntime from some HotSpot meta API classes
Doug Simon <doug.simon@oracle.com>
parents: 18530
diff changeset
77 return new HotSpotSignature(runtime, signature);
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
78 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
79
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: 18290
diff changeset
80 public ResolvedJavaMethod lookupJavaMethod(Executable reflectionMethod) {
23749
d6bd0b9cd0b6 remove uses of setAccessible (JDK-8165434)
Doug Simon <doug.simon@oracle.com>
parents: 23393
diff changeset
81 return runtime.getCompilerToVM().asResolvedJavaMethod(Objects.requireNonNull(reflectionMethod));
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
82 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
83
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
84 public ResolvedJavaField lookupJavaField(Field reflectionField) {
23315
21fe118a18e6 Backed out changeset 2d1ca131b8be
Doug Simon <doug.simon@oracle.com>
parents: 23314
diff changeset
85 Class<?> fieldHolder = reflectionField.getDeclaringClass();
13263
81055aacb98d removed CompilerToVM.getJavaField
twisti
parents: 13257
diff changeset
86
23315
21fe118a18e6 Backed out changeset 2d1ca131b8be
Doug Simon <doug.simon@oracle.com>
parents: 23314
diff changeset
87 HotSpotResolvedObjectType holder = fromObjectClass(fieldHolder);
23316
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
88 if (Modifier.isStatic(reflectionField.getModifiers())) {
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
89 final long offset = UNSAFE.staticFieldOffset(reflectionField);
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
90 for (ResolvedJavaField field : holder.getStaticFields()) {
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
91 if (offset == ((HotSpotResolvedJavaField) field).offset()) {
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
92 return field;
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
93 }
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
94 }
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
95 } else {
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
96 final long offset = UNSAFE.objectFieldOffset(reflectionField);
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
97 for (ResolvedJavaField field : holder.getInstanceFields(false)) {
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
98 if (offset == ((HotSpotResolvedJavaField) field).offset()) {
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
99 return field;
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
100 }
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
101 }
c0df579bf9db get VM internal flags when creating HotSpotResolvedJavaFieldImpl from Field reflection object (JDK-8151266)
Doug Simon <doug.simon@oracle.com>
parents: 23315
diff changeset
102 }
13263
81055aacb98d removed CompilerToVM.getJavaField
twisti
parents: 13257
diff changeset
103
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23390
diff changeset
104 throw new JVMCIError("unresolved field %s", reflectionField);
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
105 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
106
12757
a36839dafe50 Remove some useless short casts, synchronize deoptimization.hpp with HotSpotMetaAccessProvider
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12719
diff changeset
107 private static int intMaskRight(int n) {
a36839dafe50 Remove some useless short casts, synchronize deoptimization.hpp with HotSpotMetaAccessProvider
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12719
diff changeset
108 assert n <= 32;
a36839dafe50 Remove some useless short casts, synchronize deoptimization.hpp with HotSpotMetaAccessProvider
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12719
diff changeset
109 return n == 32 ? -1 : (1 << n) - 1;
a36839dafe50 Remove some useless short casts, synchronize deoptimization.hpp with HotSpotMetaAccessProvider
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12719
diff changeset
110 }
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
111
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
112 @Override
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18167
diff changeset
113 public JavaConstant encodeDeoptActionAndReason(DeoptimizationAction action, DeoptimizationReason reason, int debugId) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
114 HotSpotVMConfig config = runtime.getConfig();
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
115 int actionValue = convertDeoptAction(action);
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
116 int reasonValue = convertDeoptReason(reason);
13677
45fcb3ec0d43 Rename more 'speculation id' to 'debug id'. Add decodeDebugId to MetaAccessProvider
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 13641
diff changeset
117 int debugValue = debugId & intMaskRight(config.deoptimizationDebugIdBits);
23345
1c4b6a7f1917 update to Eclipse 4.5.2 format style
Doug Simon <doug.simon@oracle.com>
parents: 23322
diff changeset
118 JavaConstant c = JavaConstant.forInt(
1c4b6a7f1917 update to Eclipse 4.5.2 format style
Doug Simon <doug.simon@oracle.com>
parents: 23322
diff changeset
119 ~((debugValue << config.deoptimizationDebugIdShift) | (reasonValue << config.deoptimizationReasonShift) | (actionValue << config.deoptimizationActionShift)));
12717
dd856c84a75c Mask the speculation id correctly in HotSpotMetaAccessProvider.encodeDeoptActionAndReason
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12699
diff changeset
120 assert c.asInt() < 0;
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
121 return c;
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
122 }
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
123
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18167
diff changeset
124 public DeoptimizationReason decodeDeoptReason(JavaConstant constant) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
125 HotSpotVMConfig config = runtime.getConfig();
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
126 int reasonValue = ((~constant.asInt()) >> config.deoptimizationReasonShift) & intMaskRight(config.deoptimizationReasonBits);
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
127 DeoptimizationReason reason = convertDeoptReason(reasonValue);
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
128 return reason;
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
129 }
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
130
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18167
diff changeset
131 public DeoptimizationAction decodeDeoptAction(JavaConstant constant) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
132 HotSpotVMConfig config = runtime.getConfig();
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
133 int actionValue = ((~constant.asInt()) >> config.deoptimizationActionShift) & intMaskRight(config.deoptimizationActionBits);
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
134 DeoptimizationAction action = convertDeoptAction(actionValue);
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
135 return action;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
136 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
137
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18167
diff changeset
138 public int decodeDebugId(JavaConstant constant) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
139 HotSpotVMConfig config = runtime.getConfig();
13677
45fcb3ec0d43 Rename more 'speculation id' to 'debug id'. Add decodeDebugId to MetaAccessProvider
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 13641
diff changeset
140 return ((~constant.asInt()) >> config.deoptimizationDebugIdShift) & intMaskRight(config.deoptimizationDebugIdBits);
12699
38b84d5a66fd Start passing down a 'speculation id' to deoptimizations.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12484
diff changeset
141 }
38b84d5a66fd Start passing down a 'speculation id' to deoptimizations.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12484
diff changeset
142
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
143 public int convertDeoptAction(DeoptimizationAction action) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
144 HotSpotVMConfig config = runtime.getConfig();
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
145 switch (action) {
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
146 case None:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
147 return config.deoptActionNone;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
148 case RecompileIfTooManyDeopts:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
149 return config.deoptActionMaybeRecompile;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
150 case InvalidateReprofile:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
151 return config.deoptActionReinterpret;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
152 case InvalidateRecompile:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
153 return config.deoptActionMakeNotEntrant;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
154 case InvalidateStopCompiling:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
155 return config.deoptActionMakeNotCompilable;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
156 default:
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23390
diff changeset
157 throw new JVMCIError("%s", action);
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
158 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
159 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
160
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
161 public DeoptimizationAction convertDeoptAction(int action) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
162 HotSpotVMConfig config = runtime.getConfig();
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
163 if (action == config.deoptActionNone) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
164 return DeoptimizationAction.None;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
165 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
166 if (action == config.deoptActionMaybeRecompile) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
167 return DeoptimizationAction.RecompileIfTooManyDeopts;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
168 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
169 if (action == config.deoptActionReinterpret) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
170 return DeoptimizationAction.InvalidateReprofile;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
171 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
172 if (action == config.deoptActionMakeNotEntrant) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
173 return DeoptimizationAction.InvalidateRecompile;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
174 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
175 if (action == config.deoptActionMakeNotCompilable) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
176 return DeoptimizationAction.InvalidateStopCompiling;
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
177 }
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23390
diff changeset
178 throw new JVMCIError("%d", action);
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
179 }
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
180
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
181 public int convertDeoptReason(DeoptimizationReason reason) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
182 HotSpotVMConfig config = runtime.getConfig();
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
183 switch (reason) {
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
184 case None:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
185 return config.deoptReasonNone;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
186 case NullCheckException:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
187 return config.deoptReasonNullCheck;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
188 case BoundsCheckException:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
189 return config.deoptReasonRangeCheck;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
190 case ClassCastException:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
191 return config.deoptReasonClassCheck;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
192 case ArrayStoreException:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
193 return config.deoptReasonArrayCheck;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
194 case UnreachedCode:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
195 return config.deoptReasonUnreached0;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
196 case TypeCheckedInliningViolated:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
197 return config.deoptReasonTypeCheckInlining;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
198 case OptimizedTypeCheckViolated:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
199 return config.deoptReasonOptimizedTypeCheck;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
200 case NotCompiledExceptionHandler:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
201 return config.deoptReasonNotCompiledExceptionHandler;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
202 case Unresolved:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
203 return config.deoptReasonUnresolved;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
204 case JavaSubroutineMismatch:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
205 return config.deoptReasonJsrMismatch;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
206 case ArithmeticException:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
207 return config.deoptReasonDiv0Check;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
208 case RuntimeConstraint:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
209 return config.deoptReasonConstraint;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
210 case LoopLimitCheck:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
211 return config.deoptReasonLoopLimitCheck;
13155
1dd9aa5a9ee5 Deoptimization reason for failed aliasing assumptions.
Roland Schatz <roland.schatz@oracle.com>
parents: 12757
diff changeset
212 case Aliasing:
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
213 return config.deoptReasonAliasing;
16535
ada0a7729b6f Truffle: introduce debug option to print the stack trace when transferring to the interpreter
Andreas Woess <andreas.woess@jku.at>
parents: 15909
diff changeset
214 case TransferToInterpreter:
ada0a7729b6f Truffle: introduce debug option to print the stack trace when transferring to the interpreter
Andreas Woess <andreas.woess@jku.at>
parents: 15909
diff changeset
215 return config.deoptReasonTransferToInterpreter;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
216 default:
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23390
diff changeset
217 throw new JVMCIError("%s", reason);
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
218 }
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
219 }
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
220
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
221 public DeoptimizationReason convertDeoptReason(int reason) {
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
222 HotSpotVMConfig config = runtime.getConfig();
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
223 if (reason == config.deoptReasonNone) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
224 return DeoptimizationReason.None;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
225 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
226 if (reason == config.deoptReasonNullCheck) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
227 return DeoptimizationReason.NullCheckException;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
228 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
229 if (reason == config.deoptReasonRangeCheck) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
230 return DeoptimizationReason.BoundsCheckException;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
231 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
232 if (reason == config.deoptReasonClassCheck) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
233 return DeoptimizationReason.ClassCastException;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
234 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
235 if (reason == config.deoptReasonArrayCheck) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
236 return DeoptimizationReason.ArrayStoreException;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
237 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
238 if (reason == config.deoptReasonUnreached0) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
239 return DeoptimizationReason.UnreachedCode;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
240 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
241 if (reason == config.deoptReasonTypeCheckInlining) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
242 return DeoptimizationReason.TypeCheckedInliningViolated;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
243 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
244 if (reason == config.deoptReasonOptimizedTypeCheck) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
245 return DeoptimizationReason.OptimizedTypeCheckViolated;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
246 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
247 if (reason == config.deoptReasonNotCompiledExceptionHandler) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
248 return DeoptimizationReason.NotCompiledExceptionHandler;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
249 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
250 if (reason == config.deoptReasonUnresolved) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
251 return DeoptimizationReason.Unresolved;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
252 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
253 if (reason == config.deoptReasonJsrMismatch) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
254 return DeoptimizationReason.JavaSubroutineMismatch;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
255 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
256 if (reason == config.deoptReasonDiv0Check) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
257 return DeoptimizationReason.ArithmeticException;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
258 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
259 if (reason == config.deoptReasonConstraint) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
260 return DeoptimizationReason.RuntimeConstraint;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
261 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
262 if (reason == config.deoptReasonLoopLimitCheck) {
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
263 return DeoptimizationReason.LoopLimitCheck;
13257
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
264 }
4eacfd0767ed get deoptimization constants in HotSpotMetaAccessProvider from HotSpotVMConfig
twisti
parents: 13155
diff changeset
265 if (reason == config.deoptReasonAliasing) {
13155
1dd9aa5a9ee5 Deoptimization reason for failed aliasing assumptions.
Roland Schatz <roland.schatz@oracle.com>
parents: 12757
diff changeset
266 return DeoptimizationReason.Aliasing;
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
267 }
16535
ada0a7729b6f Truffle: introduce debug option to print the stack trace when transferring to the interpreter
Andreas Woess <andreas.woess@jku.at>
parents: 15909
diff changeset
268 if (reason == config.deoptReasonTransferToInterpreter) {
ada0a7729b6f Truffle: introduce debug option to print the stack trace when transferring to the interpreter
Andreas Woess <andreas.woess@jku.at>
parents: 15909
diff changeset
269 return DeoptimizationReason.TransferToInterpreter;
ada0a7729b6f Truffle: introduce debug option to print the stack trace when transferring to the interpreter
Andreas Woess <andreas.woess@jku.at>
parents: 15909
diff changeset
270 }
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23390
diff changeset
271 throw new JVMCIError("%x", reason);
12484
2d8a8980eda8 Canonicalize DynamicDeoptimize nodes back to Deoptimize when used with a constant reason&action
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12431
diff changeset
272 }
13966
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
273
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
274 @Override
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18167
diff changeset
275 public long getMemorySize(JavaConstant constant) {
22536
dc1aeef79e7e Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents: 22531
diff changeset
276 if (constant.getJavaKind() == JavaKind.Object) {
18544
17b5e453ab41 replaced concrete types with interface types to support replay compilation
Doug Simon <doug.simon@oracle.com>
parents: 18540
diff changeset
277 HotSpotResolvedObjectType lookupJavaType = lookupJavaType(constant);
13966
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
278
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
279 if (lookupJavaType == null) {
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
280 return 0;
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
281 } else {
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
282 if (lookupJavaType.isArray()) {
18290
e7d219e9d01f removed HotSpotObjectConstantImpl.asObject()
Doug Simon <doug.simon@oracle.com>
parents: 18262
diff changeset
283 int length = Array.getLength(((HotSpotObjectConstantImpl) constant).object());
13966
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
284 ResolvedJavaType elementType = lookupJavaType.getComponentType();
22536
dc1aeef79e7e Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents: 22531
diff changeset
285 JavaKind elementKind = elementType.getJavaKind();
22555
2fe06375f2d3 made HotSpotJVMCIRuntimeProvider.getArrayBaseOffset and HotSpotJVMCIRuntimeProvider.getArrayIndexScale static
Doug Simon <doug.simon@oracle.com>
parents: 22542
diff changeset
286 final int headerSize = getArrayBaseOffset(elementKind);
21552
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
287 TargetDescription target = runtime.getHostJVMCIBackend().getTarget();
22570
425950fdcccb Use arrayIndexScale instead of element size to calculate memory consumption of arrays.
Roland Schatz <roland.schatz@oracle.com>
parents: 22569
diff changeset
288 int sizeOfElement = getArrayIndexScale(elementKind);
21552
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
289 int alignment = target.wordSize;
13966
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
290 int log2ElementSize = CodeUtil.log2(sizeOfElement);
21552
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
291 return computeArrayAllocationSize(length, alignment, headerSize, log2ElementSize);
13966
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
292 }
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
293 return lookupJavaType.instanceSize();
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
294 }
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
295 } else {
22536
dc1aeef79e7e Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents: 22531
diff changeset
296 return constant.getJavaKind().getByteCount();
13966
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
297 }
be0d961e3a88 New methods for querying memory usage of individual objects and object graphs in Graal API (MetaAccessProvider#getMemorySize, MetaUtil#getMemorySizeRecursive).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 13677
diff changeset
298 }
21552
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
299
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
300 /**
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
301 * Computes the size of the memory chunk allocated for an array. This size accounts for the
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
302 * array header size, body size and any padding after the last element to satisfy object
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
303 * alignment requirements.
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
304 *
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
305 * @param length the number of elements in the array
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
306 * @param alignment the object alignment requirement
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
307 * @param headerSize the size of the array header
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
308 * @param log2ElementSize log2 of the size of an element in the array
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
309 */
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
310 public static int computeArrayAllocationSize(int length, int alignment, int headerSize, int log2ElementSize) {
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
311 int size = (length << log2ElementSize) + headerSize + (alignment - 1);
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
312 int mask = ~(alignment - 1);
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
313 return size & mask;
9579a3c62a9e use skeleton findbugs jar containing only SuppresFBWarnings to avoid external dependency for JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 18867
diff changeset
314 }
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
315 }