Mercurial > hg > graal-jvmci-8
annotate jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java @ 23996:11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 03 Feb 2017 21:08:05 +0100 |
parents | 4913d70f630b |
children | 839dcc4f2cf6 |
rev | line source |
---|---|
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
2 * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
8 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * questions. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 */ |
22672
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
23 package jdk.vm.ci.hotspot; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
24 |
22569
ec96f33a101d
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22556
diff
changeset
|
25 import static java.util.Objects.requireNonNull; |
22672
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
26 import static jdk.vm.ci.hotspot.CompilerToVM.compilerToVM; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
27 import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; |
23749
d6bd0b9cd0b6
remove uses of setAccessible (JDK-8165434)
Doug Simon <doug.simon@oracle.com>
parents:
23738
diff
changeset
|
28 import static jdk.vm.ci.hotspot.HotSpotModifiers.jvmClassModifiers; |
22672
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
29 import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
30 import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE; |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15311
diff
changeset
|
31 |
22569
ec96f33a101d
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22556
diff
changeset
|
32 import java.lang.annotation.Annotation; |
ec96f33a101d
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22556
diff
changeset
|
33 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:
22556
diff
changeset
|
34 import java.lang.reflect.Constructor; |
ec96f33a101d
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22556
diff
changeset
|
35 import java.lang.reflect.Method; |
ec96f33a101d
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22556
diff
changeset
|
36 import java.lang.reflect.Modifier; |
ec96f33a101d
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22556
diff
changeset
|
37 import java.nio.ByteOrder; |
ec96f33a101d
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22556
diff
changeset
|
38 import java.util.HashMap; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
39 |
23392
b3a816d3b844
Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents:
23387
diff
changeset
|
40 import jdk.vm.ci.common.JVMCIError; |
22672
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
41 import jdk.vm.ci.meta.Assumptions.AssumptionResult; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
42 import jdk.vm.ci.meta.Assumptions.ConcreteMethod; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
43 import jdk.vm.ci.meta.Assumptions.ConcreteSubtype; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
44 import jdk.vm.ci.meta.Assumptions.LeafType; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
45 import jdk.vm.ci.meta.Assumptions.NoFinalizableSubclass; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
46 import jdk.vm.ci.meta.Constant; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
47 import jdk.vm.ci.meta.JavaConstant; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
48 import jdk.vm.ci.meta.JavaKind; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
49 import jdk.vm.ci.meta.JavaType; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
50 import jdk.vm.ci.meta.ResolvedJavaField; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
51 import jdk.vm.ci.meta.ResolvedJavaMethod; |
1bbd4a7c274b
Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22598
diff
changeset
|
52 import jdk.vm.ci.meta.ResolvedJavaType; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
53 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
54 /** |
5775
2c088af17e59
Removed left over Ri* prefixed identifiers
Doug Simon <doug.simon@oracle.com>
parents:
5760
diff
changeset
|
55 * Implementation of {@link JavaType} for resolved non-primitive HotSpot classes. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
56 */ |
23393
1d4ce2d19e52
clean up and minimize JVMCI (JDK-8156835)
Doug Simon <doug.simon@oracle.com>
parents:
23392
diff
changeset
|
57 final class HotSpotResolvedObjectTypeImpl extends HotSpotResolvedJavaType implements HotSpotResolvedObjectType, MetaspaceWrapperObject { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
58 |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
59 private static final HotSpotResolvedJavaField[] NO_FIELDS = new HotSpotResolvedJavaField[0]; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
60 private static final int METHOD_CACHE_ARRAY_CAPACITY = 8; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
61 |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
62 /** |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
63 * The Java class this type represents. |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
64 */ |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
65 private final Class<?> javaClass; |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
66 private HotSpotResolvedJavaMethodImpl[] methodCacheArray; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
67 private HashMap<Long, HotSpotResolvedJavaMethodImpl> methodCacheHashMap; |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
68 private HotSpotResolvedJavaField[] instanceFields; |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
69 private HotSpotResolvedObjectTypeImpl[] interfaces; |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
70 private HotSpotConstantPool constantPool; |
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
71 final HotSpotJVMCIMetaAccessContext context; |
18556
7484f5fcd41d
removed a usages of HotSpotGraalRuntime.unsafeReadWord(); tidied up some comments
Doug Simon <doug.simon@oracle.com>
parents:
18534
diff
changeset
|
72 private HotSpotResolvedObjectType arrayOfType; |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
73 |
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
74 /** |
21789
5b9adb645217
fixed remnants of "graal" names in JVMCI code
Doug Simon <doug.simon@oracle.com>
parents:
21556
diff
changeset
|
75 * Gets the JVMCI mirror for a {@link Class} object. |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
76 * |
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
77 * @return the {@link HotSpotResolvedJavaType} corresponding to {@code javaClass} |
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
78 */ |
22598
ed53e370f04c
Make implementation classes package private.
Roland Schatz <roland.schatz@oracle.com>
parents:
22590
diff
changeset
|
79 static HotSpotResolvedObjectTypeImpl fromObjectClass(Class<?> javaClass) { |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
80 return (HotSpotResolvedObjectTypeImpl) runtime().fromClass(javaClass); |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
81 } |
5760
87e8baf5447c
added snippets for lowering array creation and initialization (in NewObjectSnippets)
Doug Simon <doug.simon@oracle.com>
parents:
5686
diff
changeset
|
82 |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
83 /** |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
84 * Gets the JVMCI mirror from a HotSpot type. Since {@link Class} is already a proxy for the |
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
85 * underlying Klass*, it is used instead of the raw Klass*. |
14980 | 86 * |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
87 * Called from the VM. |
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
88 * |
22455
7ad03bf3d4a9
renames related to using metaspace wrappers instead of raw metaspace values
Doug Simon <doug.simon@oracle.com>
parents:
22454
diff
changeset
|
89 * @param javaClass a {@link Class} object |
7ad03bf3d4a9
renames related to using metaspace wrappers instead of raw metaspace values
Doug Simon <doug.simon@oracle.com>
parents:
22454
diff
changeset
|
90 * @return the {@link ResolvedJavaType} corresponding to {@code javaClass} |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
91 */ |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
92 @SuppressWarnings("unused") |
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
93 private static HotSpotResolvedObjectTypeImpl fromMetaspace(Class<?> javaClass) { |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
94 return fromObjectClass(javaClass); |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
95 } |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
96 |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
97 /** |
21789
5b9adb645217
fixed remnants of "graal" names in JVMCI code
Doug Simon <doug.simon@oracle.com>
parents:
21556
diff
changeset
|
98 * Creates the JVMCI mirror for a {@link Class} object. |
14980 | 99 * |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
100 * <p> |
13479 | 101 * <b>NOTE</b>: Creating an instance of this class does not install the mirror for the |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
102 * {@link Class} type. Use {@link #fromObjectClass(Class)} or {@link #fromMetaspace(Class)} |
18556
7484f5fcd41d
removed a usages of HotSpotGraalRuntime.unsafeReadWord(); tidied up some comments
Doug Simon <doug.simon@oracle.com>
parents:
18534
diff
changeset
|
103 * instead. |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
104 * </p> |
14980 | 105 * |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
106 * @param javaClass the Class to create the mirror for |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
107 * @param context |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
108 */ |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
109 HotSpotResolvedObjectTypeImpl(Class<?> javaClass, HotSpotJVMCIMetaAccessContext context) { |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
110 super(getSignatureName(javaClass)); |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
111 this.javaClass = javaClass; |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
112 this.context = context; |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
113 assert getName().charAt(0) != '[' || isArray() : getName(); |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
114 } |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
115 |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
116 /** |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
117 * Returns the name of this type as it would appear in a signature. |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
118 */ |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
119 private static String getSignatureName(Class<?> javaClass) { |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
120 if (javaClass.isArray()) { |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
121 return javaClass.getName().replace('.', '/'); |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
122 } |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
123 return "L" + javaClass.getName().replace('.', '/') + ";"; |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
124 } |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
125 |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
126 /** |
14091
ed92bc6900d5
simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents:
14069
diff
changeset
|
127 * Gets the metaspace Klass for this type. |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
128 */ |
22598
ed53e370f04c
Make implementation classes package private.
Roland Schatz <roland.schatz@oracle.com>
parents:
22590
diff
changeset
|
129 long getMetaspaceKlass() { |
22536
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
130 if (HotSpotJVMCIRuntime.getHostWordKind() == JavaKind.Long) { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
131 return UNSAFE.getLong(javaClass, (long) config().klassOffset); |
18556
7484f5fcd41d
removed a usages of HotSpotGraalRuntime.unsafeReadWord(); tidied up some comments
Doug Simon <doug.simon@oracle.com>
parents:
18534
diff
changeset
|
132 } |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
133 return UNSAFE.getInt(javaClass, (long) config().klassOffset) & 0xFFFFFFFFL; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
134 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
135 |
23673
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
136 @Override |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
137 public long getMetaspacePointer() { |
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
138 return getMetaspaceKlass(); |
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
139 } |
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
140 |
23673
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
141 /** |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
142 * The Klass* for this object is kept alive by the direct reference to {@link #javaClass} so no |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
143 * extra work is required. |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
144 */ |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
145 @Override |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
146 public boolean isRegistered() { |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
147 return true; |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
148 } |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
149 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
150 @Override |
6539
2463eb24b644
Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6430
diff
changeset
|
151 public int getModifiers() { |
22011
4c9d4fe1cbd8
Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21798
diff
changeset
|
152 if (isArray()) { |
4c9d4fe1cbd8
Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21798
diff
changeset
|
153 return (getElementalType().getModifiers() & (Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED)) | Modifier.FINAL | Modifier.ABSTRACT; |
4c9d4fe1cbd8
Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21798
diff
changeset
|
154 } else { |
23749
d6bd0b9cd0b6
remove uses of setAccessible (JDK-8165434)
Doug Simon <doug.simon@oracle.com>
parents:
23738
diff
changeset
|
155 return getAccessFlags() & jvmClassModifiers(); |
22011
4c9d4fe1cbd8
Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21798
diff
changeset
|
156 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
157 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
158 |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
159 public int getAccessFlags() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
160 HotSpotVMConfig config = config(); |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
161 return UNSAFE.getInt(getMetaspaceKlass() + config.klassAccessFlagsOffset); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
162 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
163 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
164 @Override |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
165 public HotSpotResolvedObjectType getArrayClass() { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
166 if (arrayOfType == null) { |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
167 arrayOfType = fromObjectClass(Array.newInstance(mirror(), 0).getClass()); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
168 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
169 return arrayOfType; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
170 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
171 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
172 @Override |
6539
2463eb24b644
Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6430
diff
changeset
|
173 public ResolvedJavaType getComponentType() { |
15040
288c23143d47
Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents:
15018
diff
changeset
|
174 Class<?> javaComponentType = mirror().getComponentType(); |
22422
a98a02bad801
Add simple interface to control caching policy for ResolvedJavaTypes
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22254
diff
changeset
|
175 return javaComponentType == null ? null : runtime().fromClass(javaComponentType); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
176 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
177 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
178 @Override |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
179 public AssumptionResult<ResolvedJavaType> findLeafConcreteSubtype() { |
23340
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
180 if (isLeaf()) { |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
181 // No assumptions are required. |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
182 return new AssumptionResult<>(this); |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
183 } |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
184 HotSpotVMConfig config = config(); |
7060
06d5f450f32b
rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents:
7059
diff
changeset
|
185 if (isArray()) { |
23338
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
186 ResolvedJavaType elementalType = getElementalType(); |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
187 AssumptionResult<ResolvedJavaType> elementType = elementalType.findLeafConcreteSubtype(); |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
188 if (elementType != null && elementType.getResult().equals(elementalType)) { |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
189 /* |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
190 * If the elementType is leaf then the array is leaf under the same assumptions but |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
191 * only if the element type is exactly the leaf type. The element type can be |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
192 * abstract even if there is only one implementor of the abstract type. |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
193 */ |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
194 AssumptionResult<ResolvedJavaType> result = new AssumptionResult<>(this); |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
195 result.add(elementType); |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
196 return result; |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
197 } |
a3471785190d
findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23336
diff
changeset
|
198 return null; |
7225
31c4d9f9e922
adder better CHA support
Christian Haeubl <haeubl@ssw.jku.at>
parents:
7221
diff
changeset
|
199 } else if (isInterface()) { |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
200 HotSpotResolvedObjectTypeImpl implementor = getSingleImplementor(); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
201 /* |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
202 * If the implementor field contains itself that indicates that the interface has more |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
203 * than one implementors (see: InstanceKlass::add_implementor). |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
204 */ |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
205 if (implementor == null || implementor.equals(this)) { |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
206 return null; |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
207 } |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
208 |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
209 assert !implementor.isInterface(); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
210 if (implementor.isAbstract() || !implementor.isLeafClass()) { |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
211 AssumptionResult<ResolvedJavaType> leafConcreteSubtype = implementor.findLeafConcreteSubtype(); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
212 if (leafConcreteSubtype != null) { |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
213 assert !leafConcreteSubtype.getResult().equals(implementor); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
214 AssumptionResult<ResolvedJavaType> newResult = new AssumptionResult<>(leafConcreteSubtype.getResult(), new ConcreteSubtype(this, implementor)); |
20009
426e45c75771
Properly accumulate assumptions
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
215 // Accumulate leaf assumptions and return the combined result. |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
216 newResult.add(leafConcreteSubtype); |
20009
426e45c75771
Properly accumulate assumptions
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
217 return newResult; |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
218 } |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
219 return null; |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
220 } |
23340
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
221 return concreteSubtype(implementor); |
4433
b494d6f329a3
some more checkcast opts
Lukas Stadler <lukas.stadler@jku.at>
parents:
4220
diff
changeset
|
222 } else { |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
223 HotSpotResolvedObjectTypeImpl type = this; |
15311
820c6d353358
added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents:
15291
diff
changeset
|
224 while (type.isAbstract()) { |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
225 HotSpotResolvedObjectTypeImpl subklass = type.getSubklass(); |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
226 if (subklass == null || UNSAFE.getAddress(subklass.getMetaspaceKlass() + config.nextSiblingOffset) != 0) { |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
227 return null; |
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
228 } |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
229 type = subklass; |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
230 } |
15311
820c6d353358
added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents:
15291
diff
changeset
|
231 if (type.isAbstract() || type.isInterface() || !type.isLeafClass()) { |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
232 return null; |
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
233 } |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
234 if (this.isAbstract()) { |
23340
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
235 return concreteSubtype(type); |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
236 } else { |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
237 assert this.equals(type); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
238 return new AssumptionResult<>(type, new LeafType(type)); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
239 } |
4433
b494d6f329a3
some more checkcast opts
Lukas Stadler <lukas.stadler@jku.at>
parents:
4220
diff
changeset
|
240 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
241 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
242 |
23340
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
243 private AssumptionResult<ResolvedJavaType> concreteSubtype(HotSpotResolvedObjectTypeImpl type) { |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
244 if (type.isLeaf()) { |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
245 return new AssumptionResult<>(type, new ConcreteSubtype(this, type)); |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
246 } else { |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
247 return new AssumptionResult<>(type, new LeafType(type), new ConcreteSubtype(this, type)); |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
248 } |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
249 } |
22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23338
diff
changeset
|
250 |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
251 /** |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
252 * Returns if type {@code type} is a leaf class. This is the case if the |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
253 * {@code Klass::_subklass} field of the underlying class is zero. |
14980 | 254 * |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
255 * @return true if the type is a leaf class |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
256 */ |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
257 private boolean isLeafClass() { |
23991
4913d70f630b
Use direct memory access when checking for a leaf class.
Christian Haeubl <christian.haeubl@oracle.com>
parents:
23989
diff
changeset
|
258 return UNSAFE.getLong(this.getMetaspaceKlass() + config().subklassOffset) == 0; |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
259 } |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
260 |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
261 /** |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
262 * Returns the {@code Klass::_subklass} field of the underlying metaspace klass for the given |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
263 * type {@code type}. |
14980 | 264 * |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
265 * @return value of the subklass field as metaspace klass pointer |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
266 */ |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
267 private HotSpotResolvedObjectTypeImpl getSubklass() { |
22582
232c53e17ea0
added CompilerToVM.compilerToVM() for static access to the CompilerToVM instance
Doug Simon <doug.simon@oracle.com>
parents:
22581
diff
changeset
|
268 return compilerToVM().getResolvedJavaType(this, config().subklassOffset, false); |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
269 } |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13375
diff
changeset
|
270 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
271 @Override |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
272 public HotSpotResolvedObjectTypeImpl getSuperclass() { |
15040
288c23143d47
Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents:
15018
diff
changeset
|
273 Class<?> javaSuperclass = mirror().getSuperclass(); |
22505
575eb1036ea9
fixed all existing -Xlint warnings
Doug Simon <doug.simon@oracle.com>
parents:
22455
diff
changeset
|
274 return javaSuperclass == null ? null : fromObjectClass(javaSuperclass); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
275 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
276 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
277 @Override |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
278 public HotSpotResolvedObjectTypeImpl[] getInterfaces() { |
6699
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
279 if (interfaces == null) { |
15040
288c23143d47
Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents:
15018
diff
changeset
|
280 Class<?>[] javaInterfaces = mirror().getInterfaces(); |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
281 HotSpotResolvedObjectTypeImpl[] result = new HotSpotResolvedObjectTypeImpl[javaInterfaces.length]; |
6699
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
282 for (int i = 0; i < javaInterfaces.length; i++) { |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
283 result[i] = fromObjectClass(javaInterfaces[i]); |
6699
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
284 } |
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
285 interfaces = result; |
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
286 } |
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
287 return interfaces; |
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
288 } |
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
289 |
18182
e8c54fd622a4
Add ResolvedJavaType.getImplementor().
Josef Eisl <josef.eisl@jku.at>
parents:
18176
diff
changeset
|
290 @Override |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
291 public HotSpotResolvedObjectTypeImpl getSingleImplementor() { |
18182
e8c54fd622a4
Add ResolvedJavaType.getImplementor().
Josef Eisl <josef.eisl@jku.at>
parents:
18176
diff
changeset
|
292 if (!isInterface()) { |
23392
b3a816d3b844
Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents:
23387
diff
changeset
|
293 throw new JVMCIError("Cannot call getSingleImplementor() on a non-interface type: %s", this); |
18182
e8c54fd622a4
Add ResolvedJavaType.getImplementor().
Josef Eisl <josef.eisl@jku.at>
parents:
18176
diff
changeset
|
294 } |
22582
232c53e17ea0
added CompilerToVM.compilerToVM() for static access to the CompilerToVM instance
Doug Simon <doug.simon@oracle.com>
parents:
22581
diff
changeset
|
295 return compilerToVM().getImplementor(this); |
18182
e8c54fd622a4
Add ResolvedJavaType.getImplementor().
Josef Eisl <josef.eisl@jku.at>
parents:
18176
diff
changeset
|
296 } |
e8c54fd622a4
Add ResolvedJavaType.getImplementor().
Josef Eisl <josef.eisl@jku.at>
parents:
18176
diff
changeset
|
297 |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
298 public HotSpotResolvedObjectTypeImpl getSupertype() { |
7060
06d5f450f32b
rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents:
7059
diff
changeset
|
299 if (isArray()) { |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
300 ResolvedJavaType componentType = getComponentType(); |
14091
ed92bc6900d5
simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents:
14069
diff
changeset
|
301 if (mirror() == Object[].class || componentType.isPrimitive()) { |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
302 return fromObjectClass(Object.class); |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
303 } |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
304 return (HotSpotResolvedObjectTypeImpl) ((HotSpotResolvedObjectTypeImpl) componentType).getSupertype().getArrayClass(); |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
305 } |
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
306 if (isInterface()) { |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
307 return fromObjectClass(Object.class); |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
308 } |
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
309 return getSuperclass(); |
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
310 } |
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
311 |
6699
d79098b9db3b
Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6588
diff
changeset
|
312 @Override |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
313 public HotSpotResolvedObjectType findLeastCommonAncestor(ResolvedJavaType otherType) { |
7059
e4d9f153934f
removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents:
7057
diff
changeset
|
314 if (otherType.isPrimitive()) { |
4635
f35c183f33ce
fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents:
4484
diff
changeset
|
315 return null; |
f35c183f33ce
fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents:
4484
diff
changeset
|
316 } else { |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
317 HotSpotResolvedObjectTypeImpl t1 = this; |
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
318 HotSpotResolvedObjectTypeImpl t2 = (HotSpotResolvedObjectTypeImpl) otherType; |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
319 while (true) { |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
320 if (t1.isAssignableFrom(t2)) { |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
321 return t1; |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
322 } |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
323 if (t2.isAssignableFrom(t1)) { |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
324 return t2; |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
325 } |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
326 t1 = t1.getSupertype(); |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
327 t2 = t2.getSupertype(); |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
328 } |
4635
f35c183f33ce
fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents:
4484
diff
changeset
|
329 } |
f35c183f33ce
fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents:
4484
diff
changeset
|
330 } |
f35c183f33ce
fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents:
4484
diff
changeset
|
331 |
f35c183f33ce
fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents:
4484
diff
changeset
|
332 @Override |
19800
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
333 public AssumptionResult<Boolean> hasFinalizableSubclass() { |
9126
bc26f978b0ce
HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
Bernhard Urban <bernhard.urban@jku.at>
parents:
9100
diff
changeset
|
334 assert !isArray(); |
22582
232c53e17ea0
added CompilerToVM.compilerToVM() for static access to the CompilerToVM instance
Doug Simon <doug.simon@oracle.com>
parents:
22581
diff
changeset
|
335 if (!compilerToVM().hasFinalizableSubclass(this)) { |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
336 return new AssumptionResult<>(false, new NoFinalizableSubclass(this)); |
19800
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
337 } |
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
338 return new AssumptionResult<>(true); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
339 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
340 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
341 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
342 public boolean hasFinalizer() { |
23738
1140503536ae
Backport style fixes and comments from jdk9.
Roland Schatz <roland.schatz@oracle.com>
parents:
23734
diff
changeset
|
343 return (getAccessFlags() & config().klassHasFinalizerFlag) != 0; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
344 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
345 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
346 @Override |
7059
e4d9f153934f
removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents:
7057
diff
changeset
|
347 public boolean isPrimitive() { |
e4d9f153934f
removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents:
7057
diff
changeset
|
348 return false; |
e4d9f153934f
removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents:
7057
diff
changeset
|
349 } |
e4d9f153934f
removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents:
7057
diff
changeset
|
350 |
e4d9f153934f
removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents:
7057
diff
changeset
|
351 @Override |
7060
06d5f450f32b
rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents:
7059
diff
changeset
|
352 public boolean isArray() { |
14091
ed92bc6900d5
simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents:
14069
diff
changeset
|
353 return mirror().isArray(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
354 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
355 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
356 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
357 public boolean isInitialized() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
358 return isArray() ? true : getInitState() == config().instanceKlassStateFullyInitialized; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
359 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
360 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
361 @Override |
11520
7cca436d600b
Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11431
diff
changeset
|
362 public boolean isLinked() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
363 return isArray() ? true : getInitState() >= config().instanceKlassStateLinked; |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
364 } |
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
365 |
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
366 /** |
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
367 * Returns the value of the state field {@code InstanceKlass::_init_state} of the metaspace |
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
368 * klass. |
14980 | 369 * |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
370 * @return state field value of this type |
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
371 */ |
16386
9ce3b1efc4e7
InstanceKlass::_init_state only exists for InstanceKlasses
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16384
diff
changeset
|
372 private int getInitState() { |
9ce3b1efc4e7
InstanceKlass::_init_state only exists for InstanceKlasses
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16384
diff
changeset
|
373 assert !isArray() : "_init_state only exists in InstanceKlass"; |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
374 return UNSAFE.getByte(getMetaspaceKlass() + config().instanceKlassInitStateOffset) & 0xFF; |
11520
7cca436d600b
Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11431
diff
changeset
|
375 } |
7cca436d600b
Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11431
diff
changeset
|
376 |
7cca436d600b
Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11431
diff
changeset
|
377 @Override |
6549
15e04f248d6b
Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6539
diff
changeset
|
378 public void initialize() { |
13214
3f34b8f91cc5
moved CompilerToVM.isTypeInitialized and isTypeLinked to Java
twisti
parents:
12559
diff
changeset
|
379 if (!isInitialized()) { |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
380 UNSAFE.ensureClassInitialized(mirror()); |
13214
3f34b8f91cc5
moved CompilerToVM.isTypeInitialized and isTypeLinked to Java
twisti
parents:
12559
diff
changeset
|
381 assert isInitialized(); |
6549
15e04f248d6b
Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6539
diff
changeset
|
382 } |
15e04f248d6b
Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6539
diff
changeset
|
383 } |
15e04f248d6b
Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6539
diff
changeset
|
384 |
15e04f248d6b
Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6539
diff
changeset
|
385 @Override |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
18182
diff
changeset
|
386 public boolean isInstance(JavaConstant obj) { |
22536
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
387 if (obj.getJavaKind() == JavaKind.Object && !obj.isNull()) { |
18290
e7d219e9d01f
removed HotSpotObjectConstantImpl.asObject()
Doug Simon <doug.simon@oracle.com>
parents:
18266
diff
changeset
|
388 return mirror().isInstance(((HotSpotObjectConstantImpl) obj).object()); |
7015
62818f156081
added ResolvedJavaType.isClass(Class c) to replace some uses of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents:
6996
diff
changeset
|
389 } |
62818f156081
added ResolvedJavaType.isClass(Class c) to replace some uses of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents:
6996
diff
changeset
|
390 return false; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
391 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
392 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
393 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
394 public boolean isInstanceClass() { |
7060
06d5f450f32b
rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents:
7059
diff
changeset
|
395 return !isArray() && !isInterface(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
396 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
397 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
398 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
399 public boolean isInterface() { |
14091
ed92bc6900d5
simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents:
14069
diff
changeset
|
400 return mirror().isInterface(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
401 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
402 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
403 @Override |
7097
6644cecbd3a7
Replace ResolvedJavaType.isAssignableTo with isAssignableFrom to be consistent with java.lang.Class
Christian Wimmer <christian.wimmer@oracle.com>
parents:
7096
diff
changeset
|
404 public boolean isAssignableFrom(ResolvedJavaType other) { |
9835
fcfedd3dd2eb
ResolvedJavaType.isAssignableFrom must not be called with null argument. Check that with assertions in HotSpot implementation.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
9289
diff
changeset
|
405 assert other != null; |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
406 if (other instanceof HotSpotResolvedObjectTypeImpl) { |
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
407 HotSpotResolvedObjectTypeImpl otherType = (HotSpotResolvedObjectTypeImpl) other; |
14091
ed92bc6900d5
simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents:
14069
diff
changeset
|
408 return mirror().isAssignableFrom(otherType.mirror()); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
409 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
410 return false; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
411 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
412 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
413 @Override |
16491
4d7a9829315e
moved isJavaLangObject(ResolvedJavaType type) from MetaUtil to be a default method in ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
16476
diff
changeset
|
414 public boolean isJavaLangObject() { |
4d7a9829315e
moved isJavaLangObject(ResolvedJavaType type) from MetaUtil to be a default method in ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
16476
diff
changeset
|
415 return javaClass.equals(Object.class); |
4d7a9829315e
moved isJavaLangObject(ResolvedJavaType type) from MetaUtil to be a default method in ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
16476
diff
changeset
|
416 } |
4d7a9829315e
moved isJavaLangObject(ResolvedJavaType type) from MetaUtil to be a default method in ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
16476
diff
changeset
|
417 |
4d7a9829315e
moved isJavaLangObject(ResolvedJavaType type) from MetaUtil to be a default method in ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
16476
diff
changeset
|
418 @Override |
22536
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
419 public JavaKind getJavaKind() { |
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
420 return JavaKind.Object; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
421 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
422 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
423 @Override |
23347
7ae6a635fad0
8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23340
diff
changeset
|
424 public ResolvedJavaMethod resolveMethod(ResolvedJavaMethod method, ResolvedJavaType callerType) { |
7ae6a635fad0
8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23340
diff
changeset
|
425 assert !callerType.isArray(); |
7ae6a635fad0
8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23340
diff
changeset
|
426 if (isInterface()) { |
7ae6a635fad0
8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23340
diff
changeset
|
427 // Methods can only be resolved against concrete types |
16384
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
428 return null; |
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
429 } |
18823
5a21cac1968f
Add utilities ModifiersProvider#isConcrete, ResolvedJavaMethod#hasReceiver, ResolvedJavaMethod#hasBytecodes to Graal API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18789
diff
changeset
|
430 if (method.isConcrete() && method.getDeclaringClass().equals(this) && method.isPublic()) { |
14604
bd7cf02d1756
added fast path for HotSpotResolvedObjectType.resolveMethod() when the receiver is the declarer of the method
Doug Simon <doug.simon@oracle.com>
parents:
14158
diff
changeset
|
431 return method; |
bd7cf02d1756
added fast path for HotSpotResolvedObjectType.resolveMethod() when the receiver is the declarer of the method
Doug Simon <doug.simon@oracle.com>
parents:
14158
diff
changeset
|
432 } |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15311
diff
changeset
|
433 if (!method.getDeclaringClass().isAssignableFrom(this)) { |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15311
diff
changeset
|
434 return null; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15311
diff
changeset
|
435 } |
18222
a8cff27ca2e1
converted HotSpotResolvedJavaMethod to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18194
diff
changeset
|
436 HotSpotResolvedJavaMethodImpl hotSpotMethod = (HotSpotResolvedJavaMethodImpl) method; |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
437 HotSpotResolvedObjectTypeImpl hotSpotCallerType = (HotSpotResolvedObjectTypeImpl) callerType; |
22582
232c53e17ea0
added CompilerToVM.compilerToVM() for static access to the CompilerToVM instance
Doug Simon <doug.simon@oracle.com>
parents:
22581
diff
changeset
|
438 return compilerToVM().resolveMethod(this, hotSpotMethod, hotSpotCallerType); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
439 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
440 |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
441 public HotSpotConstantPool getConstantPool() { |
23673
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
442 if (constantPool == null || !isArray() && UNSAFE.getAddress(getMetaspaceKlass() + config().instanceKlassConstantsOffset) != constantPool.getMetaspaceConstantPool()) { |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
443 /* |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
444 * If the pointer to the ConstantPool has changed since this was last read refresh the |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
445 * HotSpotConstantPool wrapper object. This ensures that uses of the constant pool are |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
446 * operating on the latest one and that HotSpotResolvedJavaMethodImpls will be able to |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
447 * use the shared copy instead of creating their own instance. |
7ef84c807bfe
8159010: [JVMCI] crashes with class redefinition
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23393
diff
changeset
|
448 */ |
23734
2e17c65dddd7
8163105: SIGSEGV: constantPoolHandle::constantPoolHandle(ConstantPool*)
Doug Simon <doug.simon@oracle.com>
parents:
23703
diff
changeset
|
449 constantPool = compilerToVM().getConstantPool(this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
450 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
451 return constantPool; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
452 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
453 |
5616
310ed6650682
added check to ensure fast path allocation is never used for types that don't allow it
Doug Simon <doug.simon@oracle.com>
parents:
5554
diff
changeset
|
454 /** |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
455 * Gets the instance size of this type. If an instance of this type cannot be fast path |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
456 * allocated, then the returned value is negative (its absolute value gives the size). Must not |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7359
diff
changeset
|
457 * be called if this is an array or interface type. |
5616
310ed6650682
added check to ensure fast path allocation is never used for types that don't allow it
Doug Simon <doug.simon@oracle.com>
parents:
5554
diff
changeset
|
458 */ |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
459 public int instanceSize() { |
7060
06d5f450f32b
rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents:
7059
diff
changeset
|
460 assert !isArray(); |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
461 assert !isInterface(); |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
462 |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
463 HotSpotVMConfig config = config(); |
22254
efeabef8df70
Improve DynamicNewArrayNode code generation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22165
diff
changeset
|
464 final int layoutHelper = layoutHelper(); |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
465 assert layoutHelper > config.klassLayoutHelperNeutralValue : "must be instance"; |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
466 |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
467 // See: Klass::layout_helper_size_in_bytes |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
468 int size = layoutHelper & ~config.klassLayoutHelperInstanceSlowPathBit; |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
469 |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
470 // See: Klass::layout_helper_needs_slow_path |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
471 boolean needsSlowPath = (layoutHelper & config.klassLayoutHelperInstanceSlowPathBit) != 0; |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
472 |
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
473 return needsSlowPath ? -size : size; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
474 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
475 |
22254
efeabef8df70
Improve DynamicNewArrayNode code generation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22165
diff
changeset
|
476 public int layoutHelper() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
477 HotSpotVMConfig config = config(); |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
478 return UNSAFE.getInt(getMetaspaceKlass() + config.klassLayoutHelperOffset); |
22254
efeabef8df70
Improve DynamicNewArrayNode code generation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22165
diff
changeset
|
479 } |
efeabef8df70
Improve DynamicNewArrayNode code generation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22165
diff
changeset
|
480 |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
481 synchronized HotSpotResolvedJavaMethod createMethod(long metaspaceMethod) { |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
482 // Maintain cache as array. |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
483 if (methodCacheArray == null) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
484 methodCacheArray = new HotSpotResolvedJavaMethodImpl[METHOD_CACHE_ARRAY_CAPACITY]; |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
485 } |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
486 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
487 int i = 0; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
488 for (; i < methodCacheArray.length; ++i) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
489 HotSpotResolvedJavaMethodImpl curMethod = methodCacheArray[i]; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
490 if (curMethod == null) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
491 HotSpotResolvedJavaMethodImpl newMethod = new HotSpotResolvedJavaMethodImpl(this, metaspaceMethod); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
492 methodCacheArray[i] = newMethod; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
493 context.add(newMethod); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
494 return newMethod; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
495 } else if (curMethod.getMetaspacePointer() == metaspaceMethod) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
496 return curMethod; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
497 } |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
498 } |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
499 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
500 // Fall-back to hash table. |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
501 if (methodCacheHashMap == null) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
502 methodCacheHashMap = new HashMap<>(); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
503 } |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
504 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
505 HotSpotResolvedJavaMethodImpl lookupResult = methodCacheHashMap.get(metaspaceMethod); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
506 if (lookupResult == null) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
507 HotSpotResolvedJavaMethodImpl newMethod = new HotSpotResolvedJavaMethodImpl(this, metaspaceMethod); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
508 methodCacheHashMap.put(metaspaceMethod, newMethod); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
509 context.add(lookupResult); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
510 return newMethod; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
511 } else { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
512 return lookupResult; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
513 } |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
514 } |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
515 |
16615
3812931f9350
Don't read beyond end of known vtable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16575
diff
changeset
|
516 public int getVtableLength() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
517 HotSpotVMConfig config = config(); |
16615
3812931f9350
Don't read beyond end of known vtable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16575
diff
changeset
|
518 if (isInterface() || isArray()) { |
3812931f9350
Don't read beyond end of known vtable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16575
diff
changeset
|
519 /* Everything has the core vtable of java.lang.Object */ |
23679
b5557b757040
fix HotSpotVMConfig startup performance (JDK-8159167)
Doug Simon <doug.simon@oracle.com>
parents:
23677
diff
changeset
|
520 return config.baseVtableLength(); |
16615
3812931f9350
Don't read beyond end of known vtable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16575
diff
changeset
|
521 } |
23679
b5557b757040
fix HotSpotVMConfig startup performance (JDK-8159167)
Doug Simon <doug.simon@oracle.com>
parents:
23677
diff
changeset
|
522 int result = UNSAFE.getInt(getMetaspaceKlass() + config.klassVtableLengthOffset) / (config.vtableEntrySize / config.heapWordSize); |
b5557b757040
fix HotSpotVMConfig startup performance (JDK-8159167)
Doug Simon <doug.simon@oracle.com>
parents:
23677
diff
changeset
|
523 assert result >= config.baseVtableLength() : UNSAFE.getInt(getMetaspaceKlass() + config.klassVtableLengthOffset) + " " + config.vtableEntrySize; |
16615
3812931f9350
Don't read beyond end of known vtable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16575
diff
changeset
|
524 return result; |
3812931f9350
Don't read beyond end of known vtable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16575
diff
changeset
|
525 } |
3812931f9350
Don't read beyond end of known vtable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16575
diff
changeset
|
526 |
23989
115d4e0d7b87
removed HotSpotResolvedJavaFieldImpl.name field
Doug Simon <doug.simon@oracle.com>
parents:
23987
diff
changeset
|
527 synchronized HotSpotResolvedJavaField createField(JavaType type, long offset, int rawFlags, int index) { |
115d4e0d7b87
removed HotSpotResolvedJavaFieldImpl.name field
Doug Simon <doug.simon@oracle.com>
parents:
23987
diff
changeset
|
528 return new HotSpotResolvedJavaFieldImpl(this, type, offset, rawFlags, index); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
529 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
530 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
531 @Override |
19800
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
532 public AssumptionResult<ResolvedJavaMethod> findUniqueConcreteMethod(ResolvedJavaMethod method) { |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
533 HotSpotResolvedJavaMethod hmethod = (HotSpotResolvedJavaMethod) method; |
18323
301c5e3d683a
removed *Impl types in signatures of Remote interfaces
Doug Simon <doug.simon@oracle.com>
parents:
18290
diff
changeset
|
534 HotSpotResolvedObjectType declaredHolder = hmethod.getDeclaringClass(); |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
535 /* |
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
536 * Sometimes the receiver type in the graph hasn't stabilized to a subtype of declared |
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
537 * holder, usually because of phis, so make sure that the type is related to the declared |
16384
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
538 * type before using it for lookup. Unlinked types should also be ignored because we can't |
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
539 * resolve the proper method to invoke. Generally unlinked types in invokes should result in |
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
540 * a deopt instead since they can't really be used if they aren't linked yet. |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
541 */ |
16384
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
542 if (!declaredHolder.isAssignableFrom(this) || this.isArray() || this.equals(declaredHolder) || !isLinked() || isInterface()) { |
19800
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
543 ResolvedJavaMethod result = hmethod.uniqueConcreteMethod(declaredHolder); |
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
544 if (result != null) { |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
545 return new AssumptionResult<>(result, new ConcreteMethod(method, declaredHolder, result)); |
19800
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
546 } |
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
547 return null; |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
548 } |
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
549 /* |
18789 | 550 * The holder may be a subtype of the declaredHolder so make sure to resolve the method to |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
551 * the correct method for the subtype. |
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
552 */ |
22165
af6cc957bf04
Remove dummy parameter `includeAbstract` from `ResolvedJavaType#resolveMethod()`;
Josef Eisl <josef.eisl@jku.at>
parents:
22054
diff
changeset
|
553 HotSpotResolvedJavaMethod resolvedMethod = (HotSpotResolvedJavaMethod) resolveMethod(hmethod, this); |
16384
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
554 if (resolvedMethod == null) { |
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
555 // The type isn't known to implement the method. |
5d7b90ab9787
Ensure that uniqueConcreteMethod is called with a resolved concrete method
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16184
diff
changeset
|
556 return null; |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
557 } |
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15839
diff
changeset
|
558 |
19800
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
559 ResolvedJavaMethod result = resolvedMethod.uniqueConcreteMethod(this); |
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
560 if (result != null) { |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19800
diff
changeset
|
561 return new AssumptionResult<>(result, new ConcreteMethod(method, this, result)); |
19800
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
562 } |
3362ba500371
Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19743
diff
changeset
|
563 return null; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
564 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
565 |
23996
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
566 FieldInfo createFieldInfo(int index) { |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
567 return new FieldInfo(index); |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
568 } |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
569 |
14012 | 570 /** |
571 * This class represents the field information for one field contained in the fields array of an | |
572 * {@code InstanceKlass}. The implementation is similar to the native {@code FieldInfo} class. | |
573 */ | |
23996
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
574 class FieldInfo { |
14012 | 575 /** |
576 * Native pointer into the array of Java shorts. | |
577 */ | |
578 private final long metaspaceData; | |
579 | |
580 /** | |
581 * Creates a field info for the field in the fields array at index {@code index}. | |
14980 | 582 * |
14012 | 583 * @param index index to the fields array |
584 */ | |
23297
4b58c92e939b
remove redundant modifiers
Manuel Rigger <rigger.manuel@gmail.com>
parents:
23290
diff
changeset
|
585 FieldInfo(int index) { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
586 HotSpotVMConfig config = config(); |
14012 | 587 // Get Klass::_fields |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
588 final long metaspaceFields = UNSAFE.getAddress(getMetaspaceKlass() + config.instanceKlassFieldsOffset); |
14012 | 589 assert config.fieldInfoFieldSlots == 6 : "revisit the field parsing code"; |
23700
9e1235406b59
[Findbugs] various warnings reported for JVMCI sources (JDK-8159613)
Doug Simon <doug.simon@oracle.com>
parents:
23679
diff
changeset
|
590 int offset = config.fieldInfoFieldSlots * Short.BYTES * index; |
9e1235406b59
[Findbugs] various warnings reported for JVMCI sources (JDK-8159613)
Doug Simon <doug.simon@oracle.com>
parents:
23679
diff
changeset
|
591 metaspaceData = metaspaceFields + config.arrayU2DataOffset + offset; |
14012 | 592 } |
593 | |
594 private int getAccessFlags() { | |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
595 return readFieldSlot(config().fieldInfoAccessFlagsOffset); |
14012 | 596 } |
597 | |
23996
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
598 private int getNameIndex() { |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
599 return readFieldSlot(config().fieldInfoNameIndexOffset); |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
600 } |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
601 |
14012 | 602 private int getSignatureIndex() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
603 return readFieldSlot(config().fieldInfoSignatureIndexOffset); |
14012 | 604 } |
605 | |
606 public int getOffset() { | |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
607 HotSpotVMConfig config = config(); |
14012 | 608 final int lowPacked = readFieldSlot(config.fieldInfoLowPackedOffset); |
609 final int highPacked = readFieldSlot(config.fieldInfoHighPackedOffset); | |
610 final int offset = ((highPacked << Short.SIZE) | lowPacked) >> config.fieldInfoTagSize; | |
611 return offset; | |
612 } | |
613 | |
614 /** | |
615 * Helper method to read an entry (slot) from the field array. Currently field info is laid | |
616 * on top an array of Java shorts. | |
617 */ | |
618 private int readFieldSlot(int index) { | |
23700
9e1235406b59
[Findbugs] various warnings reported for JVMCI sources (JDK-8159613)
Doug Simon <doug.simon@oracle.com>
parents:
23679
diff
changeset
|
619 int offset = Short.BYTES * index; |
9e1235406b59
[Findbugs] various warnings reported for JVMCI sources (JDK-8159613)
Doug Simon <doug.simon@oracle.com>
parents:
23679
diff
changeset
|
620 return UNSAFE.getChar(metaspaceData + offset); |
14012 | 621 } |
622 | |
623 /** | |
23996
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
624 * Returns the name of this field as a {@link String}. If the field is an internal field the |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
625 * name index is pointing into the vmSymbols table. |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
626 */ |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
627 public String getName() { |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
628 final int nameIndex = getNameIndex(); |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
629 return isInternal() ? config().symbolAt(nameIndex) : getConstantPool().lookupUtf8(nameIndex); |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
630 } |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
631 |
11f0412408cd
8173912: [JVMCI] fix memory overhead of JVMCI
Doug Simon <doug.simon@oracle.com>
parents:
23991
diff
changeset
|
632 /** |
14012 | 633 * Returns the signature of this field as {@link String}. If the field is an internal field |
634 * the signature index is pointing into the vmSymbols table. | |
635 */ | |
636 public String getSignature() { | |
637 final int signatureIndex = getSignatureIndex(); | |
23703
9ac04c6047c8
sync with jdk9 changes for JDK-8159613
Doug Simon <doug.simon@oracle.com>
parents:
23700
diff
changeset
|
638 return isInternal() ? config().symbolAt(signatureIndex) : getConstantPool().lookupUtf8(signatureIndex); |
14012 | 639 } |
640 | |
641 public JavaType getType() { | |
642 String signature = getSignature(); | |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
643 return runtime().lookupType(signature, HotSpotResolvedObjectTypeImpl.this, false); |
14012 | 644 } |
645 | |
646 private boolean isInternal() { | |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
647 return (getAccessFlags() & config().jvmAccFieldInternal) != 0; |
14012 | 648 } |
649 | |
650 public boolean isStatic() { | |
651 return Modifier.isStatic(getAccessFlags()); | |
652 } | |
653 | |
654 public boolean hasGenericSignature() { | |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
655 return (getAccessFlags() & config().jvmAccFieldHasGenericSignature) != 0; |
14012 | 656 } |
657 } | |
658 | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
659 @Override |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
660 public ResolvedJavaField[] getInstanceFields(boolean includeSuperclasses) { |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
661 if (instanceFields == null) { |
7060
06d5f450f32b
rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents:
7059
diff
changeset
|
662 if (isArray() || isInterface()) { |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
663 instanceFields = NO_FIELDS; |
6293
6550737d7807
an empty array is now returned by ResolvedJavaType.declaredFields() for array and primitive types
Doug Simon <doug.simon@oracle.com>
parents:
6277
diff
changeset
|
664 } else { |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
665 HotSpotResolvedJavaField[] prepend = NO_FIELDS; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
666 if (getSuperclass() != null) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
667 prepend = (HotSpotResolvedJavaField[]) getSuperclass().getInstanceFields(true); |
14012 | 668 } |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
669 instanceFields = getFields(false, prepend); |
6293
6550737d7807
an empty array is now returned by ResolvedJavaType.declaredFields() for array and primitive types
Doug Simon <doug.simon@oracle.com>
parents:
6277
diff
changeset
|
670 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
671 } |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
672 if (!includeSuperclasses && getSuperclass() != null) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
673 int superClassFieldCount = getSuperclass().getInstanceFields(true).length; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
674 if (superClassFieldCount == instanceFields.length) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
675 // This class does not have any instance fields of its own. |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
676 return NO_FIELDS; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
677 } else if (superClassFieldCount != 0) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
678 HotSpotResolvedJavaField[] result = new HotSpotResolvedJavaField[instanceFields.length - superClassFieldCount]; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
679 System.arraycopy(instanceFields, superClassFieldCount, result, 0, result.length); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
680 return result; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
681 } else { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
682 // The super classes of this class do not have any instance fields. |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
683 } |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
684 } |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6699
diff
changeset
|
685 return instanceFields; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
686 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
687 |
15839
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
688 @Override |
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
689 public ResolvedJavaField[] getStaticFields() { |
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
690 if (isArray()) { |
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
691 return new HotSpotResolvedJavaField[0]; |
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
692 } else { |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
693 return getFields(true, NO_FIELDS); |
15839
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
694 } |
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
695 } |
2838203d4231
Add method ResolvedJavaType.getStaticFields
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15730
diff
changeset
|
696 |
14012 | 697 /** |
23989
115d4e0d7b87
removed HotSpotResolvedJavaFieldImpl.name field
Doug Simon <doug.simon@oracle.com>
parents:
23987
diff
changeset
|
698 * Gets the instance or static fields of this class. |
14980 | 699 * |
23989
115d4e0d7b87
removed HotSpotResolvedJavaFieldImpl.name field
Doug Simon <doug.simon@oracle.com>
parents:
23987
diff
changeset
|
700 * @param retrieveStaticFields specifies whether to return instance or static fields |
115d4e0d7b87
removed HotSpotResolvedJavaFieldImpl.name field
Doug Simon <doug.simon@oracle.com>
parents:
23987
diff
changeset
|
701 * @param prepend an array to be prepended to the returned result |
14012 | 702 */ |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
703 private HotSpotResolvedJavaField[] getFields(boolean retrieveStaticFields, HotSpotResolvedJavaField[] prepend) { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
704 HotSpotVMConfig config = config(); |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
705 final long metaspaceFields = UNSAFE.getAddress(getMetaspaceKlass() + config.instanceKlassFieldsOffset); |
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
706 int metaspaceFieldsLength = UNSAFE.getInt(metaspaceFields + config.arrayU1LengthOffset); |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
707 int resultCount = 0; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
708 int index = 0; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
709 for (int i = 0; i < metaspaceFieldsLength; i += config.fieldInfoFieldSlots, index++) { |
14012 | 710 FieldInfo field = new FieldInfo(index); |
711 if (field.hasGenericSignature()) { | |
712 metaspaceFieldsLength--; | |
713 } | |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
714 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
715 if (field.isStatic() == retrieveStaticFields) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
716 resultCount++; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
717 } |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
718 } |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
719 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
720 if (resultCount == 0) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
721 return prepend; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
722 } |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
723 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
724 int prependLength = prepend.length; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
725 resultCount += prependLength; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
726 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
727 HotSpotResolvedJavaField[] result = new HotSpotResolvedJavaField[resultCount]; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
728 if (prependLength != 0) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
729 System.arraycopy(prepend, 0, result, 0, prependLength); |
14012 | 730 } |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
731 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
732 int resultIndex = prependLength; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
733 for (int i = 0; i < index; ++i) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
734 FieldInfo field = new FieldInfo(i); |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
735 if (field.isStatic() == retrieveStaticFields) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
736 int offset = field.getOffset(); |
23989
115d4e0d7b87
removed HotSpotResolvedJavaFieldImpl.name field
Doug Simon <doug.simon@oracle.com>
parents:
23987
diff
changeset
|
737 HotSpotResolvedJavaField resolvedJavaField = createField(field.getType(), offset, field.getAccessFlags(), i); |
23987
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
738 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
739 // Make sure the result is sorted by offset. |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
740 int j; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
741 for (j = resultIndex - 1; j >= prependLength && result[j].offset() > offset; j--) { |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
742 result[j + 1] = result[j]; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
743 } |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
744 result[j + 1] = resolvedJavaField; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
745 resultIndex++; |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
746 } |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
747 } |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
748 |
33421fb951da
Fix footprint issue in HotSpotResolvedObjectTypeImpl by reducing use of java.util.HashMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
23749
diff
changeset
|
749 return result; |
14012 | 750 } |
751 | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
752 @Override |
7053
014727292ae0
removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents:
7045
diff
changeset
|
753 public Class<?> mirror() { |
13261
0ffe9e4bb364
don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents:
13260
diff
changeset
|
754 return javaClass; |
7053
014727292ae0
removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents:
7045
diff
changeset
|
755 } |
014727292ae0
removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents:
7045
diff
changeset
|
756 |
014727292ae0
removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents:
7045
diff
changeset
|
757 @Override |
7307
dc3e86fd3be1
Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7226
diff
changeset
|
758 public String getSourceFileName() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
759 HotSpotVMConfig config = config(); |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
760 final int sourceFileNameIndex = UNSAFE.getChar(getMetaspaceKlass() + config.instanceKlassSourceFileNameIndexOffset); |
13254
42aaf7306707
Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents:
13214
diff
changeset
|
761 if (sourceFileNameIndex == 0) { |
42aaf7306707
Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents:
13214
diff
changeset
|
762 return null; |
42aaf7306707
Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents:
13214
diff
changeset
|
763 } |
22454
76af33d4d504
Make jvmci redefinition safe
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22432
diff
changeset
|
764 return getConstantPool().lookupUtf8(sourceFileNameIndex); |
7307
dc3e86fd3be1
Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7226
diff
changeset
|
765 } |
dc3e86fd3be1
Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7226
diff
changeset
|
766 |
dc3e86fd3be1
Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7226
diff
changeset
|
767 @Override |
22432
e4f0d819fe22
Add getAnnotations() method to ResolvedJavaType and ResolvedJavaField
Christian Wimmer <christian.wimmer@oracle.com>
parents:
22422
diff
changeset
|
768 public Annotation[] getAnnotations() { |
e4f0d819fe22
Add getAnnotations() method to ResolvedJavaType and ResolvedJavaField
Christian Wimmer <christian.wimmer@oracle.com>
parents:
22422
diff
changeset
|
769 return mirror().getAnnotations(); |
e4f0d819fe22
Add getAnnotations() method to ResolvedJavaType and ResolvedJavaField
Christian Wimmer <christian.wimmer@oracle.com>
parents:
22422
diff
changeset
|
770 } |
e4f0d819fe22
Add getAnnotations() method to ResolvedJavaType and ResolvedJavaField
Christian Wimmer <christian.wimmer@oracle.com>
parents:
22422
diff
changeset
|
771 |
e4f0d819fe22
Add getAnnotations() method to ResolvedJavaType and ResolvedJavaField
Christian Wimmer <christian.wimmer@oracle.com>
parents:
22422
diff
changeset
|
772 @Override |
23376
ae27c683c128
Make ResolvedJava* types extend AnnotatedElement.
Roland Schatz <roland.schatz@oracle.com>
parents:
23375
diff
changeset
|
773 public Annotation[] getDeclaredAnnotations() { |
ae27c683c128
Make ResolvedJava* types extend AnnotatedElement.
Roland Schatz <roland.schatz@oracle.com>
parents:
23375
diff
changeset
|
774 return mirror().getDeclaredAnnotations(); |
ae27c683c128
Make ResolvedJava* types extend AnnotatedElement.
Roland Schatz <roland.schatz@oracle.com>
parents:
23375
diff
changeset
|
775 } |
ae27c683c128
Make ResolvedJava* types extend AnnotatedElement.
Roland Schatz <roland.schatz@oracle.com>
parents:
23375
diff
changeset
|
776 |
ae27c683c128
Make ResolvedJava* types extend AnnotatedElement.
Roland Schatz <roland.schatz@oracle.com>
parents:
23375
diff
changeset
|
777 @Override |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
778 public <T extends Annotation> T getAnnotation(Class<T> annotationClass) { |
14091
ed92bc6900d5
simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents:
14069
diff
changeset
|
779 return mirror().getAnnotation(annotationClass); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
780 } |
4484
14a00ee82980
Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents:
4433
diff
changeset
|
781 |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
782 /** |
16575
adafceb4da4a
improved name and documentation for method implementing fast-path check for type resolution
Doug Simon <doug.simon@oracle.com>
parents:
16492
diff
changeset
|
783 * Performs a fast-path check that this type is resolved in the context of a given accessing |
adafceb4da4a
improved name and documentation for method implementing fast-path check for type resolution
Doug Simon <doug.simon@oracle.com>
parents:
16492
diff
changeset
|
784 * class. A negative result does not mean this type is not resolved with respect to |
adafceb4da4a
improved name and documentation for method implementing fast-path check for type resolution
Doug Simon <doug.simon@oracle.com>
parents:
16492
diff
changeset
|
785 * {@code accessingClass}. That can only be determined by |
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:
21411
diff
changeset
|
786 * {@linkplain HotSpotJVMCIRuntime#lookupType(String, HotSpotResolvedObjectType, boolean) |
16575
adafceb4da4a
improved name and documentation for method implementing fast-path check for type resolution
Doug Simon <doug.simon@oracle.com>
parents:
16492
diff
changeset
|
787 * re-resolving} the type. |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
788 */ |
16575
adafceb4da4a
improved name and documentation for method implementing fast-path check for type resolution
Doug Simon <doug.simon@oracle.com>
parents:
16492
diff
changeset
|
789 public boolean isDefinitelyResolvedWithRespectTo(ResolvedJavaType accessingClass) { |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
790 assert accessingClass != null; |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
791 ResolvedJavaType elementType = getElementalType(); |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
792 if (elementType.isPrimitive()) { |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
793 // Primitive type resolution is context free. |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
794 return true; |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
795 } |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
796 if (elementType.getName().startsWith("Ljava/")) { |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
797 // Classes in a java.* package can only be defined by the |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
798 // boot class loader. This is enforced by ClassLoader.preDefineClass() |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
799 assert mirror().getClassLoader() == null; |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
800 return true; |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
801 } |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
802 ClassLoader thisCl = mirror().getClassLoader(); |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
803 ClassLoader accessingClassCl = ((HotSpotResolvedObjectTypeImpl) accessingClass).mirror().getClassLoader(); |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
804 return thisCl == accessingClassCl; |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
805 } |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
806 |
4484
14a00ee82980
Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents:
4433
diff
changeset
|
807 @Override |
5541
b4c406861c33
More renamings to drop Ri* prefix completely. Deleted graph.BitMap class and replaced with java.util.BitSet.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5540
diff
changeset
|
808 public ResolvedJavaType resolve(ResolvedJavaType accessingClass) { |
16575
adafceb4da4a
improved name and documentation for method implementing fast-path check for type resolution
Doug Simon <doug.simon@oracle.com>
parents:
16492
diff
changeset
|
809 if (isDefinitelyResolvedWithRespectTo(requireNonNull(accessingClass))) { |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
810 return this; |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
811 } |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
812 HotSpotResolvedObjectTypeImpl accessingType = (HotSpotResolvedObjectTypeImpl) accessingClass; |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16491
diff
changeset
|
813 return (ResolvedJavaType) runtime().lookupType(getName(), accessingType, true); |
4484
14a00ee82980
Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents:
4433
diff
changeset
|
814 } |
5326
a53162ca8219
introduced HotSpotKlassOop type to convey a klassOop value from the compiler to the C++ code instead of relying on the C++ code automagically converting a HotSpotTypeResolvedImpl value to a klassOop
Doug Simon <doug.simon@oracle.com>
parents:
5287
diff
changeset
|
815 |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
816 /** |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
18182
diff
changeset
|
817 * Gets the metaspace Klass boxed in a {@link JavaConstant}. |
7037
dd81042f4eb1
added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
7030
diff
changeset
|
818 */ |
22556
6821ef65ef4c
HotSpotMetaspaceConstantImpl is not a PrimitiveConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
22551
diff
changeset
|
819 public Constant klass() { |
22590
3f6488b29c1a
Remove rawValue from HotSpotMetaspaceConstantImpl, patch raw pointer at code installation time.
Roland Schatz <roland.schatz@oracle.com>
parents:
22582
diff
changeset
|
820 return HotSpotMetaspaceConstantImpl.forMetaspaceObject(this, false); |
12559
ae412befde21
read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents:
12456
diff
changeset
|
821 } |
ae412befde21
read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents:
12456
diff
changeset
|
822 |
5466
af07e798947d
lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents:
5326
diff
changeset
|
823 public boolean isPrimaryType() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
824 return config().secondarySuperCacheOffset != superCheckOffset(); |
5466
af07e798947d
lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents:
5326
diff
changeset
|
825 } |
af07e798947d
lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents:
5326
diff
changeset
|
826 |
af07e798947d
lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents:
5326
diff
changeset
|
827 public int superCheckOffset() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
828 HotSpotVMConfig config = config(); |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
829 return UNSAFE.getInt(getMetaspaceKlass() + config.superCheckOffsetOffset); |
5466
af07e798947d
lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents:
5326
diff
changeset
|
830 } |
5686
6cb39a47da14
replaced loading of instance prototype header word with a constant obtained from HotSpotResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
5682
diff
changeset
|
831 |
6375
1d7c73b5d787
terminology change to match C++ code and biased locking paper: "initial mark word" -> "prototype mark word"
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
832 public long prototypeMarkWord() { |
22581
3884a98ebcde
consistently use HotSpotVMConfig.config() for static access to the HotSpotVMConfig instance
Doug Simon <doug.simon@oracle.com>
parents:
22569
diff
changeset
|
833 HotSpotVMConfig config = config(); |
7147
88d626e2c2a8
added TLAB fast refill stub for array allocation
Doug Simon <doug.simon@oracle.com>
parents:
7143
diff
changeset
|
834 if (isArray()) { |
12559
ae412befde21
read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents:
12456
diff
changeset
|
835 return config.arrayPrototypeMarkWord(); |
7147
88d626e2c2a8
added TLAB fast refill stub for array allocation
Doug Simon <doug.simon@oracle.com>
parents:
7143
diff
changeset
|
836 } else { |
22542
15579668ec3a
renamed constant field to UNSAFE
Doug Simon <doug.simon@oracle.com>
parents:
22541
diff
changeset
|
837 return UNSAFE.getAddress(getMetaspaceKlass() + config.prototypeMarkWordOffset); |
7147
88d626e2c2a8
added TLAB fast refill stub for array allocation
Doug Simon <doug.simon@oracle.com>
parents:
7143
diff
changeset
|
838 } |
5686
6cb39a47da14
replaced loading of instance prototype header word with a constant obtained from HotSpotResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
5682
diff
changeset
|
839 } |
7049
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
840 |
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
841 @Override |
22536
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
842 public ResolvedJavaField findInstanceFieldWithOffset(long offset, JavaKind expectedEntryKind) { |
7049
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
843 ResolvedJavaField[] declaredFields = getInstanceFields(true); |
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
844 for (ResolvedJavaField field : declaredFields) { |
18950
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
845 HotSpotResolvedJavaField resolvedField = (HotSpotResolvedJavaField) field; |
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
846 long resolvedFieldOffset = resolvedField.offset(); |
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
847 // @formatter:off |
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
848 if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN && |
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
849 expectedEntryKind.isPrimitive() && |
22536
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
850 !expectedEntryKind.equals(JavaKind.Void) && |
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
851 resolvedField.getJavaKind().isPrimitive()) { |
18950
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
852 resolvedFieldOffset += |
22536
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
853 resolvedField.getJavaKind().getByteCount() - |
dc1aeef79e7e
Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents:
22516
diff
changeset
|
854 Math.min(resolvedField.getJavaKind().getByteCount(), 4 + expectedEntryKind.getByteCount()); |
18950
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
855 } |
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
856 if (resolvedFieldOffset == offset) { |
7049
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
857 return field; |
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
858 } |
18950
3fc907b46313
[SPARC] Fix Partial Escape Analysis for SPARC in Truffle
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
18867
diff
changeset
|
859 // @formatter:on |
7049
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
860 } |
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
861 return null; |
ccade022ec83
virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents:
7037
diff
changeset
|
862 } |
7819
aa022eaf1569
class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents:
7530
diff
changeset
|
863 |
aa022eaf1569
class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents:
7530
diff
changeset
|
864 @Override |
7829
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
865 public boolean isLocal() { |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
866 return mirror().isLocalClass(); |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
867 } |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
868 |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
869 @Override |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
870 public boolean isMember() { |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
871 return mirror().isMemberClass(); |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
872 } |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
873 |
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
874 @Override |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
875 public HotSpotResolvedObjectTypeImpl getEnclosingType() { |
7829
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
876 final Class<?> encl = mirror().getEnclosingClass(); |
18167
2bf5ea10eea7
sharpened return types for HotSpot specific Graal API implementations
Doug Simon <doug.simon@oracle.com>
parents:
17156
diff
changeset
|
877 return encl == null ? null : fromObjectClass(encl); |
7829
a44887443b0c
support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents:
7828
diff
changeset
|
878 } |
9100
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
879 |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
880 @Override |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
881 public ResolvedJavaMethod[] getDeclaredConstructors() { |
15040
288c23143d47
Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents:
15018
diff
changeset
|
882 Constructor<?>[] constructors = mirror().getDeclaredConstructors(); |
9100
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
883 ResolvedJavaMethod[] result = new ResolvedJavaMethod[constructors.length]; |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
884 for (int i = 0; i < constructors.length; i++) { |
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:
21411
diff
changeset
|
885 result[i] = runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod(constructors[i]); |
9100
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
886 assert result[i].isConstructor(); |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
887 } |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
888 return result; |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
889 } |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
890 |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
891 @Override |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
892 public ResolvedJavaMethod[] getDeclaredMethods() { |
14091
ed92bc6900d5
simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents:
14069
diff
changeset
|
893 Method[] methods = mirror().getDeclaredMethods(); |
9100
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
894 ResolvedJavaMethod[] result = new ResolvedJavaMethod[methods.length]; |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
895 for (int i = 0; i < methods.length; i++) { |
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:
21411
diff
changeset
|
896 result[i] = runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod(methods[i]); |
9100
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
897 assert !result[i].isConstructor(); |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
898 } |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
899 return result; |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
900 } |
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
901 |
11952
c0807f5fdca5
added ResolvedJavaType.getClassInititalizer()
Doug Simon <doug.simon@oracle.com>
parents:
11823
diff
changeset
|
902 public ResolvedJavaMethod getClassInitializer() { |
22582
232c53e17ea0
added CompilerToVM.compilerToVM() for static access to the CompilerToVM instance
Doug Simon <doug.simon@oracle.com>
parents:
22581
diff
changeset
|
903 return compilerToVM().getClassInitializer(this); |
9985
e6bd1004082a
added HotSpotResolvedObjectType.getMethods() to get all methods of a class including those (such as <clinit>) not normally exposed by Java reflection
Doug Simon <doug.simon@oracle.com>
parents:
9835
diff
changeset
|
904 } |
e6bd1004082a
added HotSpotResolvedObjectType.getMethods() to get all methods of a class including those (such as <clinit>) not normally exposed by Java reflection
Doug Simon <doug.simon@oracle.com>
parents:
9835
diff
changeset
|
905 |
9100
d24955427b0b
Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents:
8959
diff
changeset
|
906 @Override |
13305
a63d65b682a8
moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents:
13295
diff
changeset
|
907 public String toString() { |
15730
920b7bb058a6
Simplify HotSpotUnresolvedJavaType, harmonize toString for HotSpotUnresolvedJavaType and HotSpotResolvedObjectType
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15726
diff
changeset
|
908 return "HotSpotType<" + getName() + ", resolved>"; |
13305
a63d65b682a8
moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents:
13295
diff
changeset
|
909 } |
17156
ac6e25901d62
Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16615
diff
changeset
|
910 |
ac6e25901d62
Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16615
diff
changeset
|
911 @Override |
23373
802821d82a92
Rename isAllocationCloneable to isCloneableWithAllocation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23366
diff
changeset
|
912 public boolean isCloneableWithAllocation() { |
23357
b05ad394cfd5
Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23354
diff
changeset
|
913 return (getAccessFlags() & config().jvmAccIsCloneable) != 0; |
b05ad394cfd5
Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23354
diff
changeset
|
914 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
915 } |