src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.microbenchmarks/src/org/graalvm/compiler/microbenchmarks/graal/SchedulePhaseBenchmark.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.microbenchmarks/src/org/graalvm/compiler/microbenchmarks/graal/SchedulePhaseBenchmark.java Fri Feb 02 10:37:48 2018 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.microbenchmarks/src/org/graalvm/compiler/microbenchmarks/graal/SchedulePhaseBenchmark.java Fri Feb 02 17:28:17 2018 -0800
@@ -24,7 +24,9 @@
import java.util.Arrays;
+import org.graalvm.compiler.phases.schedule.SchedulePhase;
import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Warmup;
import org.graalvm.compiler.microbenchmarks.graal.util.MethodSpec;
@@ -32,7 +34,8 @@
import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;
-@Warmup(iterations = 15)
+@Warmup(iterations = 20)
+@Measurement(iterations = 10)
public class SchedulePhaseBenchmark extends GraalBenchmark {
@MethodSpec(declaringClass = String.class, name = "equals")
@@ -117,5 +120,67 @@
public void intersection_EARLIEST_OPTIMAL(IntersectionState_EARLIEST_OPTIMAL s) {
s.schedule.apply(s.graph);
}
+
+ @MethodSpec(declaringClass = SchedulePhaseBenchmark.class, name = "intersectionSnippet")
+ public static class IntersectionState_EARLIEST_WITH_GUARD_ORDER_OPTIMAL extends ScheduleState {
+ public IntersectionState_EARLIEST_WITH_GUARD_ORDER_OPTIMAL() {
+ super(SchedulingStrategy.EARLIEST_WITH_GUARD_ORDER);
+ }
+ }
+
+ @Benchmark
+ public void intersection_EARLIEST_WITH_GUARD_ORDER_OPTIMAL(IntersectionState_EARLIEST_WITH_GUARD_ORDER_OPTIMAL s) {
+ s.schedule.apply(s.graph);
+ }
+ // Checkstyle: resume method name check
+
+ // Checkstyle: stop method name check
+ @MethodSpec(declaringClass = SchedulePhase.Instance.class, name = "scheduleEarliestIterative")
+ public static class ScheduleEarliestIterative_LATEST_OPTIMAL extends ScheduleState {
+ public ScheduleEarliestIterative_LATEST_OPTIMAL() {
+ super(SchedulingStrategy.LATEST);
+ }
+ }
+
+ @Benchmark
+ public void scheduleEarliestIterative_LATEST_OPTIMAL(ScheduleEarliestIterative_LATEST_OPTIMAL s) {
+ s.schedule.apply(s.graph);
+ }
+
+ @MethodSpec(declaringClass = SchedulePhase.Instance.class, name = "scheduleEarliestIterative")
+ public static class ScheduleEarliestIterative_LATEST_OUT_OF_LOOPS_OPTIMAL extends ScheduleState {
+ public ScheduleEarliestIterative_LATEST_OUT_OF_LOOPS_OPTIMAL() {
+ super(SchedulingStrategy.LATEST_OUT_OF_LOOPS);
+ }
+ }
+
+ @Benchmark
+ public void scheduleEarliestIterative_LATEST_OUT_OF_LOOPS_OPTIMAL(ScheduleEarliestIterative_LATEST_OUT_OF_LOOPS_OPTIMAL s) {
+ s.schedule.apply(s.graph);
+ }
+
+ @MethodSpec(declaringClass = SchedulePhase.Instance.class, name = "scheduleEarliestIterative")
+ public static class ScheduleEarliestIterative_EARLIEST_OPTIMAL extends ScheduleState {
+ public ScheduleEarliestIterative_EARLIEST_OPTIMAL() {
+ super(SchedulingStrategy.EARLIEST);
+ }
+ }
+
+ @Benchmark
+ public void scheduleEarliestIterative_EARLIEST_OPTIMAL(ScheduleEarliestIterative_EARLIEST_OPTIMAL s) {
+ s.schedule.apply(s.graph);
+ }
+
+ @MethodSpec(declaringClass = SchedulePhase.Instance.class, name = "scheduleEarliestIterative")
+ public static class ScheduleEarliestIterative_EARLIEST_WITH_GUARD_ORDER_OPTIMAL extends ScheduleState {
+ public ScheduleEarliestIterative_EARLIEST_WITH_GUARD_ORDER_OPTIMAL() {
+ super(SchedulingStrategy.EARLIEST_WITH_GUARD_ORDER);
+ }
+ }
+
+ @Benchmark
+ public void scheduleEarliestIterative_EARLIEST_WITH_GUARD_ORDER_OPTIMAL(ScheduleEarliestIterative_EARLIEST_WITH_GUARD_ORDER_OPTIMAL s) {
+ s.schedule.apply(s.graph);
+ }
// Checkstyle: resume method name check
}