< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/GraalCompilerTest.java

Print this page




  94 import org.graalvm.compiler.nodes.StructuredGraph.Builder;
  95 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
  96 import org.graalvm.compiler.nodes.ValueNode;
  97 import org.graalvm.compiler.nodes.cfg.Block;
  98 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
  99 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
 100 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
 101 import org.graalvm.compiler.nodes.graphbuilderconf.InlineInvokePlugin;
 102 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
 103 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
 104 import org.graalvm.compiler.nodes.java.AccessFieldNode;
 105 import org.graalvm.compiler.nodes.spi.LoweringProvider;
 106 import org.graalvm.compiler.nodes.spi.Replacements;
 107 import org.graalvm.compiler.nodes.virtual.VirtualObjectNode;
 108 import org.graalvm.compiler.options.OptionValues;
 109 import org.graalvm.compiler.phases.BasePhase;
 110 import org.graalvm.compiler.phases.OptimisticOptimizations;
 111 import org.graalvm.compiler.phases.Phase;
 112 import org.graalvm.compiler.phases.PhaseSuite;
 113 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
 114 import org.graalvm.compiler.phases.common.ConvertDeoptimizeToGuardPhase;
 115 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
 116 import org.graalvm.compiler.phases.common.inlining.info.InlineInfo;
 117 import org.graalvm.compiler.phases.common.inlining.policy.GreedyInliningPolicy;
 118 import org.graalvm.compiler.phases.schedule.SchedulePhase;
 119 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;
 120 import org.graalvm.compiler.phases.tiers.HighTierContext;
 121 import org.graalvm.compiler.phases.tiers.MidTierContext;
 122 import org.graalvm.compiler.phases.tiers.Suites;
 123 import org.graalvm.compiler.phases.tiers.TargetProvider;
 124 import org.graalvm.compiler.phases.util.Providers;
 125 import org.graalvm.compiler.printer.GraalDebugHandlersFactory;
 126 import org.graalvm.compiler.runtime.RuntimeProvider;
 127 import org.graalvm.compiler.test.AddExports;
 128 import org.graalvm.compiler.test.GraalTest;
 129 import org.graalvm.compiler.test.JLModule;
 130 import org.junit.After;
 131 import org.junit.Assert;
 132 import org.junit.Test;
 133 import org.junit.internal.AssumptionViolatedException;
 134 


 882 
 883     protected void testAgainstExpected(OptionValues options, ResolvedJavaMethod method, Result expect, Set<DeoptimizationReason> shouldNotDeopt, Object receiver, Object... args) {
 884         Result actual = executeActualCheckDeopt(options, method, shouldNotDeopt, receiver, args);
 885         assertEquals(expect, actual);
 886     }
 887 
 888     protected Result executeActualCheckDeopt(OptionValues options, ResolvedJavaMethod method, Set<DeoptimizationReason> shouldNotDeopt, Object receiver, Object... args) {
 889         Map<DeoptimizationReason, Integer> deoptCounts = new EnumMap<>(DeoptimizationReason.class);
 890         ProfilingInfo profile = method.getProfilingInfo();
 891         for (DeoptimizationReason reason : shouldNotDeopt) {
 892             deoptCounts.put(reason, profile.getDeoptimizationCount(reason));
 893         }
 894         Result actual = executeActual(options, method, receiver, args);
 895         profile = method.getProfilingInfo(); // profile can change after execution
 896         for (DeoptimizationReason reason : shouldNotDeopt) {
 897             Assert.assertEquals("wrong number of deopt counts for " + reason, (int) deoptCounts.get(reason), profile.getDeoptimizationCount(reason));
 898         }
 899         return actual;
 900     }
 901 







 902     protected void assertEquals(Result expect, Result actual) {
 903         if (expect.exception != null) {
 904             Assert.assertTrue("expected " + expect.exception, actual.exception != null);
 905             Assert.assertEquals("Exception class", expect.exception.getClass(), actual.exception.getClass());
 906             Assert.assertEquals("Exception message", expect.exception.getMessage(), actual.exception.getMessage());



 907         } else {
 908             if (actual.exception != null) {
 909                 throw new AssertionError("expected " + expect.returnValue + " but got an exception", actual.exception);
 910             }
 911             assertDeepEquals(expect.returnValue, actual.returnValue);
 912         }
 913     }
 914 
 915     private Map<ResolvedJavaMethod, InstalledCode> cache = new ConcurrentHashMap<>();
 916 
 917     /**
 918      * Gets installed code for a given method, compiling it first if necessary. The graph is parsed
 919      * {@link #parseEager eagerly}.
 920      */
 921     protected final InstalledCode getCode(ResolvedJavaMethod method) {
 922         return getCode(method, null, false, false, getInitialOptions());
 923     }
 924 
 925     protected final InstalledCode getCode(ResolvedJavaMethod method, OptionValues options) {
 926         return getCode(method, null, false, false, options);




  94 import org.graalvm.compiler.nodes.StructuredGraph.Builder;
  95 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
  96 import org.graalvm.compiler.nodes.ValueNode;
  97 import org.graalvm.compiler.nodes.cfg.Block;
  98 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
  99 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
 100 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
 101 import org.graalvm.compiler.nodes.graphbuilderconf.InlineInvokePlugin;
 102 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
 103 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
 104 import org.graalvm.compiler.nodes.java.AccessFieldNode;
 105 import org.graalvm.compiler.nodes.spi.LoweringProvider;
 106 import org.graalvm.compiler.nodes.spi.Replacements;
 107 import org.graalvm.compiler.nodes.virtual.VirtualObjectNode;
 108 import org.graalvm.compiler.options.OptionValues;
 109 import org.graalvm.compiler.phases.BasePhase;
 110 import org.graalvm.compiler.phases.OptimisticOptimizations;
 111 import org.graalvm.compiler.phases.Phase;
 112 import org.graalvm.compiler.phases.PhaseSuite;
 113 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
 114 import org.graalvm.compiler.loop.phases.ConvertDeoptimizeToGuardPhase;
 115 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
 116 import org.graalvm.compiler.phases.common.inlining.info.InlineInfo;
 117 import org.graalvm.compiler.phases.common.inlining.policy.GreedyInliningPolicy;
 118 import org.graalvm.compiler.phases.schedule.SchedulePhase;
 119 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;
 120 import org.graalvm.compiler.phases.tiers.HighTierContext;
 121 import org.graalvm.compiler.phases.tiers.MidTierContext;
 122 import org.graalvm.compiler.phases.tiers.Suites;
 123 import org.graalvm.compiler.phases.tiers.TargetProvider;
 124 import org.graalvm.compiler.phases.util.Providers;
 125 import org.graalvm.compiler.printer.GraalDebugHandlersFactory;
 126 import org.graalvm.compiler.runtime.RuntimeProvider;
 127 import org.graalvm.compiler.test.AddExports;
 128 import org.graalvm.compiler.test.GraalTest;
 129 import org.graalvm.compiler.test.JLModule;
 130 import org.junit.After;
 131 import org.junit.Assert;
 132 import org.junit.Test;
 133 import org.junit.internal.AssumptionViolatedException;
 134 


 882 
 883     protected void testAgainstExpected(OptionValues options, ResolvedJavaMethod method, Result expect, Set<DeoptimizationReason> shouldNotDeopt, Object receiver, Object... args) {
 884         Result actual = executeActualCheckDeopt(options, method, shouldNotDeopt, receiver, args);
 885         assertEquals(expect, actual);
 886     }
 887 
 888     protected Result executeActualCheckDeopt(OptionValues options, ResolvedJavaMethod method, Set<DeoptimizationReason> shouldNotDeopt, Object receiver, Object... args) {
 889         Map<DeoptimizationReason, Integer> deoptCounts = new EnumMap<>(DeoptimizationReason.class);
 890         ProfilingInfo profile = method.getProfilingInfo();
 891         for (DeoptimizationReason reason : shouldNotDeopt) {
 892             deoptCounts.put(reason, profile.getDeoptimizationCount(reason));
 893         }
 894         Result actual = executeActual(options, method, receiver, args);
 895         profile = method.getProfilingInfo(); // profile can change after execution
 896         for (DeoptimizationReason reason : shouldNotDeopt) {
 897             Assert.assertEquals("wrong number of deopt counts for " + reason, (int) deoptCounts.get(reason), profile.getDeoptimizationCount(reason));
 898         }
 899         return actual;
 900     }
 901 
 902     private static final List<Class<?>> C2_OMIT_STACK_TRACE_IN_FAST_THROW_EXCEPTIONS = Arrays.asList(
 903                     ArithmeticException.class,
 904                     ArrayIndexOutOfBoundsException.class,
 905                     ArrayStoreException.class,
 906                     ClassCastException.class,
 907                     NullPointerException.class);
 908 
 909     protected void assertEquals(Result expect, Result actual) {
 910         if (expect.exception != null) {
 911             Assert.assertTrue("expected " + expect.exception, actual.exception != null);
 912             Assert.assertEquals("Exception class", expect.exception.getClass(), actual.exception.getClass());
 913             // C2 can optimize out the stack trace and message in some cases
 914             if (expect.exception.getMessage() != null || !C2_OMIT_STACK_TRACE_IN_FAST_THROW_EXCEPTIONS.contains(expect.exception.getClass())) {
 915                 Assert.assertEquals("Exception message", expect.exception.getMessage(), actual.exception.getMessage());
 916             }
 917         } else {
 918             if (actual.exception != null) {
 919                 throw new AssertionError("expected " + expect.returnValue + " but got an exception", actual.exception);
 920             }
 921             assertDeepEquals(expect.returnValue, actual.returnValue);
 922         }
 923     }
 924 
 925     private Map<ResolvedJavaMethod, InstalledCode> cache = new ConcurrentHashMap<>();
 926 
 927     /**
 928      * Gets installed code for a given method, compiling it first if necessary. The graph is parsed
 929      * {@link #parseEager eagerly}.
 930      */
 931     protected final InstalledCode getCode(ResolvedJavaMethod method) {
 932         return getCode(method, null, false, false, getInitialOptions());
 933     }
 934 
 935     protected final InstalledCode getCode(ResolvedJavaMethod method, OptionValues options) {
 936         return getCode(method, null, false, false, options);


< prev index next >