# HG changeset patch # User Thomas Wuerthinger # Date 1423189519 -3600 # Node ID 5adc03d22312770918431e8e47630795be5ced9a # Parent 3b2e98f9e47c745a48c07c672692eea873fc82f2# Parent d4f80cf249d0e04f613a5f94ee3f29b4d67bdd48 Merge. diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Fri Feb 06 03:25:19 2015 +0100 @@ -278,11 +278,9 @@ JavaConstant c = asConstant(value); if (c.isNull() || SPARCAssembler.isSimm11(c)) { return value; - } else { - return load(c); } } - return emitMove(value); + return load(value); } @Override @@ -417,7 +415,8 @@ protected void emitTableSwitch(int lowKey, LabelRef defaultTarget, LabelRef[] targets, Value key) { // Making a copy of the switch value is necessary because jump table destroys the input // value - Variable tmp = emitMove(key); + Variable tmp = newVariable(key.getLIRKind()); + emitMove(tmp, key); append(new TableSwitchOp(lowKey, defaultTarget, targets, tmp, newVariable(LIRKind.value(target().wordKind)))); } diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Fri Feb 06 03:25:19 2015 +0100 @@ -172,7 +172,7 @@ LIRKind wordKind = LIRKind.value(getProviders().getCodeCache().getTarget().wordKind); RegisterValue thread = getProviders().getRegisters().getThreadRegister().asValue(wordKind); SPARCAddressValue pendingDeoptAddress = new SPARCAddressValue(wordKind, thread, offset); - append(new StoreOp(v.getKind(), pendingDeoptAddress, emitMove(v), null)); + append(new StoreOp(v.getKind(), pendingDeoptAddress, load(v), null)); } @Override @@ -221,15 +221,14 @@ } public Variable emitCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue) { - Variable newValueTemp = newVariable(newValue.getLIRKind()); - emitMove(newValueTemp, newValue); LIRKind kind = newValue.getLIRKind(); assert kind.equals(expectedValue.getLIRKind()); Kind memKind = (Kind) kind.getPlatformKind(); SPARCAddressValue addressValue = asAddressValue(address); - append(new CompareAndSwapOp(asAllocatable(addressValue), asAllocatable(expectedValue), asAllocatable(newValueTemp))); - return emitConditionalMove(memKind, expectedValue, newValueTemp, Condition.EQ, true, trueValue, falseValue); + Variable result = newVariable(newValue.getLIRKind()); + append(new CompareAndSwapOp(result, asAllocatable(addressValue), asAllocatable(expectedValue), asAllocatable(newValue))); + return emitConditionalMove(memKind, expectedValue, result, Condition.EQ, true, trueValue, falseValue); } public StackSlot getDeoptimizationRescueSlot() { diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java Fri Feb 06 03:25:19 2015 +0100 @@ -76,8 +76,6 @@ Value offset = operand(x.offset()); Variable cmpValue = (Variable) gen.loadNonConst(operand(x.expectedValue())); Variable newValue = gen.load(operand(x.newValue())); - Variable newValueTemp = gen.newVariable(newValue.getLIRKind()); - getGen().emitMove(newValueTemp, newValue); LIRKind kind = cmpValue.getLIRKind(); assert kind.equals(newValue.getLIRKind()); @@ -92,8 +90,9 @@ } } - append(new CompareAndSwapOp(address, cmpValue, newValueTemp)); - setResult(x, gen.emitMove(newValueTemp)); + Variable result = gen.newVariable(newValue.getLIRKind()); + append(new CompareAndSwapOp(result, address, cmpValue, newValue)); + setResult(x, result); } @Override diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotGraphBuilderPluginsProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotGraphBuilderPluginsProvider.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotGraphBuilderPluginsProvider.java Fri Feb 06 03:25:19 2015 +0100 @@ -22,6 +22,8 @@ */ package com.oracle.graal.hotspot.replacements; +import static com.oracle.graal.java.GraphBuilderContext.*; + import com.oracle.graal.api.meta.*; import com.oracle.graal.api.runtime.*; import com.oracle.graal.compiler.common.type.*; @@ -47,9 +49,8 @@ if (objectStamp.isExactType() && objectStamp.nonNull()) { mirror = builder.append(ConstantNode.forConstant(objectStamp.type().getJavaClass(), metaAccess)); } else { - GuardingPiNode pi = builder.append(new GuardingPiNode(rcvr)); StampProvider stampProvider = builder.getStampProvider(); - LoadHubNode hub = builder.append(new LoadHubNode(stampProvider, pi)); + LoadHubNode hub = builder.append(new LoadHubNode(stampProvider, makeNonNull(builder, rcvr))); mirror = builder.append(new HubGetClassNode(builder.getMetaAccess(), hub)); } builder.push(Kind.Object, mirror); diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraalDirectivePlugins.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraalDirectivePlugins.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraalDirectivePlugins.java Fri Feb 06 03:25:19 2015 +0100 @@ -32,40 +32,37 @@ public class GraalDirectivePlugins { - private static ResolvedJavaMethod lookup(MetaAccessProvider metaAccess, String name, Class... parameterTypes) { - return Registration.resolve(metaAccess, GraalDirectives.class, name, parameterTypes); - } - public static void registerPlugins(MetaAccessProvider metaAccess, GraphBuilderPlugins plugins) { - plugins.register(lookup(metaAccess, "deoptimize"), new InvocationPlugin() { + Registration r = new Registration(plugins, metaAccess, GraalDirectives.class); + r.register0("deoptimize", new InvocationPlugin() { public boolean apply(GraphBuilderContext builder) { builder.append(new DeoptimizeNode(DeoptimizationAction.None, DeoptimizationReason.TransferToInterpreter)); return true; } }); - plugins.register(lookup(metaAccess, "deoptimizeAndInvalidate"), new InvocationPlugin() { + r.register0("deoptimizeAndInvalidate", new InvocationPlugin() { public boolean apply(GraphBuilderContext builder) { builder.append(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.TransferToInterpreter)); return true; } }); - plugins.register(lookup(metaAccess, "inCompiledCode"), new InvocationPlugin() { + r.register0("inCompiledCode", new InvocationPlugin() { public boolean apply(GraphBuilderContext builder) { builder.push(Kind.Int, builder.append(ConstantNode.forInt(1))); return true; } }); - plugins.register(lookup(metaAccess, "controlFlowAnchor"), new InvocationPlugin() { + r.register0("controlFlowAnchor", new InvocationPlugin() { public boolean apply(GraphBuilderContext builder) { builder.append(new ControlFlowAnchorNode()); return true; } }); - plugins.register(lookup(metaAccess, "injectBranchProbability", double.class, boolean.class), new InvocationPlugin() { + r.register2("injectBranchProbability", double.class, boolean.class, new InvocationPlugin() { public boolean apply(GraphBuilderContext builder, ValueNode probability, ValueNode condition) { builder.push(Kind.Int, builder.append(new BranchProbabilityNode(probability, condition))); return true; @@ -92,10 +89,10 @@ cls = kind.toJavaClass(); } - plugins.register(lookup(metaAccess, "blackhole", cls), blackholePlugin); + r.register1("blackhole", cls, blackholePlugin); final Kind stackKind = kind.getStackKind(); - plugins.register(lookup(metaAccess, "opaque", cls), new InvocationPlugin() { + r.register1("opaque", cls, new InvocationPlugin() { public boolean apply(GraphBuilderContext builder, ValueNode value) { builder.push(stackKind, builder.append(new OpaqueNode(value))); return true; diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderContext.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderContext.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderContext.java Fri Feb 06 03:25:19 2015 +0100 @@ -39,7 +39,7 @@ T append(T fixed); - T append(T v); + T append(T value); StampProvider getStampProvider(); @@ -48,4 +48,15 @@ Assumptions getAssumptions(); void push(Kind kind, ValueNode value); + + /** + * @see GuardingPiNode#makeNonNull(ValueNode) + */ + static ValueNode makeNonNull(GraphBuilderContext builder, ValueNode value) { + ValueNode nonNullValue = GuardingPiNode.makeNonNull(value); + if (nonNullValue != value) { + builder.append((FixedWithNextNode) nonNullValue); + } + return nonNullValue; + } } diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Feb 06 03:25:19 2015 +0100 @@ -38,11 +38,15 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.Graph.Mark; import com.oracle.graal.graph.Node.ValueNumberable; +import com.oracle.graal.graph.iterators.*; import com.oracle.graal.java.BciBlockMapping.BciBlock; import com.oracle.graal.java.BciBlockMapping.ExceptionDispatchBlock; import com.oracle.graal.java.BciBlockMapping.LocalLiveness; -import com.oracle.graal.java.GraphBuilderPlugins.*; +import com.oracle.graal.java.GraphBuilderPlugins.InlineInvokePlugin; +import com.oracle.graal.java.GraphBuilderPlugins.InvocationPlugin; +import com.oracle.graal.java.GraphBuilderPlugins.LoopExplosionPlugin; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.CallTargetNode.InvokeKind; import com.oracle.graal.nodes.calc.*; @@ -855,14 +859,8 @@ } if (graphBuilderPlugins != null) { - InvocationPlugin plugin = graphBuilderPlugins.lookupInvocation(targetMethod); - if (plugin != null) { - int beforeStackSize = frameState.stackSize; - if (plugin.apply(this, args)) { - assert beforeStackSize + resultType.getSlotCount() == frameState.stackSize; - return; - } - assert beforeStackSize == frameState.stackSize; + if (tryUsingInvocationPlugin(args, targetMethod, resultType)) { + return; } } @@ -887,6 +885,36 @@ } } + private boolean tryUsingInvocationPlugin(ValueNode[] args, ResolvedJavaMethod targetMethod, Kind resultType) { + InvocationPlugin plugin = graphBuilderPlugins.lookupInvocation(targetMethod); + if (plugin != null) { + int beforeStackSize = frameState.stackSize; + boolean needsNullCheck = !targetMethod.isStatic() && !StampTool.isPointerNonNull(args[0].stamp()); + int nodeCount = currentGraph.getNodeCount(); + Mark mark = needsNullCheck ? currentGraph.getMark() : null; + if (InvocationPlugin.execute(this, plugin, args)) { + assert beforeStackSize + resultType.getSlotCount() == frameState.stackSize : "plugin manipulated the stack incorrectly"; + assert !needsNullCheck || containsNullCheckOf(currentGraph.getNewNodes(mark), args[0]) : "plugin needs to null check the receiver of " + targetMethod + ": " + args[0]; + return true; + } + assert nodeCount == currentGraph.getNodeCount() : "plugin that returns false must not create new nodes"; + assert beforeStackSize == frameState.stackSize : "plugin that returns false must modify the stack"; + } + return false; + } + + private boolean containsNullCheckOf(NodeIterable nodes, Node value) { + for (Node n : nodes) { + if (n instanceof GuardingPiNode) { + GuardingPiNode pi = (GuardingPiNode) n; + if (pi.condition() instanceof IsNullNode) { + return ((IsNullNode) pi.condition()).getValue() == value; + } + } + } + return false; + } + private void parseAndInlineCallee(ResolvedJavaMethod targetMethod, ValueNode[] args) { BytecodeParser parser = new BytecodeParser(metaAccess, targetMethod, graphBuilderConfig, optimisticOpts, StructuredGraph.INVOCATION_ENTRY_BCI); final FrameState[] lazyFrameState = new FrameState[1]; diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java Fri Feb 06 03:25:19 2015 +0100 @@ -66,52 +66,53 @@ */ public interface InvocationPlugin extends GraphBuilderPlugin { /** - * Tries to handle an invocation to a method with no arguments. - * - * @return {@code true} this plugin handled the invocation + * @see #execute(GraphBuilderContext, InvocationPlugin, ValueNode[]) */ default boolean apply(GraphBuilderContext builder) { throw invalidHandler(builder); } /** - * Tries to handle an invocation to a method with one argument. - * - * @return {@code true} this plugin handled the invocation + * @see #execute(GraphBuilderContext, InvocationPlugin, ValueNode[]) */ default boolean apply(GraphBuilderContext builder, ValueNode arg) { throw invalidHandler(builder, arg); } /** - * Tries to handle an invocation to a method with two arguments. - * - * @return {@code true} this plugin handled the invocation + * @see #execute(GraphBuilderContext, InvocationPlugin, ValueNode[]) */ default boolean apply(GraphBuilderContext builder, ValueNode arg1, ValueNode arg2) { throw invalidHandler(builder, arg1, arg2); } /** - * Tries to handle an invocation to a method with three arguments. - * - * @return {@code true} this plugin handled the invocation + * @see #execute(GraphBuilderContext, InvocationPlugin, ValueNode[]) */ default boolean apply(GraphBuilderContext builder, ValueNode arg1, ValueNode arg2, ValueNode arg3) { throw invalidHandler(builder, arg1, arg2, arg3); } - default boolean apply(GraphBuilderContext builder, ValueNode[] args) { + /** + * Executes a given plugin against a set of invocation arguments by dispatching to the + * plugin's {@code apply(...)} method that matches the number of arguments. + * + * @return {@code true} if the plugin handled the invocation, {@code false} if the graph + * builder should process the invoke further (e.g., by inlining it or creating an + * {@link Invoke} node). A plugin that does not handle an invocation must not modify + * the graph being constructed. + */ + static boolean execute(GraphBuilderContext builder, InvocationPlugin plugin, ValueNode[] args) { if (args.length == 0) { - return apply(builder); + return plugin.apply(builder); } else if (args.length == 1) { - return apply(builder, args[0]); + return plugin.apply(builder, args[0]); } else if (args.length == 2) { - return apply(builder, args[0], args[1]); + return plugin.apply(builder, args[0], args[1]); } else if (args.length == 3) { - return apply(builder, args[0], args[1], args[2]); + return plugin.apply(builder, args[0], args[1], args[2]); } else { - throw invalidHandler(builder, args); + throw plugin.invalidHandler(builder, args); } } diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.java/src/com/oracle/graal/java/StandardGraphBuilderPluginsProvider.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/StandardGraphBuilderPluginsProvider.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/StandardGraphBuilderPluginsProvider.java Fri Feb 06 03:25:19 2015 +0100 @@ -22,21 +22,16 @@ */ package com.oracle.graal.java; -import static com.oracle.graal.api.meta.DeoptimizationAction.*; -import static com.oracle.graal.api.meta.DeoptimizationReason.*; -import static com.oracle.graal.compiler.common.type.StampFactory.*; +import static com.oracle.graal.java.GraphBuilderContext.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.runtime.*; -import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.java.GraphBuilderPlugins.InvocationPlugin; import com.oracle.graal.java.GraphBuilderPlugins.Registration; import com.oracle.graal.java.GraphBuilderPlugins.Registration.Receiver; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.type.*; /** * Provider of non-runtime specific {@link GraphBuilderPlugin}s. @@ -93,14 +88,7 @@ } public boolean apply(GraphBuilderContext builder, ValueNode value) { - ValueNode nonNullValue = value; - ObjectStamp receiverStamp = (ObjectStamp) value.stamp(); - if (!StampTool.isPointerNonNull(receiverStamp)) { - IsNullNode condition = builder.append(new IsNullNode(value)); - Stamp stamp = receiverStamp.join(objectNonNull()); - nonNullValue = builder.append(new GuardingPiNode(value, condition, true, NullCheckException, InvalidateReprofile, stamp)); - } - builder.push(kind.getStackKind(), builder.append(new UnboxNode(nonNullValue, kind))); + builder.push(kind.getStackKind(), builder.append(new UnboxNode(makeNonNull(builder, value), kind))); return true; } diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Fri Feb 06 03:25:19 2015 +0100 @@ -436,12 +436,13 @@ @Opcode("CAS") public static class CompareAndSwapOp extends SPARCLIRInstruction { - // @Def protected AllocatableValue result; - @Use protected AllocatableValue address; - @Use protected AllocatableValue cmpValue; - @Use protected AllocatableValue newValue; + @Def({REG, HINT}) protected AllocatableValue result; + @Alive({REG}) protected AllocatableValue address; + @Alive({REG}) protected AllocatableValue cmpValue; + @Use({REG}) protected AllocatableValue newValue; - public CompareAndSwapOp(AllocatableValue address, AllocatableValue cmpValue, AllocatableValue newValue) { + public CompareAndSwapOp(AllocatableValue result, AllocatableValue address, AllocatableValue cmpValue, AllocatableValue newValue) { + this.result = result; this.address = address; this.cmpValue = cmpValue; this.newValue = newValue; @@ -449,7 +450,8 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - compareAndSwap(masm, address, cmpValue, newValue); + move(crb, masm, result, newValue, delayedControlTransfer); + compareAndSwap(masm, address, cmpValue, result); } } diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Fri Feb 06 03:25:19 2015 +0100 @@ -22,6 +22,10 @@ */ package com.oracle.graal.nodes; +import static com.oracle.graal.api.meta.DeoptimizationAction.*; +import static com.oracle.graal.api.meta.DeoptimizationReason.*; +import static com.oracle.graal.compiler.common.type.StampFactory.*; + import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; @@ -65,6 +69,21 @@ return action; } + /** + * Returns a node whose stamp is guaranteed to be {@linkplain StampTool#isPointerNonNull(Stamp) + * non-null}. If {@code value} already has such a stamp, then it is returned. Otherwise a fixed + * node guarding {@code value} is returned where the guard performs a null check. + */ + public static ValueNode makeNonNull(ValueNode value) { + ObjectStamp receiverStamp = (ObjectStamp) value.stamp(); + if (!StampTool.isPointerNonNull(receiverStamp)) { + IsNullNode condition = value.graph().unique(new IsNullNode(value)); + Stamp stamp = receiverStamp.join(objectNonNull()); + return new GuardingPiNode(value, condition, true, NullCheckException, InvalidateReprofile, stamp); + } + return value; + } + public GuardingPiNode(ValueNode object) { this(object, object.graph().unique(new IsNullNode(object)), true, DeoptimizationReason.NullCheckException, DeoptimizationAction.None, object.stamp().join(StampFactory.objectNonNull())); } diff -r 3b2e98f9e47c -r 5adc03d22312 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalDirectivesSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalDirectivesSubstitutions.java Fri Feb 06 03:24:50 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalDirectivesSubstitutions.java Fri Feb 06 03:25:19 2015 +0100 @@ -48,6 +48,11 @@ return true; } + /* + * This needs to be a @MacroSubstitution, not a @MethodSubstitution, because we want to get a + * unique ControlFlowAnchorNode for each occurrence of this call. With @MethodSubstitution, we + * would get a clone of a single cached node. + */ @MacroSubstitution(forced = true, macro = ControlFlowAnchorNode.class) public static native void controlFlowAnchor(); diff -r 3b2e98f9e47c -r 5adc03d22312 mx/mx_graal.py --- a/mx/mx_graal.py Fri Feb 06 03:24:50 2015 +0100 +++ b/mx/mx_graal.py Fri Feb 06 03:25:19 2015 +0100 @@ -1484,6 +1484,14 @@ with Task('BuildHotSpotGraal: fastdebug,product', tasks): buildvms(['--vms', 'graal,server', '--builds', 'fastdebug,product']) + with VM('server', 'product'): # hosted mode + with Task('UnitTests:hosted-product', tasks): + unittest(['--enable-timing', '--verbose', '--fail-fast']) + + with VM('server', 'product'): # hosted mode + with Task('UnitTests-BaselineCompiler:hosted-product', tasks): + unittest(['--enable-timing', '--verbose', '--whitelist', 'test/whitelist_baseline.txt', '-G:+UseBaselineCompiler']) + with VM('graal', 'fastdebug'): with Task('BootstrapWithSystemAssertions:fastdebug', tasks): vm(['-esa', '-XX:-TieredCompilation', '-version']) @@ -1510,14 +1518,6 @@ with Task('BootstrapWithImmutableCode:product', tasks): vm(['-XX:-TieredCompilation', '-G:+ImmutableCode', '-G:+VerifyPhases', '-esa', '-version']) - with VM('server', 'product'): # hosted mode - with Task('UnitTests:hosted-product', tasks): - unittest(['--enable-timing', '--verbose', '--fail-fast']) - - with VM('server', 'product'): # hosted mode - with Task('UnitTests-BaselineCompiler:hosted-product', tasks): - unittest(['--enable-timing', '--verbose', '--whitelist', 'test/whitelist_baseline.txt', '-G:+UseBaselineCompiler']) - for vmbuild in ['fastdebug', 'product']: for test in sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild) + sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild): with Task(str(test) + ':' + vmbuild, tasks) as t: