hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.microbenchmarks/src/org/graalvm/compiler/microbenchmarks/graal/ConditionalEliminationBenchmark.java
changeset 46344 694c102fd8ed
parent 43972 1ade39b8381b
child 46459 7d4e637d3f21
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.microbenchmarks/src/org/graalvm/compiler/microbenchmarks/graal/ConditionalEliminationBenchmark.java	Mon Dec 12 16:16:27 2016 +0300
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.microbenchmarks/src/org/graalvm/compiler/microbenchmarks/graal/ConditionalEliminationBenchmark.java	Wed Mar 22 13:42:45 2017 -0700
@@ -23,12 +23,12 @@
 package org.graalvm.compiler.microbenchmarks.graal;
 
 import org.openjdk.jmh.annotations.Benchmark;
-import org.openjdk.jmh.annotations.Warmup;
 
 import org.graalvm.compiler.microbenchmarks.graal.util.GraalState;
 import org.graalvm.compiler.microbenchmarks.graal.util.GraphState;
 import org.graalvm.compiler.microbenchmarks.graal.util.MethodSpec;
 import org.graalvm.compiler.phases.common.DominatorConditionalEliminationPhase;
+import org.graalvm.compiler.phases.common.NewConditionalEliminationPhase;
 import org.graalvm.compiler.phases.tiers.PhaseContext;
 
 public class ConditionalEliminationBenchmark extends GraalBenchmark {
@@ -38,17 +38,36 @@
     }
 
     @SuppressWarnings("unused")
-    public static int nullnessSnippet(Object a, Object b) {
+    public static int nullnessSnippet(Object a, Object b, int n, int m) {
+        int result = 0;
         if (a == null) {
             if (a == b) {
                 if (b == null) {
+                    for (int i = 0; i < n; ++i) {
+                        if (i % 3 == 0) {
+                            break;
+                        }
+                        result <<= 1;
+                        if (i % 7 == 0) {
+                            break;
+                        }
+                    }
                     return 1;
                 } else {
                     return -2;
                 }
             } else {
                 if (b == null) {
-                    return -3;
+                    for (int i = 0; i < n; ++i) {
+                        if (i % 4 == 0) {
+                            break;
+                        }
+                        result <<= 1;
+                        if (i % 7 == 0) {
+                            break;
+                        }
+                    }
+                    return result;
                 } else {
                     return 4;
                 }
@@ -56,13 +75,31 @@
         } else {
             if (a == b) {
                 if (b == null) {
-                    return -5;
+                    for (int i = 0; i < n; ++i) {
+                        if (i % 5 == 0) {
+                            break;
+                        }
+                        result <<= 1;
+                        if (i % 7 == 0) {
+                            break;
+                        }
+                    }
+                    return result;
                 } else {
                     return 6;
                 }
             } else {
                 if (b == null) {
-                    return 7;
+                    for (int i = 0; i < n; ++i) {
+                        if (i % 6 == 0) {
+                            break;
+                        }
+                        result <<= 1;
+                        if (i % 7 == 0) {
+                            break;
+                        }
+                    }
+                    return result;
                 } else {
                     return 8;
                 }
@@ -71,11 +108,15 @@
     }
 
     @Benchmark
-    @Warmup(iterations = 20)
     public void nullness(Nullness s, GraalState g) {
         new DominatorConditionalEliminationPhase(false).apply(s.graph, new PhaseContext(g.providers));
     }
 
+    @Benchmark
+    public void newDominatorConditionalElimination(Nullness s, GraalState g) {
+        new NewConditionalEliminationPhase(false).apply(s.graph, new PhaseContext(g.providers));
+    }
+
     @MethodSpec(declaringClass = ConditionalEliminationBenchmark.class, name = "searchSnippet")
     public static class Search extends GraphState {
     }