< prev index next >
src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/CompiledMethodInfo.java
Print this page
rev 47466 : 8132547: [AOT] support invokedynamic instructions
Reviewed-by: iveresov, kvn
*** 23,33 ****
package jdk.tools.jaotc;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.HashMap;
! import java.util.Map;
import jdk.tools.jaotc.binformat.BinaryContainer;
import jdk.tools.jaotc.binformat.ReadOnlyDataContainer;
import jdk.tools.jaotc.AOTCompiledClass.AOTKlassData;
import org.graalvm.compiler.code.CompilationResult;
--- 23,33 ----
package jdk.tools.jaotc;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.HashMap;
! import java.util.HashSet;
import jdk.tools.jaotc.binformat.BinaryContainer;
import jdk.tools.jaotc.binformat.ReadOnlyDataContainer;
import jdk.tools.jaotc.AOTCompiledClass.AOTKlassData;
import org.graalvm.compiler.code.CompilationResult;
*** 180,195 ****
private AOTMethodOffsets methodOffsets;
/**
* List of stubs (PLT trampoline).
*/
! private Map<String, StubInformation> stubs = new HashMap<>();
/**
* List of referenced classes.
*/
! private Map<String, AOTKlassData> dependentKlasses = new HashMap<>();
/**
* Methods count used to generate unique global method id.
*/
private static final AtomicInteger methodsCount = new AtomicInteger();
--- 180,195 ----
private AOTMethodOffsets methodOffsets;
/**
* List of stubs (PLT trampoline).
*/
! private HashMap<String, StubInformation> stubs = new HashMap<>();
/**
* List of referenced classes.
*/
! private HashSet<AOTKlassData> dependentKlasses = new HashSet<>();
/**
* Methods count used to generate unique global method id.
*/
private static final AtomicInteger methodsCount = new AtomicInteger();
*** 207,217 ****
}
void addMethodOffsets(BinaryContainer binaryContainer, ReadOnlyDataContainer container) {
this.methodOffsets.setNameOffset(binaryContainer.addMetaspaceName(name));
this.methodOffsets.addMethodOffsets(container, name);
! for (AOTKlassData data : dependentKlasses.values()) {
data.addDependentMethod(this);
}
}
CompilationResult getCompilationResult() {
--- 207,217 ----
}
void addMethodOffsets(BinaryContainer binaryContainer, ReadOnlyDataContainer container) {
this.methodOffsets.setNameOffset(binaryContainer.addMetaspaceName(name));
this.methodOffsets.addMethodOffsets(container, name);
! for (AOTKlassData data : dependentKlasses) {
data.addDependentMethod(this);
}
}
CompilationResult getCompilationResult() {
*** 289,309 ****
return stub;
}
void addDependentKlassData(BinaryContainer binaryContainer, HotSpotResolvedObjectType type) {
AOTKlassData klassData = AOTCompiledClass.addFingerprintKlassData(binaryContainer, type);
! String klassName = type.getName();
!
! if (dependentKlasses.containsKey(klassName)) {
! assert dependentKlasses.get(klassName) == klassData : "duplicated data for klass: " + klassName;
! } else {
! dependentKlasses.put(klassName, klassData);
! }
}
! AOTKlassData getDependentKlassData(String klassName) {
! return dependentKlasses.get(klassName);
}
boolean hasMark(Site call, MarkId id) {
for (Mark m : compilationResult.getMarks()) {
// TODO: X64-specific code.
--- 289,307 ----
return stub;
}
void addDependentKlassData(BinaryContainer binaryContainer, HotSpotResolvedObjectType type) {
AOTKlassData klassData = AOTCompiledClass.addFingerprintKlassData(binaryContainer, type);
! dependentKlasses.add(klassData);
}
! AOTKlassData getDependentKlassData(HotSpotResolvedObjectType type) {
! AOTKlassData klassData = AOTCompiledClass.getAOTKlassData(type);
! if (dependentKlasses.contains(klassData)) {
! return klassData;
! }
! return null;
}
boolean hasMark(Site call, MarkId id) {
for (Mark m : compilationResult.getMarks()) {
// TODO: X64-specific code.
< prev index next >