< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/ObjectHashCodeInliningTest.java

Print this page
rev 56282 : [mq]: graal

*** 22,59 **** */ package org.graalvm.compiler.hotspot.test; - import jdk.vm.ci.meta.ResolvedJavaMethod; import org.graalvm.compiler.core.test.GraalCompilerTest; import org.graalvm.compiler.nodes.StructuredGraph; import org.graalvm.compiler.nodes.extended.ForeignCallNode; import org.graalvm.compiler.nodes.java.MethodCallTargetNode; import org.graalvm.compiler.nodes.memory.ReadNode; ! import org.junit.Assume; import org.junit.Test; public class ObjectHashCodeInliningTest extends GraalCompilerTest { public static int getHash(Object obj) { return obj.hashCode(); } @Test ! public void testInstallCodeInvalidation() { ! for (int i = 0; i < 100000; i++) { ! getHash(i % 10 == 0 ? new Object() : ""); ! } ResolvedJavaMethod method = getResolvedJavaMethod("getHash"); ! StructuredGraph graph = parseForCompile(method); for (MethodCallTargetNode callTargetNode : graph.getNodes(MethodCallTargetNode.TYPE)) { if ("Object.hashCode".equals(callTargetNode.targetName())) { ! Assume.assumeTrue(callTargetNode.getProfile() != null); } } compile(method, graph); } private static boolean containsForeignCallToIdentityHashCode(StructuredGraph graph) { for (ForeignCallNode foreignCallNode : graph.getNodes().filter(ForeignCallNode.class)) { --- 22,68 ---- */ package org.graalvm.compiler.hotspot.test; import org.graalvm.compiler.core.test.GraalCompilerTest; + import org.graalvm.compiler.java.BytecodeParserOptions; import org.graalvm.compiler.nodes.StructuredGraph; import org.graalvm.compiler.nodes.extended.ForeignCallNode; import org.graalvm.compiler.nodes.java.MethodCallTargetNode; import org.graalvm.compiler.nodes.memory.ReadNode; ! import org.graalvm.compiler.options.OptionValues; import org.junit.Test; + import jdk.vm.ci.meta.JavaTypeProfile; + import jdk.vm.ci.meta.JavaTypeProfile.ProfiledType; + import jdk.vm.ci.meta.MetaAccessProvider; + import jdk.vm.ci.meta.ResolvedJavaMethod; + import jdk.vm.ci.meta.TriState; + public class ObjectHashCodeInliningTest extends GraalCompilerTest { public static int getHash(Object obj) { return obj.hashCode(); } @Test ! public void testGetHash() { ! MetaAccessProvider metaAccess = getMetaAccess(); ! ProfiledType[] injectedProfile = { ! new ProfiledType(metaAccess.lookupJavaType(String.class), 0.9D), ! new ProfiledType(metaAccess.lookupJavaType(Object.class), 0.1D)}; ResolvedJavaMethod method = getResolvedJavaMethod("getHash"); ! StructuredGraph graph = parseForCompile(method, ! new OptionValues(getInitialOptions(), BytecodeParserOptions.InlineDuringParsing, false, BytecodeParserOptions.InlineIntrinsicsDuringParsing, false)); for (MethodCallTargetNode callTargetNode : graph.getNodes(MethodCallTargetNode.TYPE)) { if ("Object.hashCode".equals(callTargetNode.targetName())) { ! callTargetNode.setJavaTypeProfile(new JavaTypeProfile(TriState.FALSE, 0.0D, injectedProfile)); } } + compile(method, graph); } private static boolean containsForeignCallToIdentityHashCode(StructuredGraph graph) { for (ForeignCallNode foreignCallNode : graph.getNodes().filter(ForeignCallNode.class)) {
< prev index next >