hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/LockEliminationTest.java
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/LockEliminationTest.java Wed Apr 05 22:48:35 2017 +0000
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/LockEliminationTest.java Thu Apr 06 14:31:32 2017 -0700
@@ -25,7 +25,8 @@
import jdk.vm.ci.meta.ResolvedJavaMethod;
import org.junit.Test;
-
+import org.graalvm.compiler.loop.DefaultLoopPolicies;
+import org.graalvm.compiler.loop.phases.LoopFullUnrollPhase;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
import org.graalvm.compiler.nodes.java.MonitorExitNode;
@@ -91,6 +92,26 @@
assertDeepEquals(1, graph.getNodes().filter(MonitorExitNode.class).count());
}
+ public void testUnrolledSyncSnippet(Object a) {
+ for (int i = 0; i < 3; i++) {
+ synchronized (a) {
+
+ }
+ }
+ }
+
+ @Test
+ public void testUnrolledSync() {
+ StructuredGraph graph = getGraph("testUnrolledSyncSnippet");
+ CanonicalizerPhase canonicalizer = new CanonicalizerPhase();
+ canonicalizer.apply(graph, new PhaseContext(getProviders()));
+ HighTierContext context = getDefaultHighTierContext();
+ new LoopFullUnrollPhase(canonicalizer, new DefaultLoopPolicies()).apply(graph, context);
+ new LockEliminationPhase().apply(graph);
+ assertDeepEquals(1, graph.getNodes().filter(RawMonitorEnterNode.class).count());
+ assertDeepEquals(1, graph.getNodes().filter(MonitorExitNode.class).count());
+ }
+
private StructuredGraph getGraph(String snippet) {
ResolvedJavaMethod method = getResolvedJavaMethod(snippet);
StructuredGraph graph = parseEager(method, AllowAssumptions.YES);